Rat (Release Audit Tool) results

The following document contains the results of Rat (Release Audit Tool).

*****************************************************
Summary
-------
Generated at: 2024-03-14T11:39:06+01:00

Notes: 41
Binaries: 525
Archives: 10
Standards: 8838

Apache Licensed: 7669
Generated Documents: 2

JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.

1160 Unknown Licenses

*****************************************************

Files with unapproved licenses:

  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
  mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
  mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
  mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
  upgrade-instructions.md
  code-coverage-report/pom.xml
  CHANGELOG.md
  third-party/rspamd/docker-compose.yml
  third-party/rspamd/src/test/resources/rspamd-config/actions.conf
  third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
  third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
  third-party/rspamd/src/test/resources/mail/ham/ham1.eml
  third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
  third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
  third-party/rspamd/src/test/resources/mail/spam/spam8.eml
  third-party/rspamd/README.md
  third-party/rspamd/sample-configuration/extensions.properties
  third-party/rspamd/sample-configuration/antivirus.conf
  third-party/rspamd/sample-configuration/statistic.conf
  third-party/rspamd/sample-configuration/rspamd.properties
  third-party/rspamd/docker-compose-distributed.yml
  third-party/elasticsearch/docker-compose.yml
  third-party/elasticsearch/conf/extensions.properties
  third-party/elasticsearch/conf/elasticsearch.properties
  third-party/elasticsearch/README.md
  third-party/clamav/docker-compose.yml
  third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
  third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
  third-party/clamav/README.md
  third-party/crowdsec/docker-compose.yml
  third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
  third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
  third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
  third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
  third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
  third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
  third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
  third-party/crowdsec/src/test/resources/haproxy.cfg
  third-party/crowdsec/src/test/resources/log/james.log
  third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandlerTest.java
  third-party/crowdsec/README.md
  third-party/crowdsec/sample-configuration/collections/james.yaml
  third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
  third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
  third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
  third-party/crowdsec/sample-configuration/extensions.properties
  third-party/crowdsec/sample-configuration/acquis.yaml
  third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
  third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
  third-party/crowdsec/sample-configuration/crowdsec.properties
  third-party/spamassassin/docker-compose.yml
  third-party/spamassassin/src/test/resources/eml/spam.eml
  third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
  third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
  third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
  third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
  third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
  third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
  third-party/spamassassin/sample-configuration/extensions.properties
  third-party/spamassassin/sample-configuration/spamassassin.properties
  third-party/linshare/src/test/resources/docker-compose.yml
  third-party/linshare/src/test/resources/backend/Dockerfile
  third-party/linshare/src/test/resources/backend/conf/log4j.properties
  third-party/linshare/src/test/resources/backend/conf/id_rsa.pub
  third-party/linshare/src/test/resources/backend/conf/id_rsa.pri
  event-sourcing/event-sourcing-core/event-sourcing-core.iml
  backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
  backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
  backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
  backends-common/opensearch/src/test/resources/auth-es/README.md
  backends-common/opensearch/src/test/resources/auth-es/default.key
  backends-common/opensearch/src/test/resources/auth-es/default.crt
  backends-common/rabbitmq/src/test/resources/empty-store
  backends-common/redis/pom.xml
  backends-common/README.adoc
  backends-common/cassandra/src/test/resources/cassandra-driver.conf
  backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
  README.adoc
  src/site/resources/server/rfclist/smtp/rfc1985.txt
  src/site/resources/server/rfclist/smtp/rfc2554.txt
  src/site/resources/server/rfclist/smtp/rfc1652.txt
  src/site/resources/server/rfclist/smtp/rfc1830.txt
  src/site/resources/server/rfclist/smtp/rfc2142.txt
  src/site/resources/server/rfclist/smtp/rfc2034.txt
  src/site/resources/server/rfclist/smtp/rfc1891.txt
  src/site/resources/server/rfclist/smtp/rfc0974.txt
  src/site/resources/server/rfclist/smtp/rfc2821.txt
  src/site/resources/server/rfclist/smtp/rfc1870.txt
  src/site/resources/server/rfclist/smtp/rfc2197.txt
  src/site/resources/server/rfclist/smtp/rfc0821.txt
  src/site/resources/server/rfclist/smtp/rfc1869.txt
  src/site/resources/server/rfclist/smtp/rfc1893.txt
  src/site/resources/server/rfclist/lmtp/rfc2033.txt
  src/site/resources/server/rfclist/imap4/rfc2087.txt
  src/site/resources/server/rfclist/imap4/rfc2221.txt
  src/site/resources/server/rfclist/imap4/rfc2193.txt
  src/site/resources/server/rfclist/imap4/rfc2192.txt
  src/site/resources/server/rfclist/imap4/rfc2088.txt
  src/site/resources/server/rfclist/imap4/rfc2060.txt
  src/site/resources/server/rfclist/imap4/rfc2086.txt
  src/site/resources/server/rfclist/imap4/rfc2342.txt
  src/site/resources/server/rfclist/imap4/rfc2595.txt
  src/site/resources/server/rfclist/imap4/rfc2195.txt
  src/site/resources/server/rfclist/imap4/rfc2180.txt
  src/site/resources/server/rfclist/imap4/rfc5256.txt
  src/site/resources/server/rfclist/imap4/rfc2177.txt
  src/site/resources/server/rfclist/imap4/rfc2683.txt
  src/site/resources/server/rfclist/imap4/rfc2359.txt
  src/site/resources/server/rfclist/imap4/rfc1731.txt
  src/site/resources/server/rfclist/pop3/rfc1725.txt
  src/site/resources/server/rfclist/pop3/rfc1939.txt
  src/site/resources/server/rfclist/pop3/rfc1734.txt
  src/site/resources/server/rfclist/ldap/rfc2830.txt
  src/site/resources/server/rfclist/ldap/rfc2255.txt
  src/site/resources/server/rfclist/ldap/rfc2252.txt
  src/site/resources/server/rfclist/ldap/rfc3377.txt
  src/site/resources/server/rfclist/ldap/rfc2256.txt
  src/site/resources/server/rfclist/ldap/rfc2253.txt
  src/site/resources/server/rfclist/ldap/rfc2829.txt
  src/site/resources/server/rfclist/ldap/rfc2254.txt
  src/site/resources/server/rfclist/ldap/rfc2251.txt
  src/site/resources/server/rfclist/basic/rfc0822.txt
  src/site/resources/server/rfclist/basic/rfc2046.txt
  src/site/resources/server/rfclist/basic/rfc2822.txt
  src/site/resources/server/rfclist/basic/rfc1123.txt
  src/site/resources/server/rfclist/basic/rfc2045.txt
  src/site/markdown/server/manage-guice-distributed-james.md
  src/site/markdown/server/manage-cli.md
  src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
  src/site/markdown/server/install/guice-cassandra.md
  src/site/markdown/server/install/guice-jpa.md
  src/site/markdown/server/install/guice-jpa-smtp.md
  src/site/markdown/server/manage-webadmin.md
  src/site/markdown/mailet/release-notes.md
  src/site/markdown/mailet/quickstart.md
  src/homepage/about.md
  src/homepage/Gemfile.lock
  src/homepage/images/james-alt.svg
  src/homepage/images/james.svg
  src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
  src/homepage/_posts/2019-03-26-james-3.3.0.markdown
  src/homepage/_posts/2022-01-26-james-3.6.2.markdown
  src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
  src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
  src/homepage/_posts/2023-06-20-fail2ban.markdown
  src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
  src/homepage/_posts/2022-08-26-james-3.7.1.markdown
  src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
  src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
  src/homepage/_posts/2011-02-06-protocols-1.5.markdown
  src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
  src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
  src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
  src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
  src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
  src/homepage/_posts/2016-01-08-module-merge.markdown
  src/homepage/_posts/2016-02-08-moving-to-git.markdown
  src/homepage/_posts/2022-03-01-james-3.7.0.markdown
  src/homepage/_posts/2016-10-19-james-3.0.markdown
  src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
  src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
  src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
  src/homepage/_posts/2007-01-03-Mailet-api.markdown
  src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
  src/homepage/_posts/2009-06-16-jsieve-03.markdown
  src/homepage/_posts/2016-11-19-james-3.0.markdown
  src/homepage/_posts/2019-08-30-latest-image-changes.markdown
  src/homepage/_posts/2015-10-08-james-2.3.1.markdown
  src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
  src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
  src/homepage/_posts/2021-12-02-james-3.6.1.markdown
  src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
  src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
  src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
  src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
  src/homepage/_posts/2010-05-01-mailet-1.0.markdown
  src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
  src/homepage/_posts/2016-05-09-jmap.markdown
  src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
  src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
  src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
  src/homepage/_posts/2019-09-05-james-3.4.0.markdown
  src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
  src/homepage/_posts/2009-10-17-jdkim.markdown
  src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
  src/homepage/_posts/2020-07-16-james-3.5.0.markdown
  src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
  src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
  src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
  src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
  src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
  src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
  src/homepage/_posts/2018-11-14-james-3.2.0.markdown
  src/homepage/_posts/2010-12-06-protocols-1.2.markdown
  src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
  src/homepage/_posts/2023-05-17-james-3.8.0.markdown
  src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
  src/homepage/_posts/2016-07-09-jmap.markdown
  src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
  src/homepage/_posts/2022-10-06-james-3.7.2.markdown
  src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
  src/homepage/_posts/2022-12-30-james-3.7.3.markdown
  src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
  src/homepage/_posts/2015-09-08-james-2.3.1.markdown
  src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
  src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
  src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
  src/homepage/_posts/2023-03-20-james-3.7.4.markdown
  src/homepage/_posts/2009-08-17-james-2.3.2.markdown
  src/homepage/_posts/2018-01-26-admin-features.markdown
  src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
  src/homepage/_posts/2017-07-20-james-3.0.markdown
  src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
  src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
  src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
  src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
  src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
  src/homepage/_posts/2011-08-06-james-beta3.markdown
  src/homepage/_posts/2018-02-12-gsoc-2018.markdown
  src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
  src/homepage/_posts/2016-07-19-jmap.markdown
  src/homepage/_posts/2008-03-16-gsoc-2008.markdown
  src/homepage/_posts/2019-11-19-apache-con-eu.markdown
  src/homepage/_posts/2011-05-06-jdKim0.2.markdown
  src/homepage/_posts/2009-09-17-hupa.markdown
  src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
  src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
  src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
  src/homepage/_posts/2021-03-16-james-3.6.0.markdown
  src/homepage/_posts/2016-09-19-james-3.0.markdown
  src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
  src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
  src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
  src/homepage/_posts/2018-07-31-james-3.1.0.markdown
  src/homepage/_posts/2006-08-02-james-website-updates.markdown
  src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
  src/homepage/_posts/2012-06-08-hupa-0.2.markdown
  src/homepage/_posts/2024-01-09-james-3.7.5.markdown
  src/homepage/_posts/2016-02-09-jmap.markdown
  src/homepage/_posts/2024-01-09-james-3.8.1.markdown
  src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
  src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
  src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
  src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
  src/homepage/_posts/2017-10-20-james-3.0.1.markdown
  src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
  src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
  src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
  src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
  src/homepage/_config.yml
  src/homepage/assets/css/font-awesome.min.css
  src/homepage/assets/css/main.css
  src/homepage/assets/css/lity.min.css
  src/homepage/assets/css/ie8.css
  src/homepage/assets/css/ie9.css
  src/homepage/assets/css/test.html
  src/homepage/assets/css/lightbox.css
  src/homepage/assets/fonts/fontawesome-webfont.svg
  src/homepage/assets/js/main.js
  src/homepage/assets/js/github-fetch.js
  src/homepage/assets/js/jquery.min.js
  src/homepage/assets/js/lightbox.js
  src/homepage/assets/js/ie/PIE.htc
  src/homepage/assets/js/ie/respond.min.js
  src/homepage/assets/js/ie/html5shiv.js
  src/homepage/assets/js/jquery.scrolly.min.js
  src/homepage/assets/js/skel.min.js
  src/homepage/assets/js/lity.min.js
  src/homepage/assets/js/util.js
  src/homepage/assets/js/jquery.scrollex.min.js
  src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_syntax-highlighting.scssc
  src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_base.scssc
  src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_layout.scssc
  src/homepage/.sass-cache/0d97c95486dbfb22208e2f940de32f180caddfba/minima.scssc
  src/homepage/_site/about.md
  src/homepage/_site/images/james-alt.svg
  src/homepage/_site/images/james.svg
  src/homepage/_site/assets/main.css
  src/homepage/_site/assets/css/font-awesome.min.css
  src/homepage/_site/assets/css/main.css
  src/homepage/_site/assets/css/lity.min.css
  src/homepage/_site/assets/css/ie8.css
  src/homepage/_site/assets/css/ie9.css
  src/homepage/_site/assets/css/test.html
  src/homepage/_site/assets/css/lightbox.css
  src/homepage/_site/assets/minima-social-icons.svg
  src/homepage/_site/assets/fonts/fontawesome-webfont.svg
  src/homepage/_site/assets/js/main.js
  src/homepage/_site/assets/js/github-fetch.js
  src/homepage/_site/assets/js/jquery.min.js
  src/homepage/_site/assets/js/lightbox.js
  src/homepage/_site/assets/js/ie/PIE.htc
  src/homepage/_site/assets/js/ie/respond.min.js
  src/homepage/_site/assets/js/ie/html5shiv.js
  src/homepage/_site/assets/js/jquery.scrolly.min.js
  src/homepage/_site/assets/js/skel.min.js
  src/homepage/_site/assets/js/lity.min.js
  src/homepage/_site/assets/js/util.js
  src/homepage/_site/assets/js/jquery.scrollex.min.js
  src/homepage-docker/Dockerfile
  src/homepage-docker/compile.sh
  src/site-docker/Dockerfile
  src/site-docker/compile.sh
  src/adr/0026-removing-configured-additional-mailboxListeners.md
  src/adr/0032-distributed-mail-queue-cleanup.md
  src/adr/0007-distributed-task-cancellation.md
  src/adr/0043-avoid-elasticsearch-on-critical-reads.md
  src/adr/0068-mutualize-cassandra-storge-for-quota.md
  src/adr/0066-modular-user-data-deletion.md
  src/adr/0039-distributed-blob-garbage-collector.md
  src/adr/0030-separate-attachment-content-and-metadata.md
  src/adr/0055-rspamd-spam-filtering.md
  src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
  src/adr/0050-jmap-web-push.md
  src/adr/0002-make-taskmanager-distributed.md
  src/adr/0012-jmap-partial-reads.md
  src/adr/0038-distributed-eventbus.md
  src/adr/0031-distributed-mail-queue.md
  src/adr/0004-distributed-tasks-listing.md
  src/adr/0027-eventBus-error-handling-upon-dispatch.md
  src/adr/0021-cassandra-acl-inconsistency.md
  src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
  src/adr/0063-temporary-file-leaks.md
  src/adr/0069-crowdsec-IP-filtering.md
  src/adr/0037-eventbus.md
  src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
  src/adr/0024-polyglot-strategy.md
  src/adr/0060-adopt-bounded-elastic.md
  src/adr/0058-upgrade-to-netty-4.md
  src/adr/0042-applicative-read-repairs.md
  src/adr/0048-cleanup-jmap-uploads.md
  src/adr/0015-objectstorage-blobid-list.md
  src/adr/0017-file-mail-queue-deprecation.md
  src/adr/0020-cassandra-mailbox-object-consistency.md
  src/adr/0047-jmap-push-over-websockets.md
  src/adr/0009-disable-elasticsearch-dynamic-mapping.md
  src/adr/0006-task-serialization.md
  src/adr/0057-reactive-imap.md
  src/adr/0051-oidc.md
  src/adr/0019-reactor-netty-adoption.md
  src/adr/0054-elasticsearch-search-overrides.md
  src/adr/0040-quality-levels-definitions.md
  src/adr/0056-opensearch-migration.md
  src/adr/0042-james-cli-based-on-webadmin.md
  src/adr/0003-distributed-workqueue.md
  src/adr/0009-java-11-migration.md
  src/adr/0065-changing-username.md
  src/adr/0025-cassandra-blob-store-cache.md
  src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
  src/adr/0064-account-delegation.md
  src/adr/0046-generalize-event-bus.md
  src/adr/0001-record-architecture-decisions.md
  src/adr/0034-mailbox-api-visibility-and-usage.md
  src/adr/0018-jmap-new-specs.md
  src/adr/0035-distributed-listeners-configuration.md
  src/adr/0062-oidc-token-introspection.md
  src/adr/0041-replace-jcloud-with-s3.md
  src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
  src/adr/0011-remove-elasticsearch-document-source.md
  src/adr/0059-upgrade-to-cassadra-driver-4.md
  src/adr/0016-distributed-workqueue.md
  src/adr/0052-pulsar-mailqueue.md
  src/adr/0014-blobstore-storage-policies.md
  src/adr/0008-distributed-task-await.md
  src/adr/0053-email-rate-limiting.md
  src/adr/0013-precompute-jmap-preview.md
  src/adr/0067-quota-for-jmap-uploads.md
  src/adr/0028-Recompute-mailbox-quotas.md
  src/adr/0070-postgresql-adoption.md
  src/adr/0022-cassandra-message-inconsistency.md
  src/adr/0005-distributed-task-termination-ackowledgement.md
  src/adr/0033-use-scala-in-event-sourcing-modules.md
  src/adr/0061-delegation.md
  src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
  src/adr/0010-enable-elasticsearch-routing.md
  protocols/smtp/src/test/resources/a50.eml
  server/README.crypto
  server/queue/queue-memory/pom.xml
  server/apps/memory-app/src/main/extensions-jars/README.md
  server/apps/memory-app/src/main/scripts/james-cli
  server/apps/memory-app/src/test/resources/jwt_publickey
  server/apps/memory-app/src/assemble/README.adoc
  server/apps/memory-app/src/assemble/extensions-jars.txt
  server/apps/memory-app/README.md
  server/apps/memory-app/sample-configuration/extensions.properties
  server/apps/memory-app/sample-configuration/deletedMessageVault.properties
  server/apps/memory-app/sample-configuration/jvm.properties
  server/apps/memory-app/sample-configuration/jmap.properties
  server/apps/webadmin-cli/src/test/resources/jwt_publickey
  server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
  server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
  server/apps/webadmin-cli/README.md
  server/apps/webadmin-cli/james-cli
  server/apps/scaling-pulsar-smtp/docker-compose.yml
  server/apps/scaling-pulsar-smtp/README.adoc
  server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
  server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
  server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
  server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
  server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
  server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
  server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
  server/apps/spring-app/README.crypto
  server/apps/spring-app/src/main/resources/log4j2.xml
  server/apps/spring-app/src/main/resources/jmxremote.access
  server/apps/spring-app/src/main/resources/jmxremote.password
  server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
  server/apps/spring-app/src/debian/control/control
  server/apps/distributed-pop3-app/docker-configuration/jvm.properties
  server/apps/distributed-pop3-app/docker-compose.yml
  server/apps/distributed-pop3-app/README.adoc
  server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
  server/apps/distributed-pop3-app/src/main/scripts/james-cli
  server/apps/distributed-pop3-app/src/test/resources/attachment.eml
  server/apps/distributed-pop3-app/src/test/resources/big.eml
  server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
  server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
  server/apps/distributed-pop3-app/sample-configuration/extensions.properties
  server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
  server/apps/distributed-pop3-app/sample-configuration/jvm.properties
  server/apps/distributed-pop3-app/sample-configuration/logback.xml
  server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
  server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
  server/apps/distributed-pop3-app/sample-configuration/blob.properties
  server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
  server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
  server/apps/jpa-smtp-app/docker-compose.yml
  server/apps/jpa-smtp-app/README.adoc
  server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
  server/apps/jpa-smtp-app/src/main/scripts/james-cli
  server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
  server/apps/jpa-smtp-app/conf/extensions.properties
  server/apps/jpa-smtp-app/conf/jvm.properties
  server/apps/jpa-smtp-app/conf/logback.xml
  server/apps/jpa-smtp-app/sample-configuration/extensions.properties
  server/apps/jpa-smtp-app/sample-configuration/jvm.properties
  server/apps/jpa-smtp-app/sample-configuration/logback.xml
  server/apps/conf/jmxremote.access
  server/apps/conf/jmxremote.password
  server/apps/demo/initialdata.sh
  server/apps/demo/Dockerfile
  server/apps/demo/startup.sh
  server/apps/cli/README.adoc
  server/apps/distributed-app/docker-configuration/jvm.properties
  server/apps/distributed-app/docker-compose.yml
  server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
  server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
  server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
  server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
  server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
  server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
  server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
  server/apps/distributed-app/helm-chart/james/templates/service.yaml
  server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
  server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
  server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
  server/apps/distributed-app/helm-chart/james/Chart.yaml
  server/apps/distributed-app/helm-chart/james/values.yaml
  server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
  server/apps/distributed-app/helm-chart/james/configs/logback.xml
  server/apps/distributed-app/helm-chart/james/configs/jmap.properties
  server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
  server/apps/distributed-app/helm-chart/james/configs/blob.properties
  server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
  server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
  server/apps/distributed-app/helm-chart/README.md
  server/apps/distributed-app/docker-compose-with-pulsar.yml
  server/apps/distributed-app/README.adoc
  server/apps/distributed-app/src/main/extensions-jars/README.md
  server/apps/distributed-app/src/main/scripts/james-cli
  server/apps/distributed-app/src/test/resources/batchsizes.properties
  server/apps/distributed-app/src/test/resources/rabbitmq.properties
  server/apps/distributed-app/src/assemble/extensions-jars.txt
  server/apps/distributed-app/sample-configuration/extensions.properties
  server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
  server/apps/distributed-app/sample-configuration/queue-pulsar.properties
  server/apps/distributed-app/sample-configuration/pulsar.properties
  server/apps/distributed-app/sample-configuration/jvm.properties
  server/apps/distributed-app/sample-configuration/queue.properties
  server/apps/distributed-app/sample-configuration/logback.xml
  server/apps/distributed-app/sample-configuration/jmap.properties
  server/apps/distributed-app/sample-configuration/cassandra-driver.conf
  server/apps/distributed-app/sample-configuration/batchsizes.properties
  server/apps/distributed-app/sample-configuration/blob.properties
  server/apps/distributed-app/sample-configuration/cassandra.properties
  server/apps/distributed-app/sample-configuration/rabbitmq.properties
  server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
  server/apps/distributed-app/docs/ui-overrides/img/james.svg
  server/apps/distributed-app/docs/modules/ROOT/nav.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/architecture/implemented-standards.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/architecture/specialized-instances.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/architecture/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/architecture/consistency-model.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/objectives.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/metrics.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/security.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/migrating.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/performanceChecklist.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/logging.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/cassandra-migration.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/operate/cli.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/db-benchmark.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/james-benchmark.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/provision.sh
  server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/mail-processing.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/smtp-hooks.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/imap.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/webadmin-routes.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/mailbox-listeners.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/extending/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-secrets.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-logsMetrics.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/run-docker.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/run-kubernetes.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-values.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/run-java.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-checklist.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-events.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/matchers.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailets.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/batchsizes.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp-hooks.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/domainlist.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/queue.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/dsn.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmx.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/cassandra.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/tika.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/jvm.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmap.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailrepositorystore.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-contacts.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/search.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/blobstore.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/extensions.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/sieve.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/listeners.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/imap.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/ssl.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailetcontainer.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/recipientrewritetable.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/rabbitmq.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/spam.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/remote-delivery-error-handling.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/index.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/dns.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/redis.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/healthcheck.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/usersrepository.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/opensearch.adoc
  server/apps/distributed-app/docs/modules/ROOT/pages/configure/pop3.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsOverQuota.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasHeaderWithPrefix.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ManageSieveMailet.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AddFooter.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/FileRegexMatcher.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AtMostPriority.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientToLowerCase.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Expires.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AmqpForwardAttribute.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/LogMessage.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ClamAVScan.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesToMimeHeaders.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeader.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsNull.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SerialiseToHTTP.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ClassifyBounce.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMESigned.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SubjectIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ToPlainText.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/WithStorageDirective.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMEEncrypted.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AtMost.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ExtractMDNOriginalJMAPMessageId.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientRewriteTable.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsLocal.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeaderByPrefix.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ConvertTo7Bit.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HostIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/UserIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/XOriginatingIpInNetwork.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ICalendarParser.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasPriority.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/LocalDelivery.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/NESSpamCheck.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SPF.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/TextCalendarBodyToAttachment.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/WithPriority.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SpamAssassin.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Forward.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientDomainIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMTPIsAuthNetwork.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValueRegex.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ReplaceContent.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrInNetwork.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/NotifyPostmaster.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HeadersToHTTP.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/CommandForListserv.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RandomStoring.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/PostmasterAlias.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMIMECheckSignature.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecoverAttachment.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/StripAttachment.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/DKIMSign.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/TooManyRecipients.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoveAllMailAttributes.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ICALToHeader.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeAnySubPart.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AttachmentFileNameIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/MimeDecodingMailet.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsX509CertificateSubject.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Bounce.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/WrapText.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/DKIMVerify.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsSenderInRRTLoop.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SetMimeHeader.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Redirect.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RelayLimit.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ICALToJsonAttribute.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/TooManyLines.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsSingleRecipient.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ToRepository.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderInFakeDomain.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Null.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryPermanentError.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDelivery.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ServerTime.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AddSubjectPrefix.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMailAttribute.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Resend.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasException.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasHabeasWarrantMark.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/UnwrapText.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderDomainRepository.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/VacationMailet.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasAttachment.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/All.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/CommandListservMatcher.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Sieve.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ToProcessor.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesListToMimeHeaders.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/FetchedFrom.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HostIsLocal.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SetMailAttribute.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeParameter.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrNotInNetwork.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AtLeastPriority.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ContactExtractor.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/Sign.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValue.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/DSNBounce.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDeliveryFailedWithSMTPCode.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttribute.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderFolder.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIsLocal.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/CompareNumericHeaderValue.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsRegex.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/NotifySender.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMIMESign.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SubjectStartsWith.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderDomainIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryTemporaryError.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SentByMailet.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/DLP.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsLocal.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/FromRepository.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/InSpammerBlacklist.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/IsMarkedAsSpam.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthSuccessful.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasHeader.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeType.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/OnlyText.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/UseHeaderRecipients.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SentByJmap.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/ICSSanitizer.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsRegex.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AddHabeasWarrantMark.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/MetricsMailet.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthUserIs.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/AddDeliveredToHeader.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SMIMEDecrypt.adoc
  server/apps/distributed-app/docs/modules/ROOT/partials/SizeGreaterThan.adoc
  server/apps/distributed-app/docs/README.md
  server/apps/distributed-app/docs/antora-playbook-local.yml
  server/apps/distributed-app/docs/antora.yml
  server/apps/cli-integration-tests/src/test/resources/jwt_publickey
  server/apps/cassandra-app/docker-configuration/jvm.properties
  server/apps/cassandra-app/docker-compose.yml
  server/apps/cassandra-app/README.adoc
  server/apps/cassandra-app/src/main/extensions-jars/README.md
  server/apps/cassandra-app/src/main/scripts/james-cli
  server/apps/cassandra-app/src/test/resources/ldif-files/populate.ldif
  server/apps/cassandra-app/src/test/resources/batchsizes.properties
  server/apps/cassandra-app/src/assemble/extensions-jars.txt
  server/apps/cassandra-app/sample-configuration/extensions.properties
  server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
  server/apps/cassandra-app/sample-configuration/jvm.properties
  server/apps/cassandra-app/sample-configuration/logback.xml
  server/apps/cassandra-app/sample-configuration/jmap.properties
  server/apps/cassandra-app/sample-configuration/cassandra-driver.conf
  server/apps/cassandra-app/sample-configuration/batchsizes.properties
  server/apps/cassandra-app/sample-configuration/activemq.properties
  server/apps/cassandra-app/sample-configuration/blob.properties
  server/apps/cassandra-app/sample-configuration/cassandra.properties
  server/apps/jpa-app/docker-compose.yml
  server/apps/jpa-app/README.adoc
  server/apps/jpa-app/src/main/extensions-jars/README.md
  server/apps/jpa-app/src/main/scripts/james-cli
  server/apps/jpa-app/src/assemble/extensions-jars.txt
  server/apps/jpa-app/sample-configuration/extensions.properties
  server/apps/jpa-app/sample-configuration/jwt_publickey
  server/apps/jpa-app/sample-configuration/jvm.properties
  server/apps/jpa-app/sample-configuration/logback.xml
  server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
  server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
  server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
  server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
  server/protocols/webadmin/webadmin-pop3/README.md
  server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
  server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
  server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
  server/protocols/jmap-draft/doc/annotation.css
  server/protocols/jmap-draft/doc/Dockerfile
  server/protocols/jmap-draft/doc/specs/client-guide/jmap-client-guide.mdwn
  server/protocols/jmap-draft/doc/specs/home/faq.mdwn
  server/protocols/jmap-draft/doc/specs/software/software.mdwn
  server/protocols/jmap-draft/doc/specs/server-guide/jmap-server-guide.mdwn
  server/protocols/jmap-draft/doc/specs/spec/vacationresponse.mdwn
  server/protocols/jmap-draft/doc/specs/spec/searchsnippet.mdwn
  server/protocols/jmap-draft/doc/specs/spec/push.mdwn
  server/protocols/jmap-draft/doc/specs/spec/calendarevent.mdwn
  server/protocols/jmap-draft/doc/specs/spec/thread.mdwn
  server/protocols/jmap-draft/doc/specs/spec/mailbox.mdwn
  server/protocols/jmap-draft/doc/specs/spec/message.mdwn
  server/protocols/jmap-draft/doc/specs/spec/account.mdwn
  server/protocols/jmap-draft/doc/specs/spec/contactgroup.mdwn
  server/protocols/jmap-draft/doc/specs/spec/calendar.mdwn
  server/protocols/jmap-draft/doc/specs/spec/contactlist.mdwn
  server/protocols/jmap-draft/doc/specs/spec/contact.mdwn
  server/protocols/jmap-draft/doc/specs/spec/upload.mdwn
  server/protocols/jmap-draft/doc/specs/spec/authentication.mdwn
  server/protocols/jmap-draft/doc/specs/spec/messagelist.mdwn
  server/protocols/jmap-draft/doc/specs/spec/apimodel.mdwn
  server/protocols/jmap-draft/doc/specs/spec/calendareventlist.mdwn
  server/protocols/jmap-draft/doc/specs/spec/datamodel.mdwn
  server/protocols/jmap-draft/doc/mkdocs.yml
  server/protocols/jmap-draft/doc/README.md
  server/protocols/jmap-draft/src/main/resources/jwt-public.der
  server/protocols/jmap-draft/src/test/resources/noReplyTo.eml
  server/protocols/jmap-draft/src/test/resources/inlineAttachment.eml
  server/protocols/jmap-draft/src/test/resources/spamMail.eml
  server/protocols/jmap-draft/src/test/resources/key.pub
  server/protocols/jmap-draft/src/test/resources/fullMessage.eml
  server/protocols/jmap-draft/src/test/resources/example.html
  server/protocols/jmap-draft/src/test/resources/private.nopass.key
  server/protocols/jmap-draft/src/test/resources/oneAttachment.eml
  server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
  server/protocols/jmap-draft/src/test/resources/calendar.eml
  server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/OldKeywordTest.java
  server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
  server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
  server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
  server/protocols/jmap-rfc-8621/doc/specs/README.md
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
  server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
  server/protocols/jmap-rfc-8621/doc/README.md
  server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
  server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
  server/protocols/protocols-smtp/src/test/resources/log4j.xml
  server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoSameAttachments.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlMail.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlWithLongAndComplicatedContent.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/ics_in_header.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlBodyWithManyEmptyTags.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentAndBlankCid.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/windows1252charset.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImageWithoutContentDisposition.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachments.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/multipartRelated.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImage.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/sameInlinedImages.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentID.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlAndTextMultipartWithOneAttachment.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/longLine.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/textInMainMultipartHtmlInInnerMultipart.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachmentsTextPlain.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part1.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentDisposition.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/calendar.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedMultipart.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part2.eml
  server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/attachment/nonIndexableAttachment.html
  server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
  server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
  server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
  server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
  server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
  server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
  server/protocols/protocols-library/src/test/resources/testServerPlain.xml
  server/protocols/protocols-library/src/test/resources/testServerTLS.xml
  server/protocols/protocols-managesieve/pom.xml
  server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
  server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
  server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/rtf.mp.alt.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_report.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested_mixed_alternative.txt
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/iso-8859-1.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mixed_alternative.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
  server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
  server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
  server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
  server/protocols/protocols-pop3/src/test/resources/pop3server.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
  server/protocols/protocols-imap4/src/test/resources/oauth.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
  server/protocols/protocols-imap4/src/test/resources/private.nopass.key
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
  server/protocols/protocols-imap4/src/test/resources/imapServer.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
  server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
  server/protocols/protocols-imap4/src/test/resources/private.key
  server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
  server/protocols/protocols-imap4/src/test/resources/certs.csr
  server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
  server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
  server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
  server/Overview.md
  server/mailet/rate-limiter-redis/redis.properties
  server/mailet/rate-limiter-redis/extensions.properties
  server/mailet/rate-limiter-redis/docker-compose.yml
  server/mailet/rate-limiter-redis/README.adoc
  server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
  server/mailet/integration-testing/src/main/resources/eml/crypted.eml
  server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
  server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
  server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
  server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
  server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
  server/mailet/integration-testing/src/main/resources/eml/calendar.eml
  server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
  server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
  server/mailet/rate-limiter/extensions.properties
  server/mailet/rate-limiter/docker-compose.yml
  server/mailet/rate-limiter/README.adoc
  server/mailet/mailets/src/main/resources/managesieve.help.txt
  server/mailet/mailets/src/test/resources/noReplyTo.eml
  server/mailet/mailets/src/test/resources/spamMail.eml
  server/mailet/mailets/src/test/resources/eml/gmail.eml
  server/mailet/mock-smtp-server/README.adoc
  server/mailet/mock-smtp-server/src/main/jib/logback.xml
  server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
  server/container/filesystem-api/src/test/resources/classpathTest.txt
  server/container/filesystem-api/src/test/resources/class path Test.txt
  server/container/core/src/test/resources/JAMES-1593.eml
  server/container/core/src/test/resources/mail-containing-unicode-characters.eml
  server/container/guice/memory/README.md
  server/container/guice/configuration/src/test/resources/b.properties
  server/container/guice/configuration/src/test/resources/a.properties
  server/container/guice/configuration/src/test/resources/env.properties
  server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
  server/container/guice/common/src/test/resources/test.properties
  server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
  server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
  server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
  server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
  server/container/guice/utils/src/test/resources/extensions-empty.properties
  server/container/guice/utils/src/test/resources/extensions-two.properties
  server/container/guice/utils/src/test/resources/extensions-none.properties
  server/container/guice/utils/src/test/resources/extensions-one.properties
  server/container/guice/testing/custom-mailets/README.md
  server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
  server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
  server/data/data-library/src/test/resources/sieve/my_sieve
  server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
  server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
  server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
  server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
  server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
  server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
  server/data/data-ldap/src/test/resources/usersrepository-default.xml
  server/data/data-jpa/src/test/resources/log4j.properties
  server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
  server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
  server/grafana-reporting/prometheus-datasource/README.md
  server/grafana-reporting/es-datasource/README.md
  mailet/icalendar/src/test/resources/ics_in_header.eml
  mailet/icalendar/src/test/resources/ics/no_event.ics
  mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
  mailet/icalendar/src/test/resources/ics/ics_with_error.ics
  mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
  mailet/icalendar/src/test/resources/ics/meeting_2.ics
  mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
  mailet/icalendar/src/test/resources/ics/meeting.ics
  mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
  mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
  mailet/standard/src/test/resources/mime/gmail.mime
  mailet/standard/src/test/resources/mime/headerFolded.mime
  mailet/standard/src/test/resources/mime/space.eml
  mailet/standard/src/test/resources/mime/incorrect-headers.mime
  mailet/standard/LICENSE.apache
  mailet/standard/LICENSE.activation
  mailet/standard/LICENSE.mail
  mailet/base/src/test/resources/eml/text-only-7bit.eml
  mailet/base/src/test/resources/eml/multipart-7bit.eml
  mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
  mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
  mailet/base/src/test/resources/eml/multipart-8bit.eml
  mailet/base/src/test/resources/eml/text-only-8bit.eml
  examples/custom-webadmin-route/README.md
  examples/metrics-graphite/docker-compose.yml
  examples/metrics-graphite/james/extensions.properties
  examples/metrics-graphite/README.md
  examples/custom-smtp-hooks/README.md
  examples/proxy-smtp/docker-compose.yml
  examples/proxy-smtp/haproxy.cfg
  examples/proxy-smtp/README.md
  examples/custom-smtp-command/README.md
  examples/custom-listeners/README.md
  examples/custom-imap/docker-compose.yml
  examples/custom-imap/README.md
  examples/custom-mailets/README.md
  examples/custom-healthcheck/README.md
  examples/README.md
  examples/imap-autoconf/content/mail/config-v1.1.xml
  examples/imap-autoconf/content/Autodiscover/Autodiscover.xml
  examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
  examples/imap-autoconf/content/autodiscover/autodiscover.xml
  examples/imap-autoconf/docker-compose.yml
  examples/imap-autoconf/README.adoc
  examples/imap-autoconf/default.conf
  examples/custom-james-assembly/README.md
  examples/oidc/test.sh
  examples/oidc/docker-compose.yml
  examples/oidc/james/imapserver.xml
  examples/oidc/james/jmap.properties
  examples/oidc/james/smtpserver.xml
  examples/oidc/_media/oidc-sso.drawio
  examples/oidc/_media/oidc-slo.drawio
  examples/oidc/_media/IMAP_SMTP oidc.drawio
  examples/oidc/apisix/conf/apisix.yaml
  examples/oidc/apisix/conf/config.yaml
  examples/oidc/README.md
  examples/oidc/ldap/populate.ldif
  mailbox/spring/src/test/README.md
  mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
  mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
  mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
  mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
  mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
  mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
  mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
  mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
  mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
  mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
  mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
  mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
  mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
  mailbox/opensearch/src/test/resources/eml/htmlContent.txt
  mailbox/opensearch/src/test/resources/eml/alternative.eml
  mailbox/memory/src/test/resources/test.eml
  mailbox/tika/src/test/resources/documents/Text.txt
  mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
  mailbox/README.md
  mailbox/var/store/derby/db.lck
  mailbox/var/store/derby/service.properties
  mailbox/var/store/derby/log/README_DO_NOT_TOUCH_FILES.txt
  mailbox/var/store/derby/README_DO_NOT_TOUCH_FILES.txt
  mailbox/var/store/derby/seg0/README_DO_NOT_TOUCH_FILES.txt
  mailbox/var/store/lucene/write.lock
  mailbox/store/src/test/resources/eml/pgpSignedMail.eml
  mailbox/store/src/test/resources/eml/htmlMail.eml
  mailbox/store/src/test/resources/eml/mail4.eml
  mailbox/store/src/test/resources/eml/recursiveMail.eml
  mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
  mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
  mailbox/store/src/test/resources/eml/calendar2.eml
  mailbox/store/src/test/resources/eml/signedMessage.eml
  mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
  mailbox/store/src/test/resources/eml/mail5.eml
  mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
  mailbox/store/src/test/resources/eml/spamMail.eml
  mailbox/store/src/test/resources/eml/mail.eml
  mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
  mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
  mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
  mailbox/store/src/test/resources/eml/invalidCharset.eml
  mailbox/store/src/test/resources/eml/headerWithDot.eml
  mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
  mailbox/store/src/test/resources/eml/inlined-mixed.eml
  mailbox/store/src/test/resources/eml/filenameOnly.eml
  mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
  mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
  mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
  mailbox/store/src/test/resources/eml/james-3901.eml
  mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
  mailbox/store/src/test/resources/eml/filenameAndName.eml
  mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
  mailbox/store/src/test/resources/eml/mail3.eml
  mailbox/store/src/test/resources/eml/frnog.eml
  mailbox/store/src/test/resources/eml/twoAttachments.eml
  mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
  mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
  mailbox/store/src/test/resources/eml/unknownDisposition.eml
  mailbox/store/src/test/resources/eml/mail2.eml
  mailbox/store/src/test/resources/eml/mail1.eml
  mailbox/store/src/test/resources/eml/noAttachment.eml
  mailbox/store/src/test/resources/eml/charset.eml
  mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
  mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
  mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
  mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
  mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
  mailbox/store/src/test/resources/eml/calendar.eml
  mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
  mailbox/store/src/test/resources/eml/charset2.eml
  mailbox/store/src/test/resources/eml/nonTextual.eml
  mailbox/store/src/test/resources/documents/writter.docx
  mailbox/store/src/test/resources/documents/Text.txt
  mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
  mailbox/cassandra/doc/README.md
  mailbox/cassandra/doc/table_structure.drawio
  mailbox/cassandra/src/test/resources/cassandra-driver.conf
  docs/modules/customization/nav.adoc
  docs/modules/customization/pages/index.adoc
  docs/modules/servers/nav.adoc
  docs/modules/servers/pages/5-minute-demo.adoc
  docs/modules/servers/pages/extendable.adoc
  docs/modules/servers/pages/15-minute-demo.adoc
  docs/modules/servers/pages/test.adoc
  docs/modules/servers/pages/demo.adoc
  docs/modules/servers/pages/basic/context.adoc
  docs/modules/servers/pages/basic/objectives.adoc
  docs/modules/servers/pages/basic/conf/index.adoc
  docs/modules/servers/pages/basic/help.adoc
  docs/modules/servers/pages/basic/concepts.adoc
  docs/modules/servers/pages/basic/architecture.adoc
  docs/modules/servers/pages/basic/index.adoc
  docs/modules/servers/pages/basic/self-hosting.notes
  docs/modules/servers/pages/run.adoc
  docs/modules/servers/pages/index.adoc
  docs/modules/concepts/nav.adoc
  docs/modules/concepts/pages/configuration.adoc
  docs/modules/concepts/pages/mail/index.adoc
  docs/modules/concepts/pages/storage/mailbox.adoc
  docs/modules/concepts/pages/storage/users.adoc
  docs/modules/concepts/pages/storage/index.adoc
  docs/modules/concepts/pages/messages/mime.adoc
  docs/modules/concepts/pages/messages/imf.adoc
  docs/modules/concepts/pages/messages/index.adoc
  docs/modules/concepts/pages/protocols/jmap.adoc
  docs/modules/concepts/pages/protocols/imap.adoc
  docs/modules/concepts/pages/protocols/smtp.adoc
  docs/modules/concepts/pages/protocols/index.adoc
  docs/modules/concepts/pages/protocols/pop.adoc
  docs/modules/concepts/pages/protocols/esmtp.adoc
  docs/modules/concepts/pages/protocols/lmtp.adoc
  docs/modules/concepts/pages/user/index.adoc
  docs/modules/concepts/pages/processing/index.adoc
  docs/modules/concepts/pages/glossary.adoc
  docs/modules/concepts/pages/index.adoc
  docs/modules/ROOT/nav.adoc
  docs/modules/ROOT/pages/index.adoc
  docs/modules/development/nav.adoc
  docs/modules/development/pages/deployment-tests.adoc
  docs/modules/development/pages/logging.adoc
  docs/modules/development/pages/index.adoc
  docs/modules/community/nav.adoc
  docs/modules/community/pages/support.adoc
  docs/modules/community/pages/website.adoc
  docs/modules/community/pages/guidelines.adoc
  docs/modules/community/pages/download.adoc
  docs/modules/community/pages/mailing-lists.adoc
  docs/modules/community/pages/release.adoc
  docs/modules/community/pages/index.adoc
  docs/modules/community/pages/contributing.adoc
  docs/antora.yml
  testing/base/src/main/resources/logback-test.xml
  testing/base/src/main/resources/testcontainers.properties

*****************************************************

Archives:

 + server/apps/memory-app/extensions-jars/apache-mailet-crypto-3.8.1-SNAPSHOT-jar-with-dependencies.jar
 
 + server/apps/jpa-app/mariadb-java-client-2.7.2.jar
 
 + server/container/guice/mailet/src/test/resources/recursive/extensions-jars/james-server-guice-custom-mailets-3.5.0-SNAPSHOT-jar-with-dependencies.jar
 
 + server/container/guice/mailet/src/test/resources/recursive/extensions-jars/custom-mailets-implementation-3.5.0-SNAPSHOT.jar
 
 + mailet/standard/src/test/resources/nested.zip
 
 + mailet/standard/src/test/resources/sonde.zip
 
 + mailbox/tika/src/test/resources/documents/slides.odp
 
 + mailbox/tika/src/test/resources/documents/writter.odt
 
 + mailbox/tika/src/test/resources/documents/calc.ods
 
 + mailbox/store/src/test/resources/eml/ديناصور.odt
 
*****************************************************
  Files with Apache License headers will be marked AL
  Binary files (which do not require any license headers) will be marked B
  Compressed archives will be marked A
  Notices, licenses etc. will be marked N
  AL    metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultTimeMetric.java
  AL    metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetricFactory.java
  AL    metrics/metrics-logger/src/main/java/org/apache/james/metrics/logger/DefaultMetric.java
  AL    metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricFactoryTest.java
  AL    metrics/metrics-logger/src/test/java/org/apache/james/metrics/logger/DefaultMetricTest.java
  AL    metrics/metrics-logger/pom.xml
  AL    metrics/pom.xml
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/GaugeRegistry.java
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/TimeMetric.java
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/Metric.java
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/MetricFactory.java
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/Gauge.java
  AL    metrics/metrics-api/src/main/java/org/apache/james/metrics/api/NoopGaugeRegistry.java
  AL    metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricContract.java
  AL    metrics/metrics-api/src/test/java/org/apache/james/metrics/api/MetricFactoryContract.java
  AL    metrics/metrics-api/pom.xml
  AL    metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactory.java
  AL    metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardJVMMetrics.java
  AL    metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardMetric.java
  AL    metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardGaugeRegistry.java
  AL    metrics/metrics-dropwizard/src/main/java/org/apache/james/metrics/dropwizard/DropWizardTimeMetric.java
  AL    metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricTest.java
  AL    metrics/metrics-dropwizard/src/test/java/org/apache/james/metrics/dropwizard/DropWizardMetricFactoryTest.java
  AL    metrics/metrics-dropwizard/pom.xml
  AL    metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingTimeMetric.java
  AL    metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetric.java
  AL    metrics/metrics-tests/src/main/java/org/apache/james/metrics/tests/RecordingMetricFactory.java
  AL    metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricFactoryTest.java
  AL    metrics/metrics-tests/src/test/java/org/apache/james/metrics/tests/RecordingMetricTest.java
  AL    metrics/metrics-tests/pom.xml
  AL    json/src/main/java/org/apache/james/json/DTOModule.java
  AL    json/src/main/java/org/apache/james/json/DTO.java
  AL    json/src/main/java/org/apache/james/json/JsonGenericSerializer.java
  AL    json/src/main/java/org/apache/james/json/DTOConverter.java
  AL    json/src/test/java/org/apache/james/JsonSerializationVerifier.java
  AL    json/src/test/java/org/apache/james/JsonGenericSerializerTest.java
  AL    json/src/test/java/org/apache/james/DTOConverterTest.java
  AL    json/src/test/java/org/apache/james/SerializationFixture.java
  AL    json/src/test/java/org/apache/james/dto/TestNestedModule.java
  AL    json/src/test/java/org/apache/james/dto/FirstNestedType.java
  AL    json/src/test/java/org/apache/james/dto/FirstDTO.java
  AL    json/src/test/java/org/apache/james/dto/TestModule.java
  AL    json/src/test/java/org/apache/james/dto/FirstNestedDTO.java
  AL    json/src/test/java/org/apache/james/dto/BaseType.java
  AL    json/src/test/java/org/apache/james/dto/SecondDTO.java
  AL    json/src/test/java/org/apache/james/dto/SecondNestedType.java
  AL    json/src/test/java/org/apache/james/dto/NestedType.java
  AL    json/src/test/java/org/apache/james/dto/SecondDomainObject.java
  AL    json/src/test/java/org/apache/james/dto/FirstDomainObject.java
  AL    json/src/test/java/org/apache/james/dto/TestModules.java
  AL    json/src/test/java/org/apache/james/dto/SecondNestedDTO.java
  AL    json/src/test/java/org/apache/james/JsonSerializationVerifierTest.java
  AL    json/pom.xml
  N     mpt/mavenplugin/LICENSE.txt
  N     mpt/mavenplugin/NOTICE.txt
  AL    mpt/mavenplugin/src/site/fml/faq.fml
  AL    mpt/mavenplugin/src/site/site.xml
  AL    mpt/mavenplugin/src/site/apt/usage.apt.vm
  AL    mpt/mavenplugin/src/site/apt/index.apt
  AL    mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/MailProtocolTest.java
  AL    mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/MailProtocolTestMojo.java
  AL    mpt/mavenplugin/src/main/java/org/apache/james/mpt/maven/AddUser.java
  AL    mpt/mavenplugin/src/reporting-site/site.xml
  AL    mpt/mavenplugin/pom.xml
  AL    mpt/all/src/site/site.xml
  AL    mpt/all/src/assemble/bin.xml
  AL    mpt/all/src/assemble/src.xml
  AL    mpt/all/src/reporting-site/site.xml
  AL    mpt/all/pom.xml
  AL    mpt/impl/smtp/pom.xml
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
 !????? mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpAuthCommandTest.java
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/ForwardSmtpTest.java
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpHostSystem.java
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/InMemoryDnsExtension.java
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpStarttlsCommandTest.java
  AL    mpt/impl/smtp/core/src/main/java/org/apache/james/mpt/smtp/SmtpTestExtension.java
  AL    mpt/impl/smtp/core/pom.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/dnsservice.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/lmtpserver.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/mailetcontainer.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/imapserver.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/managesieveserver.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/domainlist.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/mailrepositorystore.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/recipientrewritetable.xml
  B     mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/keystore
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/smtpserver.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/resources/pop3server.xml
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQForwardSmtpTest.java
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/src/test/java/org/apache/james/mpt/smtp/AwsS3RabbitMQSmtpStarttlsCommandTest.java
  AL    mpt/impl/smtp/cassandra-rabbitmq-object-storage/pom.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/dnsservice.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/mailetcontainer.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/domainlist.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/mailrepositorystore.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/usersrepository.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/recipientrewritetable.xml
  B     mpt/impl/smtp/jpa-pulsar/src/test/resources/keystore
  AL    mpt/impl/smtp/jpa-pulsar/src/test/resources/smtpserver.xml
  AL    mpt/impl/smtp/jpa-pulsar/src/test/java/org/apache/james/mpt/smtp/JpaPulsarForwardSmtpTest.java
  AL    mpt/impl/smtp/jpa-pulsar/src/test/java/org/apache/james/mpt/smtp/JpaPulsarSmtpStarttlsCommandTest.java
  AL    mpt/impl/smtp/jpa-pulsar/pom.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/dnsservice.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/lmtpserver.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/mailetcontainer.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/imapserver.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/managesieveserver.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/domainlist.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/mailrepositorystore.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/recipientrewritetable.xml
  B     mpt/impl/smtp/cassandra/src/test/resources/keystore
  AL    mpt/impl/smtp/cassandra/src/test/resources/smtpserver.xml
  AL    mpt/impl/smtp/cassandra/src/test/resources/pop3server.xml
  AL    mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraSmtpStarttlsCommandTest.java
  AL    mpt/impl/smtp/cassandra/src/test/java/org/apache/james/mpt/smtp/CassandraForwardSmtpTest.java
  AL    mpt/impl/smtp/cassandra/pom.xml
  AL    mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/host/FileHostSystem.java
  AL    mpt/impl/managesieve/file/src/test/java/org/apache/james/mpt/managesieve/file/FileManageSieveMPTTest.java
  AL    mpt/impl/managesieve/file/pom.xml
  AL    mpt/impl/managesieve/pom.xml
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/deletescript.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticate.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/noop.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/renamescript.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/authenticateBase64.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/unauthenticate.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/havespace.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/setactive.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/checkscript.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/capability.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/listscripts.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/starttls.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/logout.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/getscript.test
  AL    mpt/impl/managesieve/core/src/main/resources/org/apache/james/managesieve/scripts/putscript.test
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/ManageSieveMPTContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/SetActiveContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/PutScriptContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/HaveSpaceContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/DeleteScriptContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/StartTlsContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/AuthenticateContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/UnauthenticatedContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/NoopContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CheckScriptContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/LogoutContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/GetScriptContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/RenameScriptContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/ListScriptsContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/testsuite/CapabilityContract.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/HostSystemProvider.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveHostSystem.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/JamesManageSieveHostSystem.java
  AL    mpt/impl/managesieve/core/src/main/java/org/apache/james/mpt/host/ManageSieveSession.java
  AL    mpt/impl/managesieve/core/pom.xml
  AL    mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/CassandraManageSieveMPTTest.java
  AL    mpt/impl/managesieve/cassandra/src/test/java/org/apache/james/mpt/managesieve/cassandra/host/CassandraHostSystem.java
  AL    mpt/impl/managesieve/cassandra/pom.xml
  AL    mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/OpenSearchUidSearchOnIndexTest.java
  AL    mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/OpenSearchRecentTest.java
  AL    mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/PublicTemporaryFolder.java
  AL    mpt/impl/imap-mailbox/opensearch/src/test/java/org/apache/james/mpt/imapmailbox/elasticsearch/host/OpenSearchHostSystem.java
  AL    mpt/impl/imap-mailbox/opensearch/pom.xml
  N     mpt/impl/imap-mailbox/LICENSE.txt
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSecurityTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQAuthenticatePlainTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQEventsTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectedInboxTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQCondstoreTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQCopyTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMailboxAnnotationTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQRenameTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchHeadersTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectedStateTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQUidSearchTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchBodySectionTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQListingWithSharingTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQUserFlagsSupportTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSelectTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystem.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/host/RabbitMQEventBusHostSystemExtension.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQConcurrentSessionsTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQPartialFetchTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQQuotaTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQListingTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMoveTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQNonAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQSearchTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQFetchBodyStructureTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQMailboxWithLongNameErrorTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/src/test/java/org/apache/james/mpt/imapmailbox/rabbitmq/RabbitMQObjectIdeTest.java
  AL    mpt/impl/imap-mailbox/rabbitmq/pom.xml
  N     mpt/impl/imap-mailbox/NOTICE.txt
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMailboxWithLongNameErrorTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMailboxAnnotationTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectedStateTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneCondstoreTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneListingTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectedInboxTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneNonAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneUidSearchOnIndexTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneCopyTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneExpungeTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LucenePartialFetchTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneRenameTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSecurityTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneMoveTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneEventsTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneAuthenticatePlainTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneQuotaTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneConcurrentSessionsTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/host/LuceneSearchHostSystem.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneRecentTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchHeadersTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneObjectIdTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchBodySectionTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneUserFlagsSupportTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneFetchBodyStructureTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/src/test/java/org/apache/james/mpt/imapmailbox/lucenesearch/LuceneSelectTest.java
  AL    mpt/impl/imap-mailbox/lucenesearch/pom.xml
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusACLIntegration.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/MailboxMessageAppenderOnCyrusHost.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusUserAdder.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/Docker.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/CyrusHostSystem.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/host/GrantRightsOnCyrusHost.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusACLCommands.java
  AL    mpt/impl/imap-mailbox/cyrus/src/test/java/org/apache/james/mpt/imapmailbox/cyrus/CyrusMailboxTestModule.java
  AL    mpt/impl/imap-mailbox/cyrus/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/cyrus/pom.xml
  AL    mpt/impl/imap-mailbox/external-james/src/test/resources/org/apache/james/imap/scripts/SelectThenFetchWithExistingMessages.test
  AL    mpt/impl/imap-mailbox/external-james/src/test/resources/org/apache/james/imap/scripts/ValidateDeployment.test
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerJamesRule.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/JamesDeploymentValidationTest.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ExternalJamesModule.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationSpringJPATest.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/ProvisioningAPI.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/SmtpHostSystem.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/NoopDomainsAndUserAdder.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfiguration.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesImapHostSystem.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesSmtpHostSystem.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/external/ExternalJamesConfigurationEnvironnementVariables.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/docker/CliProvisioningAPI.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/host/StaticJamesConfiguration.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DeploymentValidation.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/ProvisioningException.java
  AL    mpt/impl/imap-mailbox/external-james/src/test/java/org/apache/james/mpt/imapmailbox/external/james/DockerDeploymentValidationGuiceJPATest.java
  AL    mpt/impl/imap-mailbox/external-james/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/external-james/pom.xml
  AL    mpt/impl/imap-mailbox/pom.xml
  N     mpt/impl/imap-mailbox/core/LICENSE.txt
  N     mpt/impl/imap-mailbox/core/NOTICE.txt
  AL    mpt/impl/imap-mailbox/core/src/main/resources/log4j.properties
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-sender.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-alt.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-group-addresses.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-mixed.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/mime-plain-text.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-alt-translation.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-mixed.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-resent.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-trace.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-hello-world.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply3.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-reply.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-another-reply.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-mixed-complex.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/multipart-binary.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-example.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-mixed-alt.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/wild-alt-reply4.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/samples/rfc822-multiple-addresses.mail
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectUnseen.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/HeaderPartialFetch.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Noop.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentFetchResponse.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MetadataWithLimitation.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UserFlagsSupport.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/NoCommand.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectedStateSetup.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Quota.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Store.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Metadata.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListPlus.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Replace.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchAtomsIndexer.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchSaveDate.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidAuthenticated.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchNILSaveDate.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/InboxDeleteMessages.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Login.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentRenameSelected.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Uid.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/TextPartialFetch.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchEnvelope.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentDeleteSelected.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendExpunge.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MimePartialFetch.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListSubscribed.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListSpecialChar.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchCombinations.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchPeek.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ComplexMail.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Rights.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartMixedComplex.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListNamespace.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartAlternative.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectAppend.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Concurrent.todo.txt
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Create.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchBodyNoSection.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/InboxAddMessages.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AuthenticatePlain.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Header.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/XList.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartAlternative.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListWithSharedMailbox.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Expunge.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListPercentWildcard.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Append.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/LoginThreeStrikes.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendToSelected.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Capability.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExistsResponse.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectEmpty.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CreateErrorWithLongName.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Delete.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectedStateCleanup.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidSelected.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ExpungeBasics.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Mixed.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Subscribe.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ACLCommandsOnOtherUser.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Namespace.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentCrossExpunge.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/PeekMultipartMixed.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Id.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartBodyStructure.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Move.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BadTag.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSaveDate.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSingleMessage.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Logout.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchStructureComplex.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchCombinations.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Authenticate.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Rename.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchStructureEmbedded.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SelectInbox.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/JustTag.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/NoTag.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightK.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightX.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightA.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutS.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightL.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutT.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIS.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightE.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightW.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightL.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIT.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightT.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyI.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIS.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightA.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightK.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIT.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightIW.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightR.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightS.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRT.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRW.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationWithoutRightI.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutW.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightX.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightI.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRS.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightRE.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyWithoutI.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationCopyIW.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/aclIntegration/ACLIntegrationRightR.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListMailboxes.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ListOnly.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CondstoreDisable.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentAppendUIDToMSNMapping.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BogusCommand.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExpungeResponse.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/UidSearchAtoms.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Check.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchPartial.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Recent.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MetadataWithBinaryData.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchRFC822Text.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchOptionSave.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchHeaderFieldsNot.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Copy.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchOptionAggregations.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ValidNonAuthenticated.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartMixedComplex.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ACLCommandsOnOwner.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentRenameSelectedSub.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ExamineEmpty.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendExamineInbox.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ConcurrentExpungeUIDToMSNMapping.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameSelected.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/MoveNoMSG.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/StringArgs.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/RenameHierarchy.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchInternalDate.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchHeaderFields.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/IllegalTag.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipleMessages.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchText.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Search.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/AppendSelectInbox.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Status.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SharedMailbox.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/Welcome.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/SearchAtoms.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchMultipartMixed.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/BodyPartialFetch.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/FetchSimpleBodyStructure.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/ObjectId.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/imap/scripts/CondstoreEnable.test
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/DefaultMailboxManagerConf.xml
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/VirtualRepositoryMix.xml
  AL    mpt/impl/imap-mailbox/core/src/main/resources/org/apache/james/mailboxmanager/testdata/MixedMailstores.xml
 !????? mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/GrantRightsOnHost.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UserFlagsSupport.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Condstore.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Events.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLCommands.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/MailboxWithLongNameError.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Search.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/PartialFetch.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ConcurrentSessions.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/SelectedState.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchHeaders.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatedState.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Security.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/AuthenticatePlain.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/SelectedInbox.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ObjectId.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLIntegration.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ListingWithSharingTest.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/ACLScriptedTestProtocol.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchBodySection.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Expunge.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Rename.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Listing.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UidSearch.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/UidSearchOnIndex.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/base/BasicImapCommands.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/MailboxAnnotation.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Copy.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Fetch.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/NonAuthenticatedState.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/FetchBodyStructure.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Select.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Move.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/Recent.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/suite/QuotaTest.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/ImapTestConstants.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/imapmailbox/MailboxMessageAppender.java
  AL    mpt/impl/imap-mailbox/core/src/main/java/org/apache/james/mpt/host/JamesImapHostSystem.java
  AL    mpt/impl/imap-mailbox/core/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/core/pom.xml
  N     mpt/impl/imap-mailbox/inmemory/LICENSE.txt
  N     mpt/impl/imap-mailbox/inmemory/NOTICE.txt
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryQuotaTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySecurityTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryRecentTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryCondstoreTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxAnnotationTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryExpungeTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryAuthenticatePlainTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryNonAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryPartialFetchTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryCopyTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryObjectIdTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchHeadersTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryListingWithSharingTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUserFlagsSupportTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryConcurrentSessionsTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryRenameTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/host/InMemoryHostSystem.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectedStateTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySearchTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUidSearchTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMailboxWithLongNameErrorTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectedInboxTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchBodySectionTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryMoveTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchBodyStructureTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryEventsTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryUidSearchOnIndexTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemorySelectTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryListingTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/test/java/org/apache/james/mpt/imapmailbox/inmemory/InMemoryFetchTest.java
  AL    mpt/impl/imap-mailbox/inmemory/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/inmemory/pom.xml
  N     mpt/impl/imap-mailbox/jpa/LICENSE.txt
  N     mpt/impl/imap-mailbox/jpa/NOTICE.txt
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUidSearchTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaEventsTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSecurityTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchBodySectionTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchBodyStructureTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMailboxWithLongNameErrorTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaPartialFetchTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaCondstoreTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaAuthenticatePlainTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMoveTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaNonAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUserFlagsSupportTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaQuotaTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaCopyTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaExpungeTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectedInboxTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaRenameTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaListingTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaConcurrentSessionsTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchHeadersTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaUidSearchOnIndexTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystem.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/host/JPAHostSystemExtension.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaFetchTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSearchTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaMailboxAnnotationTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/test/java/org/apache/james/mpt/imapmailbox/jpa/JpaSelectedStateTest.java
  AL    mpt/impl/imap-mailbox/jpa/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/jpa/pom.xml
 !????? mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraCondstoreTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSecurityTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxAnnotationTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraRenameTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUidSearchTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUidSearchOnIndexTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchBodyStructureTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMoveTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraQuotaTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraListingWithSharingTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraObjectIdTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraConcurrentSessionsTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraMailboxWithLongNameErrorTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraExpungeTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraNonAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraAuthenticatePlainTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraPartialFetchTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraUserFlagsSupportTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchHeadersTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystemExtension.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/host/CassandraHostSystem.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraEventsTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraAuthenticatedStateTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSearchTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchBodySectionTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectedStateTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraFetchTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraCopyTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraListingTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectedInboxTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/test/java/org/apache/james/mpt/imapmailbox/cassandra/CassandraSelectTest.java
  AL    mpt/impl/imap-mailbox/cassandra/src/reporting-site/site.xml
  AL    mpt/impl/imap-mailbox/cassandra/pom.xml
  B     mpt/app/src/site/resources/images/asf-logo-reduced.gif
  B     mpt/app/src/site/resources/images/james-mpt-logo.gif
  AL    mpt/app/src/site/xdoc/index.xml
  AL    mpt/app/src/site/site.xml
  AL    mpt/app/src/main/java/org/apache/james/mpt/app/RunScript.java
  AL    mpt/app/src/main/java/org/apache/james/mpt/app/Main.java
  AL    mpt/app/src/reporting-site/site.xml
  AL    mpt/app/pom.xml
  AL    mpt/src/reporting-site/site.xml
  AL    mpt/pom.xml
  B     mpt/core/src/site/resources/images/asf-logo-reduced.gif
  B     mpt/core/src/site/resources/images/james-mpt-logo.gif
  AL    mpt/core/src/site/xdoc/index.xml
  AL    mpt/core/src/site/site.xml
  AL    mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSession.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/session/ExternalSessionFactory.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/script/SimpleScriptedTestProtocol.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/script/ImapScriptedTestProtocol.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/script/GenericSimpleScriptedTestProtocol.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSession.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/protocol/FileProtocolSessionBuilder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/SessionFactory.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/Continuation.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/Monitor.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/DomainAdder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/ImapFeatures.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/ImapHostSystem.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/UserAdder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/ProtocolInteractor.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/HostSystem.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/api/Session.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/exception/InvalidServerResponseException.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/monitor/NullMonitor.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/monitor/SystemLoggingMonitor.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/user/ScriptedUserAdder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferOutputStream.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/helper/ScriptBuilder.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/helper/CreateScript.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/helper/ByteBufferInputStream.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/host/ExternalHostSystem.java
  AL    mpt/core/src/main/java/org/apache/james/mpt/Runner.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/DiscardProtocolTest.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/TestExternalHostSystem.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/api/ImapFeaturesTest.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/TestFileProtocolSessionBuilder.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/TestScriptedUserAdder.java
  AL    mpt/core/src/test/java/org/apache/james/mpt/DiscardProtocol.java
  AL    mpt/core/src/reporting-site/site.xml
  AL    mpt/core/pom.xml
 !????? upgrade-instructions.md
 !????? code-coverage-report/pom.xml
 !????? CHANGELOG.md
 !????? third-party/rspamd/docker-compose.yml
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/module/RspamdModule.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/module/RspamdTaskExtensionModule.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdListener.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTask.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/GetMailboxMessagesService.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskDTO.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskDTO.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTO.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedSpamToRspamdTask.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/RunningOptions.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTO.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/model/AnalysisResult.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/model/AnalysisResultDeserializer.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/route/FeedMessageRoute.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/exception/UnauthorizedException.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/exception/RspamdUnexpectedException.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdHttpClient.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/client/RspamdClientConfiguration.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/RspamdScanner.java
  AL    third-party/rspamd/src/main/java/org/apache/james/rspamd/healthcheck/RspamdHealthCheck.java
  B     third-party/rspamd/src/test/resources/json/feedSpamEmptyRspamdTimeout.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedHamClassifiedAsHam.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedHamNonEmptyRspamdTimeout.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedSpamNonEmptyRspamdTimeout.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedHamNonEmptyPeriod.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedSpamEmptyPeriod.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedSpamNonEmptyPeriod.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedSpamClassifiedAsHam.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedHamEmptyRspamdTimeout.additionalInformation.json
  B     third-party/rspamd/src/test/resources/json/feedHamEmptyPeriod.additionalInformation.json
 !????? third-party/rspamd/src/test/resources/rspamd-config/actions.conf
 !????? third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
 !????? third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
 !????? third-party/rspamd/src/test/resources/mail/ham/ham1.eml
 !????? third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
 !????? third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
 !????? third-party/rspamd/src/test/resources/mail/spam/spam8.eml
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskAdditionalInformationDTOTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskAdditionalInformationDTOTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedHamToRspamdTaskTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/task/FeedSpamToRspamdTaskTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdScannerTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/DockerRspamdExtensionTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/model/AnalysisResultDeserializationTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/route/FeedMessageRouteTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/client/RspamdHttpClientTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdExtension.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/healthcheck/RspamdHealthcheckTest.java
  AL    third-party/rspamd/src/test/java/org/apache/james/rspamd/RspamdListenerTest.java
  AL    third-party/rspamd/pom.xml
 !????? third-party/rspamd/README.md
  AL    third-party/rspamd/sample-configuration/webadmin.properties
  AL    third-party/rspamd/sample-configuration/listeners.xml
 !????? third-party/rspamd/sample-configuration/extensions.properties
 !????? third-party/rspamd/sample-configuration/antivirus.conf
  AL    third-party/rspamd/sample-configuration/mailetcontainer_distributed.xml
  AL    third-party/rspamd/sample-configuration/mailetcontainer_memory.xml
 !????? third-party/rspamd/sample-configuration/statistic.conf
  AL    third-party/rspamd/sample-configuration/healthcheck.properties
 !????? third-party/rspamd/sample-configuration/rspamd.properties
 !????? third-party/rspamd/docker-compose-distributed.yml
 !????? third-party/elasticsearch/docker-compose.yml
  AL    third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESReporterConfiguration.java
  AL    third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESMetricReporterModule.java
  AL    third-party/elasticsearch/src/main/java/org/apache/james/metrics/es/v7/ESMetricReporter.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ESReporterContract.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES2ReporterTest.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES7ReporterTest.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ESReportedConfigurationTest.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/ES6ReporterTest.java
  AL    third-party/elasticsearch/src/test/java/org/apache/james/metric/es/v7/DockerElasticSearchExtension.java
  AL    third-party/elasticsearch/pom.xml
 !????? third-party/elasticsearch/conf/extensions.properties
 !????? third-party/elasticsearch/conf/elasticsearch.properties
 !????? third-party/elasticsearch/README.md
 !????? third-party/clamav/docker-compose.yml
  AL    third-party/clamav/src/main/java/org/apache/james/clamav/ClamAVScan.java
 !????? third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
 !????? third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
  AL    third-party/clamav/src/test/java/org/apache/james/clamav/DockerClamAV.java
  AL    third-party/clamav/src/test/java/org/apache/james/clamav/ClamAVScanTest.java
  AL    third-party/clamav/pom.xml
 !????? third-party/clamav/README.md
  AL    third-party/clamav/sample-configuration/mailetcontainer.xml
 !????? third-party/crowdsec/docker-compose.yml
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/module/CrowdsecModule.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandler.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecService.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/model/CrowdsecDecision.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/model/CrowdsecDecisionDeserializer.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecEhloHook.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecPOP3CheckHandler.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/exception/CrowdsecException.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/client/CrowdsecClientConfiguration.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/client/CrowdsecHttpClient.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecImapConnectionCheck.java
  AL    third-party/crowdsec/src/main/java/org/apache/james/crowdsec/CrowdsecUtils.java
  AL    third-party/crowdsec/src/test/resources/logback-test.xml
  AL    third-party/crowdsec/src/test/resources/listeners.xml
  AL    third-party/crowdsec/src/test/resources/mailetcontainer.xml
 !????? third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
 !????? third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
 !????? third-party/crowdsec/src/test/resources/haproxy.cfg
  AL    third-party/crowdsec/src/test/resources/imapserver.xml
  AL    third-party/crowdsec/src/test/resources/usersrepository.xml
 !????? third-party/crowdsec/src/test/resources/log/james.log
  AL    third-party/crowdsec/src/test/resources/smtpserver.xml
  AL    third-party/crowdsec/src/test/resources/pop3server.xml
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecEhloHookTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecDecisionDeserializerTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/DockerCrowdsecExtensionTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecImapConnectionCheckTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecHttpClientTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecServiceTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecExtension.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecIntegrationTest.java
  AL    third-party/crowdsec/src/test/java/org/apache/james/crowdsec/HAProxyExtension.java
 !????? third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandlerTest.java
  AL    third-party/crowdsec/pom.xml
 !????? third-party/crowdsec/README.md
 !????? third-party/crowdsec/sample-configuration/collections/james.yaml
 !????? third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
 !????? third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
 !????? third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
 !????? third-party/crowdsec/sample-configuration/extensions.properties
 !????? third-party/crowdsec/sample-configuration/acquis.yaml
 !????? third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
 !????? third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
 !????? third-party/crowdsec/sample-configuration/crowdsec.properties
  AL    third-party/crowdsec/sample-configuration/imapserver.xml
  AL    third-party/crowdsec/sample-configuration/logback.xml
  AL    third-party/crowdsec/sample-configuration/smtpserver.xml
  AL    third-party/crowdsec/sample-configuration/pop3server.xml
 !????? third-party/spamassassin/docker-compose.yml
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinHandler.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinInvoker.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinListener.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinLearner.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinModule.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinResult.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassinConfiguration.java
  AL    third-party/spamassassin/src/main/java/org/apache/james/spamassassin/SpamAssassin.java
  AL    third-party/spamassassin/src/test/resources/listeners.xml
  AL    third-party/spamassassin/src/test/resources/mailetcontainer.xml
 !????? third-party/spamassassin/src/test/resources/eml/spam.eml
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
 !????? third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
  AL    third-party/spamassassin/src/test/resources/smtpserver.xml
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/module/SpamAssassinTestModule.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/module/SpamAssassinModuleExtension.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinExtension.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamdExtension.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/mock/MockSpamd.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinHandlerTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinIntegrationTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/MemorySpamAssassinTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinInvokerTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinContract.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinResultTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinListenerTest.java
  AL    third-party/spamassassin/src/test/java/org/apache/james/spamassassin/SpamAssassinConfigurationTest.java
  AL    third-party/spamassassin/pom.xml
  AL    third-party/spamassassin/sample-configuration/listeners.xml
 !????? third-party/spamassassin/sample-configuration/extensions.properties
  AL    third-party/spamassassin/sample-configuration/mailetcontainer.xml
 !????? third-party/spamassassin/sample-configuration/spamassassin.properties
  AL    third-party/spamassassin/sample-configuration/smtpserver.xml
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/AuthorizationToken.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/LinshareConfiguration.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareResult.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/ReceivedShare.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/Document.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/LinshareAPI.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/User.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/client/ShareRequest.java
  AL    third-party/linshare/src/main/java/org/apache/james/linshare/LinshareBlobExportMechanism.java
 !????? third-party/linshare/src/test/resources/docker-compose.yml
 !????? third-party/linshare/src/test/resources/backend/Dockerfile
 !????? third-party/linshare/src/test/resources/backend/conf/log4j.properties
 !????? third-party/linshare/src/test/resources/backend/conf/id_rsa.pub
  AL    third-party/linshare/src/test/resources/backend/conf/catalina.properties
 !????? third-party/linshare/src/test/resources/backend/conf/id_rsa.pri
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/Linshare.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareConfigurationTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/AuthorizationTokenTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/ByteArrayDecoder.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountResponse.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/ShareResultTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountGrantPermissionsRequest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/LinshareAPITest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/UserTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/ShareRequestTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountCreationRequest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/ReceivedShareTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/client/DocumentTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareFixture.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/CombinedDecoder.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareBlobExportMechanismTest.java
  AL    third-party/linshare/src/test/java/org/apache/james/linshare/LinshareSingleton.java
  AL    third-party/linshare/pom.xml
  AL    third-party/pom.xml
  AL    javax-mail-extension/src/main/java/org/apache/james/javax/AddressHelper.java
  AL    javax-mail-extension/src/main/java/org/apache/james/javax/MimeMultipartReport.java
  AL    javax-mail-extension/src/main/java/org/apache/james/javax/MultipartUtil.java
  AL    javax-mail-extension/pom.xml
  AL    checkstyle.xml
 !????? event-sourcing/event-sourcing-core/event-sourcing-core.iml
  AL    event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/EventBus.scala
  AL    event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/EventSourcingSystem.scala
  AL    event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/Subscriber.scala
  AL    event-sourcing/event-sourcing-core/src/main/scala/org/apache/james/eventsourcing/CommandDispatcher.scala
  AL    event-sourcing/event-sourcing-core/src/main/java/org/apache/james/eventsourcing/CommandHandler.java
  AL    event-sourcing/event-sourcing-core/src/test/scala/org/apache/james/eventsourcing/EventSourcingSystemTest.scala
  AL    event-sourcing/event-sourcing-core/src/test/scala/org/apache/james/eventsourcing/DataCollectorSubscriber.scala
  AL    event-sourcing/event-sourcing-core/pom.xml
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreModule.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializer.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStore.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/EventStoreDao.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTOModule.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/EventDTO.scala
  AL    event-sourcing/event-store-cassandra/src/main/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreTable.scala
  AL    event-sourcing/event-store-cassandra/src/main/java/org/apache/james/eventsourcing/eventstore/cassandra/EventNestedTypes.java
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/JsonEventSerializerTest.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtensionForTestEvents.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTOModules.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherTestEventDTO.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/OtherEvent.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/SnapshotEvent.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/SnapshotEventDTO.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/dto/TestEventDTO.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreTest.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventSourcingSystemTest.scala
  AL    event-sourcing/event-store-cassandra/src/test/scala/org/apache/james/eventsourcing/eventstore/cassandra/CassandraEventStoreExtension.scala
  AL    event-sourcing/event-store-cassandra/pom.xml
  AL    event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/EventId.scala
  AL    event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/Event.scala
  AL    event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/AggregateId.scala
  AL    event-sourcing/event-sourcing-pojo/src/main/scala/org/apache/james/eventsourcing/Command.scala
  AL    event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/TestAggregateId.scala
  AL    event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/TestEvent.scala
  AL    event-sourcing/event-sourcing-pojo/src/test/scala/org/apache/james/eventsourcing/EventIdTest.scala
  AL    event-sourcing/event-sourcing-pojo/pom.xml
  AL    event-sourcing/pom.xml
  AL    event-sourcing/event-store-memory/src/main/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStore.scala
  AL    event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStoreExtension.scala
  AL    event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventSourcingSystemTest.scala
  AL    event-sourcing/event-store-memory/src/test/scala/org/apache/james/eventsourcing/eventstore/memory/InMemoryEventStoreTest.scala
  AL    event-sourcing/event-store-memory/pom.xml
  AL    event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/EventStoreFailedException.scala
  AL    event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/History.scala
  AL    event-sourcing/event-store-api/src/main/scala/org/apache/james/eventsourcing/eventstore/EventStore.scala
  AL    event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/HistoryTest.scala
  AL    event-sourcing/event-store-api/src/test/scala/org/apache/james/eventsourcing/eventstore/EventStoreContract.scala
  AL    event-sourcing/event-store-api/pom.xml
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReadAliasName.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchIndexer.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DocumentId.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/DeleteByQueryPerformer.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/AliasName.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ClientProvider.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/search/ScrolledSearch.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexCreationFactory.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchHealthCheck.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/RoutingKey.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/OpenSearchConfiguration.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/WriteAliasName.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/ReactorOpenSearchClient.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/IndexName.java
  AL    backends-common/opensearch/src/main/java/org/apache/james/backends/opensearch/UpdatedRepresentation.java
 !????? backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
 !????? backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
 !????? backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
 !????? backends-common/opensearch/src/test/resources/auth-es/README.md
 !????? backends-common/opensearch/src/test/resources/auth-es/default.key
 !????? backends-common/opensearch/src/test/resources/auth-es/default.crt
  B     backends-common/opensearch/src/test/resources/auth-es/server.jks
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchClusterExtension.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/IndexCreationFactoryTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESOverrideTrustStoreTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchIndexerTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionContract.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerAuthOpenSearchSingleton.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionAuthESIgnoreSSLCheckTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearchExtension.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchConfigurationTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/RoutingKeyTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/search/ScrolledSearchTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchHealthCheckConnectionTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearch.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/AliasNameTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DockerOpenSearchSingleton.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/OpenSearchHealthCheckTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/ClientProviderImplConnectionNoAuthESTest.java
  AL    backends-common/opensearch/src/test/java/org/apache/james/backends/opensearch/DocumentIdTest.java
  AL    backends-common/opensearch/pom.xml
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/SimpleConnectionPool.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConfiguration.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReceiverProvider.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQServerVersion.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/QueueArguments.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPool.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQConnectionFactory.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/Constants.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheck.java
  AL    backends-common/rabbitmq/src/main/java/org/apache/james/backends/rabbitmq/RabbitMQManagementAPI.java
  B     backends-common/rabbitmq/src/test/resources/test-keystore-password-password
  B     backends-common/rabbitmq/src/test/resources/test-truststore-password-password
 !????? backends-common/rabbitmq/src/test/resources/empty-store
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQClusterTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQServerVersionTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQWaitStrategy.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQConfigurationTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQSingleton.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQExtension.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQHealthCheckTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQConnectionFactoryTest.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerRabbitMQ.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ChannelPoolContract.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/InMemoryConsumer.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/RabbitMQFixture.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/DockerClusterRabbitMQExtension.java
  AL    backends-common/rabbitmq/src/test/java/org/apache/james/backends/rabbitmq/ReactorRabbitMQChannelPoolTest.java
  AL    backends-common/rabbitmq/pom.xml
  AL    backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisHealthCheck.scala
  AL    backends-common/redis/src/main/java/org/apache/james/backends/redis/RedisConfiguration.scala
  AL    backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisHealthCheckTest.scala
  AL    backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisConfigurationTest.scala
  AL    backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisExtensionTest.java
  AL    backends-common/redis/src/test/java/org/apache/james/backends/redis/DockerRedis.java
  AL    backends-common/redis/src/test/java/org/apache/james/backends/redis/RedisExtension.java
 !????? backends-common/redis/pom.xml
 !????? backends-common/README.adoc
  AL    backends-common/pom.xml
  AL    backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarConfiguration.scala
  AL    backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarClients.scala
  AL    backends-common/pulsar/src/main/scala/org/apache/james/backends/pulsar/PulsarReader.scala
  AL    backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/PulsarConfigurationTest.java
  AL    backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/TestPulsarModule.java
  AL    backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/DockerPulsarExtension.java
  AL    backends-common/pulsar/src/test/java/org/apache/james/backends/pulsar/PulsarReaderTest.scala
  AL    backends-common/pulsar/pom.xml
  AL    backends-common/jpa/src/main/java/org/apache/james/backends/jpa/EntityManagerUtils.java
  AL    backends-common/jpa/src/main/java/org/apache/james/backends/jpa/TransactionRunner.java
  AL    backends-common/jpa/src/main/java/org/apache/james/backends/jpa/JPAConfiguration.java
  AL    backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JpaTestCluster.java
  AL    backends-common/jpa/src/test/java/org/apache/james/backends/jpa/JPAConfigurationTest.java
  AL    backends-common/jpa/pom.xml
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraType.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaLimitTable.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraTable.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaCurrentValueTable.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaCurrentValueDao.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraQuotaLimitDao.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraMutualizedQuotaModule.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/components/CassandraModule.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionModule.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/table/CassandraSchemaVersionTable.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaTransition.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionDAO.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManager.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/versions/SchemaVersion.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/Migration.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskAdditionalInformationDTO.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraSchemaTransitions.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/CassandraMigrationService.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTaskDTO.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationTask.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/migration/MigrationException.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/LockLessConcurrencyLimitingRequestThrottler.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheck.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraConstants.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/CassandraAsyncExecutor.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentation.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/utils/LightweightTransactionException.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/KeyspaceFactory.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraZonedDateTimeModule.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesCreator.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTypesProvider.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/KeyspaceConfiguration.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/ClusterConfiguration.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/CassandraConfiguration.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/InjectionNames.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/configuration/JamesExecutionProfiles.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ClusterFactory.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraTableManager.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/CassandraSessionConfiguration.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactory.java
  AL    backends-common/cassandra/src/main/java/org/apache/james/backends/cassandra/init/ResilientClusterProvider.java
 !????? backends-common/cassandra/src/test/resources/cassandra-driver.conf
 !????? backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTableTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/components/CassandraTypeTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSession.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaTransitionTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionDAOTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/SchemaVersionTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/versions/CassandraSchemaVersionManagerTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandra.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterExtension.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/StatementRecorder.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraWaitStrategy.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraExtension.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/MigrationTaskSerializationTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/migration/CassandraMigrationServiceTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/quota/CassandraQuotaCurrentValueDaoTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/quota/CassandraQuotaLimitDaoTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/TestingSessionTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraSingleton.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/Scenario.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/PaggingTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/CassandraHealthCheckTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/utils/ZonedDateTimeRepresentationTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ResilientClusterProviderTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationReadingTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/SessionWithInitializedTablesFactoryTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTableManagerTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypeProviderTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTableManagerConcurrentTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraConfigurationTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/CassandraTypesCreatorTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/init/ClusterFactoryTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraCluster.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/ScenarioTest.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/DockerCassandraRule.java
  AL    backends-common/cassandra/src/test/java/org/apache/james/backends/cassandra/CassandraClusterTest.java
  AL    backends-common/cassandra/pom.xml
 !????? README.adoc
  AL    src/site/resources/downloads/codetemplates.xml
  AL    src/site/resources/css/site.css
  B     src/site/resources/favicon.ico
  B     src/site/resources/images/asf-logo-reduced.gif
  B     src/site/resources/images/james-logo.png
  B     src/site/resources/images/james-schema-subprojects.png
  B     src/site/resources/images/linagora.png
  B     src/site/resources/images/james-logo-square.png
  B     src/site/resources/protocols/images/void.gif
  B     src/site/resources/protocols/images/uml/org.apache.james.imap-withtest-package.png
  B     src/site/resources/protocols/images/uml/org.apache.james.imap.api.png
  B     src/site/resources/protocols/images/uml/org.apache.james.protocols-package.png
  B     src/site/resources/protocols/images/uml/org.apache.james.imap-package.png
  AL    src/site/resources/server/css/site.css
  B     src/site/resources/server/images/intellij-idea/intellij-import-layout-java.png
  B     src/site/resources/server/images/intellij-idea/intellij-checkstyle-scan.png
  B     src/site/resources/server/images/intellij-idea/intellij-james-zip.png
  B     src/site/resources/server/images/intellij-idea/intellij-import-layout-scala.png
  B     src/site/resources/server/images/intellij-idea/intellij-mvn.png
  B     src/site/resources/server/images/intellij-idea/intellij-checkstyle-setting.png
  B     src/site/resources/server/images/intellij-idea/intellij-james-project.png
  B     src/site/resources/server/images/intellij-idea/intellij-new-project.png
  B     src/site/resources/server/images/jmx-monitoring/jmx-org.apache.james.smtpserver.JamesDataCmdHandler.png
  B     src/site/resources/server/images/jmx-monitoring/jmx-current-connections.png
  B     src/site/resources/server/images/jmx-monitoring/jmx-gc.png
  B     src/site/resources/server/images/jmx-monitoring/jmx-memory.png
  B     src/site/resources/server/images/jmx-monitoring/jmx-process-root.png
  B     src/site/resources/server/images/eclipse/eclipse-run-james.gif
  B     src/site/resources/server/images/eclipse/eclipse-m2eclipse-projects.gif
  B     src/site/resources/server/images/eclipse/eclipse-import-maven-view-1.gif
  B     src/site/resources/server/images/eclipse/eclipse-m2eclipse-project-dependencies.gif
  B     src/site/resources/server/images/eclipse/eclipse-import-maven-view-2.gif
  B     src/site/resources/server/images/dns-mx/james-config-smart-host.png
  B     src/site/resources/server/images/dns-mx/james-config-secondary.png
  B     src/site/resources/server/images/dns-mx/james-config-load-balance.png
  B     src/site/resources/server/images/conf/config-example.png
  B     src/site/resources/server/images/performances/gatling_1.png
  B     src/site/resources/server/images/performances/metrics.png
  B     src/site/resources/server/images/performances/gatling_2.png
  B     src/site/resources/server/images/void.gif
  B     src/site/resources/server/images/netbeans/james-build-dir.png
  B     src/site/resources/server/images/netbeans/netbeans-james-project.png
  B     src/site/resources/server/images/netbeans/netbeans-svn-checkout2.png
  B     src/site/resources/server/images/netbeans/netbeans-svn-checkout1.png
  B     src/site/resources/server/images/netbeans/netbeans-svn-checkout-browse.png
  B     src/site/resources/server/images/uml/org.apache.james-package_large.png
  B     src/site/resources/server/images/uml/org.apache.james-package-large.png
  B     src/site/resources/server/images/uml/org.apache.james-package-details.png
  B     src/site/resources/server/images/uml/org.apache.james.server-package.png
  B     src/site/resources/server/images/uml/org.apache.james.container-package.png
  B     src/site/resources/server/images/uml/org.apache.james-package-detail_small.png
  B     src/site/resources/server/images/uml/org.apache.james-package-detail_large.png
  B     src/site/resources/server/images/uml/org.apache.james-package-small.png
  B     src/site/resources/server/images/uml/org.apache.james-package.png
  B     src/site/resources/server/images/uml/org.apache.james-package_small.png
  B     src/site/resources/server/images/uml/org.apache.james.management-package.png
  B     src/site/resources/server/images/jmx-management/jmx-domainlist.png
  B     src/site/resources/server/images/jmx-management/jmx-user-part.png
  B     src/site/resources/server/images/jmx-management/jmx-user.png
  B     src/site/resources/server/images/database/james-database-schema-derby_1000.png
  B     src/site/resources/server/images/database/james-database-schema-derby.png
  AL    src/site/resources/server/js/dev.js
  AL    src/site/resources/server/js/index.js
 !????? src/site/resources/server/rfclist/smtp/rfc1985.txt
 !????? src/site/resources/server/rfclist/smtp/rfc2554.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1652.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1830.txt
 !????? src/site/resources/server/rfclist/smtp/rfc2142.txt
 !????? src/site/resources/server/rfclist/smtp/rfc2034.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1891.txt
 !????? src/site/resources/server/rfclist/smtp/rfc0974.txt
 !????? src/site/resources/server/rfclist/smtp/rfc2821.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1870.txt
 !????? src/site/resources/server/rfclist/smtp/rfc2197.txt
 !????? src/site/resources/server/rfclist/smtp/rfc0821.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1869.txt
 !????? src/site/resources/server/rfclist/smtp/rfc1893.txt
 !????? src/site/resources/server/rfclist/lmtp/rfc2033.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2087.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2221.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2193.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2192.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2088.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2060.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2086.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2342.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2595.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2195.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2180.txt
 !????? src/site/resources/server/rfclist/imap4/rfc5256.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2177.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2683.txt
 !????? src/site/resources/server/rfclist/imap4/rfc2359.txt
 !????? src/site/resources/server/rfclist/imap4/rfc1731.txt
 !????? src/site/resources/server/rfclist/pop3/rfc1725.txt
 !????? src/site/resources/server/rfclist/pop3/rfc1939.txt
 !????? src/site/resources/server/rfclist/pop3/rfc1734.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2830.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2255.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2252.txt
 !????? src/site/resources/server/rfclist/ldap/rfc3377.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2256.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2253.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2829.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2254.txt
 !????? src/site/resources/server/rfclist/ldap/rfc2251.txt
 !????? src/site/resources/server/rfclist/basic/rfc0822.txt
 !????? src/site/resources/server/rfclist/basic/rfc2046.txt
 !????? src/site/resources/server/rfclist/basic/rfc2822.txt
 !????? src/site/resources/server/rfclist/basic/rfc1123.txt
 !????? src/site/resources/server/rfclist/basic/rfc2045.txt
  AL    src/site/resources/mailet/css/site.css
  AL    src/site/resources/js/james/index.js
  AL    src/site/resources/js/james/functions.js
  B     src/site/resources/mailbox/images/james-server-logo.gif
  B     src/site/resources/mailbox/images/void.gif
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-maildir-managers.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-mailboxsession.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-messagemanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-package.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-mailboxmanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-mailboxmanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-memory-managers.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-model.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-subscriptionmanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-subscriptionmanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-jpa-managers.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-store-messagemanager.png
  B     src/site/resources/mailbox/images/uml/org-apache-james-mailbox-api-msc.png
 !????? src/site/markdown/server/manage-guice-distributed-james.md
 !????? src/site/markdown/server/manage-cli.md
 !????? src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
 !????? src/site/markdown/server/install/guice-cassandra.md
 !????? src/site/markdown/server/install/guice-jpa.md
 !????? src/site/markdown/server/install/guice-jpa-smtp.md
 !????? src/site/markdown/server/manage-webadmin.md
 !????? src/site/markdown/mailet/release-notes.md
 !????? src/site/markdown/mailet/quickstart.md
  AL    src/site/custom/project-info-report.properties
  AL    src/site/xdoc/mpt/index.xml
  AL    src/site/xdoc/mail.xml
  AL    src/site/xdoc/download.xml
  AL    src/site/xdoc/contribute.xml
  AL    src/site/xdoc/thanks.xml
  AL    src/site/xdoc/documentation.xml
  AL    src/site/xdoc/support.xml
  AL    src/site/xdoc/protocols/index.xml
  AL    src/site/xdoc/protocols/pop3.xml
  AL    src/site/xdoc/protocols/smtp.xml
  AL    src/site/xdoc/protocols/changes.xml
  AL    src/site/xdoc/protocols/source-code.xml
  AL    src/site/xdoc/protocols/imap4.xml
  AL    src/site/xdoc/server/upgrade.xml
  AL    src/site/xdoc/server/feature-performance.xml
  AL    src/site/xdoc/server/feature-queue-priority.xml
  AL    src/site/xdoc/server/objectives.xml
  AL    src/site/xdoc/server/index.xml
  AL    src/site/xdoc/server/monitor-logging.xml
  AL    src/site/xdoc/server/dev-extend-smtp-hook.xml
  AL    src/site/xdoc/server/feature-protocols.xml
  AL    src/site/xdoc/server/dev-extend-matcher.xml
  AL    src/site/xdoc/server/feature-mailetcontainer.xml
  AL    src/site/xdoc/server/features.xml
  AL    src/site/xdoc/server/feature-persistence.xml
  AL    src/site/xdoc/server/packaging.xml
  AL    src/site/xdoc/server/config-blobstore.xml
  AL    src/site/xdoc/server/config-listeners.xml
  AL    src/site/xdoc/server/config-vault.xml
  AL    src/site/xdoc/server/dev-provided.xml
  AL    src/site/xdoc/server/config-ssl-tls.xml
  AL    src/site/xdoc/server/advantages.xml
  AL    src/site/xdoc/server/config-recipientrewritetable.xml
  AL    src/site/xdoc/server/metrics.xml
  AL    src/site/xdoc/server/config-spring-jpa-postgres.xml
  AL    src/site/xdoc/server/dev-extend-mailet.xml
  AL    src/site/xdoc/server/config-blob-export.xml
  AL    src/site/xdoc/server/quick-start.xml
  AL    src/site/xdoc/server/config-redis.xml
  AL    src/site/xdoc/server/config-smtp-lmtp.xml
  AL    src/site/xdoc/server/config-mailetcontainer.xml
  AL    src/site/xdoc/server/config-pop3.xml
  AL    src/site/xdoc/server/config-domainlist.xml
  AL    src/site/xdoc/server/feature-smtp-hooks.xml
  AL    src/site/xdoc/server/dev-provided-smtp-hooks.xml
  AL    src/site/xdoc/server/manage.xml
  AL    src/site/xdoc/server/config-quota.xml
  AL    src/site/xdoc/server/config-mailbox.xml
  AL    src/site/xdoc/server/dev-build.xml
  AL    src/site/xdoc/server/config-activemq.xml
  AL    src/site/xdoc/server/config-cassandra.xml
  AL    src/site/xdoc/server/dev-database-schema.xml
  AL    src/site/xdoc/server/config-system.xml
  AL    src/site/xdoc/server/config-jmap.xml
  AL    src/site/xdoc/server/archive/architecture_v1_2.xml
  AL    src/site/xdoc/server/archive/document_archive.xml
  AL    src/site/xdoc/server/archive/usingTLS_v1_2.xml
  AL    src/site/xdoc/server/archive/architecture_v2_0.xml
  AL    src/site/xdoc/server/archive/usingLDAP_v1_2.xml
  AL    src/site/xdoc/server/archive/configuration_v2_0.xml
  AL    src/site/xdoc/server/archive/install.xml
  AL    src/site/xdoc/server/archive/announcement_2_1.xml
  AL    src/site/xdoc/server/archive/usingJDBC_v2.0.xml
  AL    src/site/xdoc/server/config-healthcheck.xml
  AL    src/site/xdoc/server/feature-security.xml
  AL    src/site/xdoc/server/config-users.xml
  AL    src/site/xdoc/server/config-antispam.xml
  AL    src/site/xdoc/server/quick-start-cassandra.xml
  AL    src/site/xdoc/server/rfcs.xml
  AL    src/site/xdoc/server/dev-extend.xml
  AL    src/site/xdoc/server/manage-jmx.xml
  AL    src/site/xdoc/server/config-rabbitmq.xml
  AL    src/site/xdoc/server/config-fetchmail.xml
  AL    src/site/xdoc/server/upgrade-2.3.xml
  AL    src/site/xdoc/server/config-mailrepositorystore.xml
  AL    src/site/xdoc/server/install.xml
  AL    src/site/xdoc/server/monitor-jmx.xml
  AL    src/site/xdoc/server/config-dnsservice.xml
  AL    src/site/xdoc/server/dev-activemq.xml
  AL    src/site/xdoc/server/config-opensearch.xml
  AL    src/site/xdoc/server/dev.xml
  AL    src/site/xdoc/server/monitor-folders.xml
  AL    src/site/xdoc/server/config-guice.xml
  AL    src/site/xdoc/server/config-imap4.xml
  AL    src/site/xdoc/server/release-notes.xml
  AL    src/site/xdoc/server/config-sieve.xml
  AL    src/site/xdoc/server/monitor.xml
  AL    src/site/xdoc/server/config-webadmin.xml
  AL    src/site/xdoc/server/config.xml
  AL    src/site/xdoc/mailet/index.xml
  AL    src/site/xdoc/mailet/standard/index.xml
  AL    src/site/xdoc/mailet/standard/conf.xml
  AL    src/site/xdoc/mailet/conf.xml
  AL    src/site/xdoc/mailet/stylesheets/site.xsl
  AL    src/site/xdoc/mailet/stylesheets/project.xml
  AL    src/site/xdoc/mailet/ai/index.xml
  AL    src/site/xdoc/mailet/api/index.xml
  AL    src/site/xdoc/mailet/base/index.xml
  AL    src/site/xdoc/mailet/mailetdocs-maven-plugin/index.xml
  AL    src/site/xdoc/mailet/crypto/index.xml
  AL    src/site/xdoc/mailet/crypto/conf.xml
  AL    src/site/xdoc/mailbox/index.xml
  AL    src/site/xdoc/mailbox/mailbox-tool.xml
  AL    src/site/xdoc/mailbox/mailbox-jpa.xml
  AL    src/site/xdoc/mailbox/source-code.xml
  AL    src/site/xdoc/mailbox/mailbox-store.xml
  AL    src/site/xdoc/mailbox/mailbox-spring.xml
  AL    src/site/xdoc/mailbox/mailbox-cassandra.xml
  AL    src/site/xdoc/mailbox/mailbox-memory.xml
  AL    src/site/xdoc/mailbox/mailbox-api.xml
  AL    src/site/xdoc/guidelines.xml
  AL    src/site/site.xml
  AL    src/site/apt/mpt/release-notes.apt
  AL    src/site/apt/mailet/release-notes-old.apt
  AL    src/site/apt/mailet/usage.apt
  AL    src/site/apt/mailet/examples/standard.apt
  AL    src/homepage/Gemfile
 !????? src/homepage/about.md
  AL    src/homepage/feed.xml
  AL    src/homepage/_layouts/post.html
  AL    src/homepage/_layouts/default.html
  AL    src/homepage/_layouts/howTo.html
 !????? src/homepage/Gemfile.lock
  AL    src/homepage/howTo/custom-smtp-hooks.html
  AL    src/homepage/howTo/deleted-messages-vault.html
  AL    src/homepage/howTo/mail-processing.html
  AL    src/homepage/howTo/spf.html
  AL    src/homepage/howTo/index.html
  AL    src/homepage/howTo/custom-listeners.html
  AL    src/homepage/howTo/custom-james-assembly.html
  AL    src/homepage/howTo/dkim.html
  AL    src/homepage/howTo/custom-webadmin-routes.html
  AL    src/homepage/howTo/custom-healthchecks.html
  AL    src/homepage/howTo/imap-server.html
  AL    src/homepage/howTo/custom-smtp-commands.html
  B     src/homepage/images/tb3.png
  B     src/homepage/images/james-general-architecture.png
  B     src/homepage/images/openpaas.png
  B     src/homepage/images/tb1.png
  B     src/homepage/images/tb4.png
 !????? src/homepage/images/james-alt.svg
  B     src/homepage/images/james-logo.png
  B     src/homepage/images/linagora.png
  B     src/homepage/images/hactoberfest.png
  B     src/homepage/images/guice-jpa-architecture-overview.png
 !????? src/homepage/images/james.svg
  B     src/homepage/images/james-smtp-relay.png
  B     src/homepage/images/tb3-5.png
  B     src/homepage/images/tb2.png
  B     src/homepage/images/james-imap-server.png
  AL    src/homepage/elements.html
  AL    src/homepage/index.html
  AL    src/homepage/posts.html
  AL    src/homepage/_includes/header.html
  AL    src/homepage/_includes/footer.html
 !????? src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
 !????? src/homepage/_posts/2019-03-26-james-3.3.0.markdown
 !????? src/homepage/_posts/2022-01-26-james-3.6.2.markdown
 !????? src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
 !????? src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
 !????? src/homepage/_posts/2023-06-20-fail2ban.markdown
 !????? src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
 !????? src/homepage/_posts/2022-08-26-james-3.7.1.markdown
 !????? src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
 !????? src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
 !????? src/homepage/_posts/2011-02-06-protocols-1.5.markdown
 !????? src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
 !????? src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
 !????? src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
 !????? src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
 !????? src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
 !????? src/homepage/_posts/2016-01-08-module-merge.markdown
 !????? src/homepage/_posts/2016-02-08-moving-to-git.markdown
 !????? src/homepage/_posts/2022-03-01-james-3.7.0.markdown
 !????? src/homepage/_posts/2016-10-19-james-3.0.markdown
 !????? src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
 !????? src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
 !????? src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
 !????? src/homepage/_posts/2007-01-03-Mailet-api.markdown
 !????? src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
 !????? src/homepage/_posts/2009-06-16-jsieve-03.markdown
 !????? src/homepage/_posts/2016-11-19-james-3.0.markdown
 !????? src/homepage/_posts/2019-08-30-latest-image-changes.markdown
 !????? src/homepage/_posts/2015-10-08-james-2.3.1.markdown
 !????? src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
 !????? src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
 !????? src/homepage/_posts/2021-12-02-james-3.6.1.markdown
 !????? src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
 !????? src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
 !????? src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
 !????? src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
 !????? src/homepage/_posts/2010-05-01-mailet-1.0.markdown
 !????? src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
 !????? src/homepage/_posts/2016-05-09-jmap.markdown
 !????? src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
 !????? src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
 !????? src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
 !????? src/homepage/_posts/2019-09-05-james-3.4.0.markdown
 !????? src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
 !????? src/homepage/_posts/2009-10-17-jdkim.markdown
 !????? src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
 !????? src/homepage/_posts/2020-07-16-james-3.5.0.markdown
 !????? src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
 !????? src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
 !????? src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
 !????? src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
 !????? src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
 !????? src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
 !????? src/homepage/_posts/2018-11-14-james-3.2.0.markdown
 !????? src/homepage/_posts/2010-12-06-protocols-1.2.markdown
 !????? src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
 !????? src/homepage/_posts/2023-05-17-james-3.8.0.markdown
 !????? src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
 !????? src/homepage/_posts/2016-07-09-jmap.markdown
 !????? src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
 !????? src/homepage/_posts/2022-10-06-james-3.7.2.markdown
 !????? src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
 !????? src/homepage/_posts/2022-12-30-james-3.7.3.markdown
 !????? src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
 !????? src/homepage/_posts/2015-09-08-james-2.3.1.markdown
 !????? src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
 !????? src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
 !????? src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
 !????? src/homepage/_posts/2023-03-20-james-3.7.4.markdown
 !????? src/homepage/_posts/2009-08-17-james-2.3.2.markdown
 !????? src/homepage/_posts/2018-01-26-admin-features.markdown
 !????? src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
 !????? src/homepage/_posts/2017-07-20-james-3.0.markdown
 !????? src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
 !????? src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
 !????? src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
 !????? src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
 !????? src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
 !????? src/homepage/_posts/2011-08-06-james-beta3.markdown
 !????? src/homepage/_posts/2018-02-12-gsoc-2018.markdown
 !????? src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
 !????? src/homepage/_posts/2016-07-19-jmap.markdown
 !????? src/homepage/_posts/2008-03-16-gsoc-2008.markdown
 !????? src/homepage/_posts/2019-11-19-apache-con-eu.markdown
 !????? src/homepage/_posts/2011-05-06-jdKim0.2.markdown
 !????? src/homepage/_posts/2009-09-17-hupa.markdown
 !????? src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
 !????? src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
 !????? src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
 !????? src/homepage/_posts/2021-03-16-james-3.6.0.markdown
 !????? src/homepage/_posts/2016-09-19-james-3.0.markdown
 !????? src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
 !????? src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
 !????? src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
 !????? src/homepage/_posts/2018-07-31-james-3.1.0.markdown
 !????? src/homepage/_posts/2006-08-02-james-website-updates.markdown
 !????? src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
 !????? src/homepage/_posts/2012-06-08-hupa-0.2.markdown
 !????? src/homepage/_posts/2024-01-09-james-3.7.5.markdown
 !????? src/homepage/_posts/2016-02-09-jmap.markdown
 !????? src/homepage/_posts/2024-01-09-james-3.8.1.markdown
 !????? src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
 !????? src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
 !????? src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
 !????? src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
 !????? src/homepage/_posts/2017-10-20-james-3.0.1.markdown
 !????? src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
 !????? src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
 !????? src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
 !????? src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
 !????? src/homepage/_config.yml
 !????? src/homepage/assets/css/font-awesome.min.css
 !????? src/homepage/assets/css/main.css
 !????? src/homepage/assets/css/lity.min.css
 !????? src/homepage/assets/css/ie8.css
 !????? src/homepage/assets/css/ie9.css
  B     src/homepage/assets/css/images/background.jpg
  B     src/homepage/assets/css/images/overlay.png
 !????? src/homepage/assets/css/test.html
 !????? src/homepage/assets/css/lightbox.css
  B     src/homepage/assets/images/prev.png
  B     src/homepage/assets/images/close.png
  B     src/homepage/assets/images/next.png
  B     src/homepage/assets/images/gsoc.png
  B     src/homepage/assets/images/loading.gif
  B     src/homepage/assets/fonts/FontAwesome.otf
  B     src/homepage/assets/fonts/fontawesome-webfont.eot
  B     src/homepage/assets/fonts/fontawesome-webfont.woff2
  B     src/homepage/assets/fonts/fontawesome-webfont.woff
  B     src/homepage/assets/fonts/fontawesome-webfont.ttf
 !????? src/homepage/assets/fonts/fontawesome-webfont.svg
 !????? src/homepage/assets/js/main.js
 !????? src/homepage/assets/js/github-fetch.js
 !????? src/homepage/assets/js/jquery.min.js
 !????? src/homepage/assets/js/lightbox.js
 !????? src/homepage/assets/js/ie/PIE.htc
 !????? src/homepage/assets/js/ie/respond.min.js
 !????? src/homepage/assets/js/ie/html5shiv.js
 !????? src/homepage/assets/js/jquery.scrolly.min.js
 !????? src/homepage/assets/js/skel.min.js
 !????? src/homepage/assets/js/lity.min.js
 !????? src/homepage/assets/js/util.js
 !????? src/homepage/assets/js/jquery.scrollex.min.js
 !????? src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_syntax-highlighting.scssc
 !????? src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_base.scssc
 !????? src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_layout.scssc
 !????? src/homepage/.sass-cache/0d97c95486dbfb22208e2f940de32f180caddfba/minima.scssc
 !????? src/homepage/_site/about.md
  AL    src/homepage/_site/feed.xml
  AL    src/homepage/_site/howTo/custom-smtp-hooks.html
  AL    src/homepage/_site/howTo/deleted-messages-vault.html
  AL    src/homepage/_site/howTo/mail-processing.html
  AL    src/homepage/_site/howTo/spf.html
  AL    src/homepage/_site/howTo/index.html
  AL    src/homepage/_site/howTo/custom-listeners.html
  AL    src/homepage/_site/howTo/custom-james-assembly.html
  AL    src/homepage/_site/howTo/dkim.html
  AL    src/homepage/_site/howTo/custom-webadmin-routes.html
  AL    src/homepage/_site/howTo/custom-healthchecks.html
  AL    src/homepage/_site/howTo/imap-server.html
  AL    src/homepage/_site/howTo/custom-smtp-commands.html
  AL    src/homepage/_site/james/apachecon/2019/11/19/apache-con-eu.html
  AL    src/homepage/_site/james/update/2019/09/05/james-3.4.0.html
  AL    src/homepage/_site/james/update/2019/03/19/mime4j-0.8.3.html
  AL    src/homepage/_site/james/update/2019/03/26/james-3.3.0.html
  AL    src/homepage/_site/james/update/2019/08/30/latest-image-changes.html
  AL    src/homepage/_site/james/update/2012/06/08/hupa-0.2.html
  AL    src/homepage/_site/james/update/2012/04/08/James-3.0-beta4.html
  AL    src/homepage/_site/james/update/2012/01/07/protocols-1.6.0.html
  AL    src/homepage/_site/james/update/2012/01/07/mime4j-0.7.2.html
  AL    src/homepage/_site/james/update/2012/01/08/protocols-1.6.1.html
  AL    src/homepage/_site/james/update/2012/12/08/mailet-2.5.0.html
  AL    src/homepage/_site/james/update/2024/01/09/james-3.7.5.html
  AL    src/homepage/_site/james/update/2024/01/09/james-3.8.1.html
  AL    src/homepage/_site/james/update/2024/01/08/mime4j-0.8.10.html
  AL    src/homepage/_site/james/update/2022/04/01/mime4j-0.8.7.html
  AL    src/homepage/_site/james/update/2022/03/21/james-3.7.0.html
  AL    src/homepage/_site/james/update/2022/10/06/james-3.7.2.html
  AL    src/homepage/_site/james/update/2022/10/28/jsieve-0.8.html
  AL    src/homepage/_site/james/update/2022/10/28/mime4j-0.8.8.html
  AL    src/homepage/_site/james/update/2022/10/07/jdkim-0.3.html
  AL    src/homepage/_site/james/update/2022/01/26/james-3.6.2.html
  AL    src/homepage/_site/james/update/2022/08/26/james-3.7.1.html
  AL    src/homepage/_site/james/update/2022/12/30/jspf-1.0.2.html
  AL    src/homepage/_site/james/update/2022/12/30/mime4j-0.8.9.html
  AL    src/homepage/_site/james/update/2022/12/30/james-3.7.3.html
  AL    src/homepage/_site/james/update/2007/05/15/mailet-api-lives.html
  AL    src/homepage/_site/james/update/2007/05/16/mime4j-0.3.html
  AL    src/homepage/_site/james/update/2007/09/16/jspf-0.9.5.html
  AL    src/homepage/_site/james/update/2007/02/04/JSPF-0.9-beta4.html
  AL    src/homepage/_site/james/update/2007/02/03/feathercast-fetures.html
  AL    src/homepage/_site/james/update/2007/04/05/JAMES-2.3.1-RC1.html
  AL    src/homepage/_site/james/update/2007/04/15/JAMES-2.3.1.html
  AL    src/homepage/_site/james/update/2007/04/04/james-commiters-guidelines.html
  AL    src/homepage/_site/james/update/2007/01/03/Mailet-api.html
  AL    src/homepage/_site/james/update/2006/09/03/JSPF-0.9-b3.html
  AL    src/homepage/_site/james/update/2006/10/03/JAMES-2.3.html
  AL    src/homepage/_site/james/update/2006/07/02/2.3.0on-the-way.html
  AL    src/homepage/_site/james/update/2006/08/02/2.3.0-RC3.html
  AL    src/homepage/_site/james/update/2006/08/02/james-website-updates.html
  AL    src/homepage/_site/james/update/2021/09/21/james-joinsapachecon.html
  AL    src/homepage/_site/james/update/2021/09/26/mime4j-0.8.6.html
  AL    src/homepage/_site/james/update/2021/04/21/mime4j-0.8.4.html
  AL    src/homepage/_site/james/update/2021/03/16/james-3.6.0.html
  AL    src/homepage/_site/james/update/2021/07/02/mime4j-0.8.5.html
  AL    src/homepage/_site/james/update/2021/12/02/james-3.6.1.html
  AL    src/homepage/_site/james/update/2017/06/23/jsieve-0.7.html
  AL    src/homepage/_site/james/update/2017/06/16/mime4j-0.8.1.html
  AL    src/homepage/_site/james/update/2017/05/16/james-3.0.0-rc1.html
  AL    src/homepage/_site/james/update/2017/10/20/james-3.0.1.html
  AL    src/homepage/_site/james/update/2017/10/03/BlogPostInstallingJames.html
  AL    src/homepage/_site/james/update/2017/10/03/Hacktoberfest.html
  AL    src/homepage/_site/james/update/2017/07/20/james-3.0.html
  AL    src/homepage/_site/james/update/2011/05/06/jdKim0.2.html
  AL    src/homepage/_site/james/update/2011/02/06/protocols-1.5.html
  AL    src/homepage/_site/james/update/2011/04/06/mime4J-0.7.html
  AL    src/homepage/_site/james/update/2011/03/06/jspf-0.9.9.html
  AL    src/homepage/_site/james/update/2011/10/06/protocols-1.6-beta2.html
  AL    src/homepage/_site/james/update/2011/10/07/mime4j-0.7.1.html
  AL    src/homepage/_site/james/update/2011/10/07/jspf-1.0.0.html
  AL    src/homepage/_site/james/update/2011/10/07/protocols-1.6.0-RC1.html
  AL    src/homepage/_site/james/update/2011/01/06/imap-mailbox-0.2.html
  AL    src/homepage/_site/james/update/2011/08/06/james-beta3.html
  AL    src/homepage/_site/james/update/2018/06/06/linagora-june-nl.html
  AL    src/homepage/_site/james/update/2018/11/14/james-3.2.0.html
  AL    src/homepage/_site/james/update/2018/05/07/mime4j-0.8.2.html
  AL    src/homepage/_site/james/update/2018/01/25/admin-features.html
  AL    src/homepage/_site/james/update/2018/07/31/james-3.1.0.html
  AL    src/homepage/_site/james/update/2015/09/08/james-2.3.1.html
  AL    src/homepage/_site/james/update/2015/10/08/james-2.3.1.html
  AL    src/homepage/_site/james/update/2008/04/16/jspf-0.9.6.html
  AL    src/homepage/_site/james/update/2008/03/16/gsoc-2008.html
  AL    src/homepage/_site/james/update/2008/10/16/mime4j-0.5.html
  AL    src/homepage/_site/james/update/2008/08/16/mime4j-0.4.html
  AL    src/homepage/_site/james/update/2008/08/17/JSIEVE-0.2.html
  AL    src/homepage/_site/james/update/2023/05/17/fail2ban.html
  AL    src/homepage/_site/james/update/2023/05/17/james-3.8.0.html
  AL    src/homepage/_site/james/update/2023/03/20/james-3.7.4.html
  AL    src/homepage/_site/james/update/2010/06/02/mailet-base-1.1.html
  AL    src/homepage/_site/james/update/2010/06/03/jspf-0.9.8.html
  AL    src/homepage/_site/james/update/2010/11/05/protocols-1.2.html
  AL    src/homepage/_site/james/update/2010/11/05/james-3.0-M1.html
  AL    src/homepage/_site/james/update/2010/05/02/jsieve-0.4.html
  AL    src/homepage/_site/james/update/2010/05/01/mailet-1.0.html
  AL    src/homepage/_site/james/update/2010/09/04/imap-0.2-M1.html
  AL    src/homepage/_site/james/update/2010/09/03/protocols-1.2-M2.html
  AL    src/homepage/_site/james/update/2010/12/06/james-3.0-M2.html
  AL    src/homepage/_site/james/update/2020/07/16/james-3.5.0.html
  AL    src/homepage/_site/james/update/2016/11/19/james-3.0.html
  AL    src/homepage/_site/james/update/2016/05/09/jmap.html
  AL    src/homepage/_site/james/update/2016/09/19/james-3.0.html
  AL    src/homepage/_site/james/update/2016/02/09/moving-to-git.html
  AL    src/homepage/_site/james/update/2016/02/09/jmap.html
  AL    src/homepage/_site/james/update/2016/10/19/james-3.0.html
  AL    src/homepage/_site/james/update/2016/01/08/module-merge.html
  AL    src/homepage/_site/james/update/2016/07/09/jmap.html
  AL    src/homepage/_site/james/update/2016/07/19/jmap.html
  AL    src/homepage/_site/james/update/2009/06/16/jsieve-03.html
  AL    src/homepage/_site/james/update/2009/06/17/jspf-0.9.7.html
  AL    src/homepage/_site/james/update/2009/05/16/Mailet-crypto-0.1.html
  AL    src/homepage/_site/james/update/2009/09/17/hupa.html
  AL    src/homepage/_site/james/update/2009/02/16/MAILET-docs-plugin-0.1.html
  AL    src/homepage/_site/james/update/2009/04/16/Mailet-base-0.1.html
  AL    src/homepage/_site/james/update/2009/03/16/Mime4j-0.6.html
  AL    src/homepage/_site/james/update/2009/10/17/jdkim.html
  AL    src/homepage/_site/james/update/2009/01/16/MAILET-2.4.html
  AL    src/homepage/_site/james/update/2009/07/17/jMPT-0.1.html
  AL    src/homepage/_site/james/update/2009/08/17/james-2.3.2.html
  B     src/homepage/_site/images/tb3.png
  B     src/homepage/_site/images/james-general-architecture.png
  B     src/homepage/_site/images/openpaas.png
  B     src/homepage/_site/images/tb1.png
  B     src/homepage/_site/images/tb4.png
 !????? src/homepage/_site/images/james-alt.svg
  B     src/homepage/_site/images/james-logo.png
  B     src/homepage/_site/images/linagora.png
  B     src/homepage/_site/images/hactoberfest.png
  B     src/homepage/_site/images/guice-jpa-architecture-overview.png
 !????? src/homepage/_site/images/james.svg
  B     src/homepage/_site/images/james-smtp-relay.png
  B     src/homepage/_site/images/tb3-5.png
  B     src/homepage/_site/images/tb2.png
  B     src/homepage/_site/images/james-imap-server.png
  AL    src/homepage/_site/elements.html
  AL    src/homepage/_site/index.html
  AL    src/homepage/_site/posts.html
  AL    src/homepage/_site/community/2020/10/29/testing-james-with-jmeter.html
 !????? src/homepage/_site/assets/main.css
 !????? src/homepage/_site/assets/css/font-awesome.min.css
 !????? src/homepage/_site/assets/css/main.css
 !????? src/homepage/_site/assets/css/lity.min.css
 !????? src/homepage/_site/assets/css/ie8.css
 !????? src/homepage/_site/assets/css/ie9.css
  B     src/homepage/_site/assets/css/images/background.jpg
  B     src/homepage/_site/assets/css/images/overlay.png
 !????? src/homepage/_site/assets/css/test.html
 !????? src/homepage/_site/assets/css/lightbox.css
  B     src/homepage/_site/assets/images/prev.png
  B     src/homepage/_site/assets/images/close.png
  B     src/homepage/_site/assets/images/next.png
  B     src/homepage/_site/assets/images/gsoc.png
  B     src/homepage/_site/assets/images/loading.gif
 !????? src/homepage/_site/assets/minima-social-icons.svg
  B     src/homepage/_site/assets/fonts/FontAwesome.otf
  B     src/homepage/_site/assets/fonts/fontawesome-webfont.eot
  B     src/homepage/_site/assets/fonts/fontawesome-webfont.woff2
  B     src/homepage/_site/assets/fonts/fontawesome-webfont.woff
  B     src/homepage/_site/assets/fonts/fontawesome-webfont.ttf
 !????? src/homepage/_site/assets/fonts/fontawesome-webfont.svg
 !????? src/homepage/_site/assets/js/main.js
 !????? src/homepage/_site/assets/js/github-fetch.js
 !????? src/homepage/_site/assets/js/jquery.min.js
 !????? src/homepage/_site/assets/js/lightbox.js
 !????? src/homepage/_site/assets/js/ie/PIE.htc
 !????? src/homepage/_site/assets/js/ie/respond.min.js
 !????? src/homepage/_site/assets/js/ie/html5shiv.js
 !????? src/homepage/_site/assets/js/jquery.scrolly.min.js
 !????? src/homepage/_site/assets/js/skel.min.js
 !????? src/homepage/_site/assets/js/lity.min.js
 !????? src/homepage/_site/assets/js/util.js
 !????? src/homepage/_site/assets/js/jquery.scrollex.min.js
  AL    src/homepage/_site/announcements/2018/01/31/gsoc-2018.html
 !????? src/homepage-docker/Dockerfile
 !????? src/homepage-docker/compile.sh
 !????? src/site-docker/Dockerfile
 !????? src/site-docker/compile.sh
 !????? src/adr/0026-removing-configured-additional-mailboxListeners.md
 !????? src/adr/0032-distributed-mail-queue-cleanup.md
 !????? src/adr/0007-distributed-task-cancellation.md
 !????? src/adr/0043-avoid-elasticsearch-on-critical-reads.md
 !????? src/adr/0068-mutualize-cassandra-storge-for-quota.md
 !????? src/adr/0066-modular-user-data-deletion.md
 !????? src/adr/0039-distributed-blob-garbage-collector.md
 !????? src/adr/0030-separate-attachment-content-and-metadata.md
 !????? src/adr/0055-rspamd-spam-filtering.md
 !????? src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
 !????? src/adr/0050-jmap-web-push.md
 !????? src/adr/0002-make-taskmanager-distributed.md
 !????? src/adr/0012-jmap-partial-reads.md
 !????? src/adr/0038-distributed-eventbus.md
 !????? src/adr/0031-distributed-mail-queue.md
 !????? src/adr/0004-distributed-tasks-listing.md
 !????? src/adr/0027-eventBus-error-handling-upon-dispatch.md
 !????? src/adr/0021-cassandra-acl-inconsistency.md
 !????? src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
 !????? src/adr/0063-temporary-file-leaks.md
 !????? src/adr/0069-crowdsec-IP-filtering.md
 !????? src/adr/0037-eventbus.md
 !????? src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
 !????? src/adr/0024-polyglot-strategy.md
 !????? src/adr/0060-adopt-bounded-elastic.md
 !????? src/adr/0058-upgrade-to-netty-4.md
 !????? src/adr/0042-applicative-read-repairs.md
 !????? src/adr/0048-cleanup-jmap-uploads.md
 !????? src/adr/0015-objectstorage-blobid-list.md
 !????? src/adr/0017-file-mail-queue-deprecation.md
 !????? src/adr/0020-cassandra-mailbox-object-consistency.md
 !????? src/adr/0047-jmap-push-over-websockets.md
 !????? src/adr/0009-disable-elasticsearch-dynamic-mapping.md
 !????? src/adr/0006-task-serialization.md
 !????? src/adr/0057-reactive-imap.md
 !????? src/adr/0051-oidc.md
 !????? src/adr/0019-reactor-netty-adoption.md
 !????? src/adr/0054-elasticsearch-search-overrides.md
 !????? src/adr/0040-quality-levels-definitions.md
 !????? src/adr/0056-opensearch-migration.md
 !????? src/adr/0042-james-cli-based-on-webadmin.md
 !????? src/adr/0003-distributed-workqueue.md
 !????? src/adr/0009-java-11-migration.md
 !????? src/adr/0065-changing-username.md
 !????? src/adr/0025-cassandra-blob-store-cache.md
 !????? src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
 !????? src/adr/0064-account-delegation.md
 !????? src/adr/0046-generalize-event-bus.md
 !????? src/adr/0001-record-architecture-decisions.md
 !????? src/adr/0034-mailbox-api-visibility-and-usage.md
 !????? src/adr/0018-jmap-new-specs.md
 !????? src/adr/0035-distributed-listeners-configuration.md
 !????? src/adr/0062-oidc-token-introspection.md
 !????? src/adr/0041-replace-jcloud-with-s3.md
 !????? src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
 !????? src/adr/0011-remove-elasticsearch-document-source.md
 !????? src/adr/0059-upgrade-to-cassadra-driver-4.md
 !????? src/adr/0016-distributed-workqueue.md
 !????? src/adr/0052-pulsar-mailqueue.md
 !????? src/adr/0014-blobstore-storage-policies.md
 !????? src/adr/0008-distributed-task-await.md
  B     src/adr/img/adr-69-scenario-diagram.png
  B     src/adr/img/adr-68-architecture-diagram.png
 !????? src/adr/0053-email-rate-limiting.md
 !????? src/adr/0013-precompute-jmap-preview.md
 !????? src/adr/0067-quota-for-jmap-uploads.md
 !????? src/adr/0028-Recompute-mailbox-quotas.md
 !????? src/adr/0070-postgresql-adoption.md
 !????? src/adr/0022-cassandra-message-inconsistency.md
 !????? src/adr/0005-distributed-task-termination-ackowledgement.md
 !????? src/adr/0033-use-scala-in-event-sourcing-modules.md
 !????? src/adr/0061-delegation.md
 !????? src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
 !????? src/adr/0010-enable-elasticsearch-routing.md
  AL    src/reporting-site/site.xml
  B     james-logo.png
  GEN   pom.xml
  AL    core/src/main/java/org/apache/james/util/Port.java
  AL    core/src/main/java/org/apache/james/util/Host.java
  AL    core/src/main/java/org/apache/james/core/MaybeSender.java
  AL    core/src/main/java/org/apache/james/core/Domain.java
  AL    core/src/main/java/org/apache/james/core/MailAddress.java
  AL    core/src/main/java/org/apache/james/core/Username.java
  AL    core/src/main/java/org/apache/james/core/builder/MimeMessageBuilder.java
  AL    core/src/main/java/org/apache/james/core/builder/MimeMessageWrapper.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaSizeUsage.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaLimitValue.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaComponent.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaType.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaCountLimit.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaScope.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaUsageValue.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaCountUsage.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaSizeLimit.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaCurrentValue.java
  AL    core/src/main/java/org/apache/james/core/quota/QuotaLimit.java
  AL    core/src/main/java/org/apache/james/core/healthcheck/HealthCheck.java
  AL    core/src/main/java/org/apache/james/core/healthcheck/Result.java
  AL    core/src/main/java/org/apache/james/core/healthcheck/ComponentName.java
  AL    core/src/main/java/org/apache/james/core/healthcheck/ResultStatus.java
  AL    core/src/test/java/org/apache/james/util/PortTest.java
  AL    core/src/test/java/org/apache/james/util/HostTest.java
  AL    core/src/test/java/org/apache/james/domainlist/api/DomainTest.java
  AL    core/src/test/java/org/apache/james/core/CoreFixture.java
  AL    core/src/test/java/org/apache/james/core/MaybeSenderTest.java
  AL    core/src/test/java/org/apache/james/core/builder/MimeMessageBuilderTest.java
  AL    core/src/test/java/org/apache/james/core/builder/MimeMessageWrapperTest.java
  AL    core/src/test/java/org/apache/james/core/UsernameTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaCountLimitTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaSizeLimitTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaUsageValueTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaLimitValueTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaCountUsageTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaSizeUsageTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaLimitTest.java
  AL    core/src/test/java/org/apache/james/core/quota/QuotaCurrentValueTest.java
  AL    core/src/test/java/org/apache/james/core/MailAddressTest.java
  AL    core/src/test/java/org/apache/james/core/healthcheck/ResultTest.java
  AL    core/src/test/java/org/apache/james/core/healthcheck/ResultStatusTest.java
  AL    core/src/test/java/org/apache/james/core/healthcheck/ComponentNameTest.java
  AL    core/pom.xml
  AL    mdn/src/main/scala/org/apache/james/mdn/MDNReportParser.scala
  AL    mdn/src/main/java/org/apache/james/mdn/sending/mode/DispositionSendingMode.java
  AL    mdn/src/main/java/org/apache/james/mdn/type/DispositionType.java
  AL    mdn/src/main/java/org/apache/james/mdn/action/mode/DispositionActionMode.java
  AL    mdn/src/main/java/org/apache/james/mdn/MDNReport.java
  AL    mdn/src/main/java/org/apache/james/mdn/MDN.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/Error.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/AddressType.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/OriginalMessageId.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/Text.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/Field.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/Disposition.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/OriginalRecipient.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/Gateway.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/ReportingUserAgent.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/ExtensionField.java
  AL    mdn/src/main/java/org/apache/james/mdn/fields/FinalRecipient.java
  AL    mdn/src/main/java/org/apache/james/mdn/modifier/DispositionModifier.java
  AL    mdn/src/test/scala/org/apache/james/mdn/MDNReportParserTest.scala
  AL    mdn/src/test/java/org/apache/james/mdn/sending/mode/DispositionSendingModeTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/type/DispositionTypeTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/action/mode/DispositionActionModeTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/MDNTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/MDNReportFormattingTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/OriginalRecipientTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/GatewayTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/DispositionTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/OriginalMessageIdTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/AddressTypeTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/ExtensionFieldTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/FinalRecipientTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/ErrorTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/ReportingUserAgentTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/fields/TextTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/modifier/DispositionModifierTest.java
  AL    mdn/src/test/java/org/apache/james/mdn/MDNReportTest.java
  AL    mdn/pom.xml
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailEnvelope.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPStartTlsResponse.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/dsn/DSNStatus.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddressException.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSessionImpl.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPSession.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailAddress.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPResponse.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/RcptCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AcceptRecipientIfRelayingIsAllowed.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/NoopCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/RsetCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/QuitCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/HeloCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/PostmasterAbuseRcptHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractAuthRequiredToRelayRcptHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractHookableCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/HelpCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/UnknownCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/log/HookResultLogger.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SMTPMDCContextFactory.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/ExpnCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/EhloExtension.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/StartTlsCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/MailCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/VrfyCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/SeparatingDataLineFilter.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/AbstractSenderAuthIdentifyVerificationHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ReverseEqualsEhloHeloHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractValidRcptHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/AbstractGreylistHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ValidSenderDomainHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxRcptHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SpamTrapHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/SupressDuplicateRcptHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandler.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/MailEnvelopeImpl.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResult.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/AuthHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HeloHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/QuitHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MailHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MailParametersHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookResultHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/RcptHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/MessageHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/Hook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/HookReturnCode.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/hook/UnknownHook.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPServerMBean.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocol.java
  AL    protocols/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPRetCode.java
 !????? protocols/smtp/src/test/resources/a50.eml
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPSServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyStartTlsSMTPServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettyProxySMTPServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/netty/NettySMTPSServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/AbstractSMTPServerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/ValidSenderDomainHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxUnknownCmdHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/MaxRcptHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/ResolvableEhloHeloHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/SpamTrapHandlerTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/BaseFakeSMTPSession.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/utils/TestMessageHook.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/hook/HookResultTest.java
  AL    protocols/smtp/src/test/java/org/apache/james/protocols/smtp/SMTPStartTlsResponseTest.java
  AL    protocols/smtp/src/reporting-site/site.xml
  AL    protocols/smtp/pom.xml
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/jsieve/Parser.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/util/ParserUtils.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/util/SettableSession.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ManageSieveProcessor.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/ArgumentParser.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/transcode/NotEnoughDataException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationProcessor.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SieveParser.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SessionTerminatedException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/UnknownSaslMechanism.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/ManageSieveException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/StartTLS.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/ListScripts.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Noop.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CoreCommands.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Unauthenticate.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Authenticate.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/CheckScript.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Logout.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/Capability.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/HaveSpace.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/RenameScript.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/PutScript.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/GetScript.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/LineCommands.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/SetActive.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/commands/DeleteScript.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/CapabilityAdvertiser.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/AuthenticationRequiredException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/ArgumentException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/SyntaxException.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/api/Session.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/core/CoreProcessor.java
  AL    protocols/managesieve/src/main/java/org/apache/james/managesieve/core/PlainAuthenticationProcessor.java
  AL    protocols/managesieve/src/test/java/org/apache/james/managesieve/util/ParserUtilsTest.java
  AL    protocols/managesieve/pom.xml
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/LMTPMultiResponse.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/LMTPConfiguration.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/DataLineMessageHookHandler.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/WelcomeMessageHandler.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/LhloCmdHandler.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/core/ReceivedDataLineFilter.java
  AL    protocols/lmtp/src/main/java/org/apache/james/protocols/lmtp/hook/DeliverToRecipientHook.java
  AL    protocols/lmtp/src/main/reporting-site/site.xml
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPProtocolHandlerChain.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPSServerTest.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPServerTest.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/netty/NettyLMTPSServerTest.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPConfigurationImpl.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/AbstractLMTPServerTest.java
  AL    protocols/lmtp/src/test/java/org/apache/james/protocols/lmtp/LMTPClient.java
  AL    protocols/lmtp/pom.xml
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractSSLAwareChannelPipelineFactory.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/Encryption.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/HandlerConstants.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/ConnectionPerIpLimitUpstreamHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/ProtocolMDCContextFactory.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/TimeoutHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/LineHandlerAware.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractAsyncServer.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/CommandInjectionDetectedException.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/NettyServer.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/LineHandlerUpstreamHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/BasicChannelInboundHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/LineDelimiterBasedChannelHandlerFactory.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/AllButStartTlsLineChannelHandlerFactory.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/AllButStartTlsLineBasedChannelHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/ConnectionLimitUpstreamHandler.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/AbstractChannelPipelineFactory.java
  AL    protocols/netty/src/main/java/org/apache/james/protocols/netty/ChannelHandlerFactory.java
  AL    protocols/netty/src/test/java/org/apache/james/protocols/netty/NettyServerTest.java
  AL    protocols/netty/src/reporting-site/site.xml
  AL    protocols/netty/pom.xml
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Configuration.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Session.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3StartTlsResponse.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Protocol.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3StreamResponse.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPOP3CommandHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/NoopCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RsetCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/RetrCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/QuitCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/TopCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ExtraDotInputStream.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StatCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/POP3MessageCommandArguments.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/WelcomeMessageHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/ListCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UnknownCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractPassCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CRLFTerminatedInputStream.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/CapaCapability.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/POP3MessageCommandDelegate.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UserCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/DeleCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/AbstractApopCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/StlsCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/UidlCmdHandler.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/core/MDCConstants.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3SessionImpl.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/ImapMailbox.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/Mailbox.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/MessageMetaData.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/mailbox/ImapMessageMetaData.java
  AL    protocols/pop3/src/main/java/org/apache/james/protocols/pop3/POP3Response.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3ServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3ServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyPOP3SServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/netty/NettyStartTlsPOP3ServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractStartTlsPOP3ServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/ListCmdHandlerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/CRLFTerminatedInputStreamTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/UidlCmdHandlerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/TopCmdHandlerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/POP3MessageCommandDelegateTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/AbstractInputStreamTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/POP3MessageCommandArgumentsTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/DeleCmdHandlerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/RetrCmdHandlerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/core/ExtraDotInputStreamTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3ProtocolHandlerChain.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/AbstractPOP3SServerTest.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/TestPassCmdHandler.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/utils/MockMailbox.java
  AL    protocols/pop3/src/test/java/org/apache/james/protocols/pop3/POP3StartTlsResponseTest.java
  AL    protocols/pop3/pom.xml
  AL    protocols/src/site/site.xml
  AL    protocols/src/reporting-site/site.xml
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ClientAuth.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/Protocol.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolConfiguration.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/Response.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/StreamResponse.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/BaseRequest.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/Request.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolServer.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolConfigurationImpl.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/AbstractResponse.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/CommandDetectionSession.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolTransport.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/AbstractProtocolTransport.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerChain.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerResultHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ExtensibleHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/UnknownCommandHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandHandlerResultLogger.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandlerChainImpl.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/DisconnectHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/AbstractProtocolHandlerChain.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/ProtocolHandler.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/WiringException.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/StartTlsResponse.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/OidcSASLConfiguration.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolSessionImpl.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolSession.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProtocolImpl.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/ProxyInformation.java
  AL    protocols/api/src/main/java/org/apache/james/protocols/api/OIDCSASLParser.java
  B     protocols/api/src/test/resources/boguskeystore
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/AbstractProtocolTransportTest.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/ProtocolSessionTest.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/OIDCSASLHelper.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusSSLSocketFactory.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/utils/ProtocolServerUtils.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusSslContextFactory.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusKeyStore.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/utils/BogusTrustManagerFactory.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/OIDCSASLParserTest.java
  AL    protocols/api/src/test/java/org/apache/james/protocols/api/ProxyInformationTest.java
  AL    protocols/api/src/reporting-site/site.xml
  AL    protocols/api/pom.xml
  AL    protocols/pom.xml
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/VanishedResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/XListResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/NamespaceResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/main/DefaultLocalizer.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/EncoderUtils.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/CapabilityResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ListResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ImapEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ACLResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/AuthenticateResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseComposer.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/EnableResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ExpungeResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/FlagsResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaRootResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ImapEncoderFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/MailboxStatusResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/MetadataResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/RecentResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ImapResponseWriter.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ContinuationResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ESearchResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/StatusResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/FetchResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/base/ImapResponseComposerImpl.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/base/EndImapEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ListingEncodingUtils.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/QuotaResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/MyRightsResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/SearchResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/FakeImapSession.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ExistsResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/ListRightsResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/LSubResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/encode/IdResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/LSubProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CloseProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/RenameProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SystemMessageProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteACLProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SetACLProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/ExpungeProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CopyProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CheckProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/main/DefaultImapProcessorFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/LogoutProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/ContentBodyElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeImpl.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EmptyContent.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/EnvelopeBuilder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MimeDescriptorStructure.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/AddressImpl.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchResponseBuilder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MimeBodyElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchDataConverter.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/FetchProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/HeadersBodyElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/HeaderBodyElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/fetch/MessageResultUtils.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMessageRangeProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/StatusProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/ReplaceProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/UnselectProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SetQuotaProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractAuthProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/UnsubscribeProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CapabilityImplementingProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SetMetadataProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSubscriptionProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/GetQuotaRootProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/GetMetadataProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CreateProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/NoopProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/StartTLSProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SearchProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractMailboxProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/CompressProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/IdleProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SelectProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/IdProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AppendProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/NamespaceProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/DeleteProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/base/AbstractProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/base/UnknownRequestProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/base/ImapResponseMessageProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/base/UidMsnConverter.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/base/SelectedMailboxImpl.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/SubscribeProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/DefaultProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/MyRightsProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/StoreProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/ListRightsProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/LoginProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/PermitEnableCapabilityProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AuthenticateProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/MoveProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/XListProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/AbstractSelectionProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/EnableProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/ListProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/ExamineProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/processor/GetACLProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/main/PathConverter.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/main/ResponseEncoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/main/AbstractImapRequestHandler.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/main/DeniedAccessOnSharedMailboxException.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/main/DefaultImapDecoderFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestStreamLineReader.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/DecoderUtils.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapRequestLineReader.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/main/OutputStreamImapResponseWriter.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/main/DefaultImapDecoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/main/ImapRequestStreamHandler.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapDecoderFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/DecodingException.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/FetchPartPathDecoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/base/AbstractImapCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapDecoder.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/ImapCommandParserFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ReplaceCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LsubCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AuthenticateCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ImapParserFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/IdleCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/MoveCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaRootCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ExamineCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/NamespaceCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UnselectCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CapabilityCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/MyRightsCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StoreCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CreateCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/DeleteACLCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StatusCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SelectCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/RenameCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractMessageRangeCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/FetchCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ExpungeCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CopyCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SearchCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetACLCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetQuotaCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractUidCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UidCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CloseCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetACLCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ListRightsCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/UnsubscribeCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/StartTLSCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AbstractSelectionCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetQuotaCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/GetMetadataCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LoginCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/IDCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/ListCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/DeleteCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/NoopCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/XListCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/SubscribeCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/AppendCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/LogoutCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CompressCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/CheckCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/decode/parser/EnableCommandParser.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/ImapSuite.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ConnectionCheck.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ImapSessionState.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/Tag.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/DefaultConnectionCheckFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ImapConstants.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ConnectionCheckFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/display/ModifiedUtf7.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/display/Localizer.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/display/Locales.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/display/HumanReadableText.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ImapMessage.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/SearchResUtil.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/MailboxTyper.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/DefaultMailboxTyper.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapLineHandler.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/SelectedMailbox.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapSession.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/ImapProcessor.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/process/MailboxType.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ImapConfiguration.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/PartialRange.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/SectionType.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchKey.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchResultOption.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/request/DayMonthYear.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/request/ImapRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/request/SearchOperation.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/UidRange.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/FetchData.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/MessageFlags.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/BodyFetchElement.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/Capability.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/StatusDataItems.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/IdRange.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/response/ImapResponseMessage.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/response/StatusResponseFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/message/response/StatusResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/api/ImapCommand.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/utils/EolInputStream.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/utils/FastByteArrayOutputStream.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/BytesBackedLiteral.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SetQuotaRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/DeleteRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/IRAuthenticateRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/ExpungeRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/ReplaceRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/ListRightsRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractImapRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SelectRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SubscribeRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMessageRangeRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/NamespaceRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/MyRightsRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/AppendRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CloseRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/FetchRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SetMetadataRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/NoopRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/IDRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/LogoutRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SetACLRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/IdleRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CopyRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/GetQuotaRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/LsubRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/DeleteACLRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/UnsubscribeRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/UnselectRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/XListRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CheckRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/GetMetadataRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CapabilityRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/LoginRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/StartTLSRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/ListRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/StoreRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SearchRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/GetQuotaRootRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/EnableRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/StatusRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/SystemMessage.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/MoveRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/GetACLRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CompressRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/AuthenticateRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/RenameRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/CreateRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/request/ExamineRequest.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/Literal.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/QuotaRootResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/SearchResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/RecentResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/MetadataResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/FlagsResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ImmutableStatusResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ListResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ESearchResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/AbstractStatusResponseFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/MailboxStatusResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/FetchResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/XListResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/AuthenticateResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/QuotaResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/IdResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ContinuationResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/EnableResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/NamespaceResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/VanishedResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ACLResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/AbstractListingResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ExpungeResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ListRightsResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/ExistsResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/CapabilityResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/UnpooledStatusResponseFactory.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/MyRightsResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/imap/message/response/LSubResponse.java
  AL    protocols/imap/src/main/java/org/apache/james/mailbox/MessageSequenceNumber.java
  AL    protocols/imap/src/main/java/org/apache/james/mailbox/NullableMessageSequenceNumber.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/main/DefaultImapEncoderFactoryTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/EncoderUtilsTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderNoExtensionsTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/SearchResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/EncoderUtilsDateTimeLocaleTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/XListResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/MetadataResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/ImapResponseComposerImplTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/QuotaRootResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/base/ByteImapResponseWriter.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/NamespaceResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/ListResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/ListingEncodingUtilsTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/FetchResponseEncoderEnvelopeTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/LSubResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/encode/MailboxStatusResponseEncoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/CopyProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/LSubProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/GetACLProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/MoveProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/SetQuotaProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/SearchProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/StatusResponseTypeMatcher.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/PartialFetchBodyElementTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/MailboxMessageResultUtilsTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/fetch/FetchDataConverterTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/SetACLProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/DeleteACLProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/NamespaceProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/SelectProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaRootProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/SetMetadataProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/AbstractSelectionProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/GetAnnotationProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/base/MailboxEventAnalyserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/base/UidMsnConverterTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/base/SelectedMailboxImplTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/ListRightsProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/CapabilityProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/processor/GetQuotaProcessorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/main/PathConverterTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/main/ImapRequestHandlerAdandonConnectionTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/FetchPartPathDecoderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/main/IdRangeParseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/DecoderUtilsLocaleDateTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/StringMatcherCharacterValidatorTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/ImapRequestLineReaderTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/DecoderUtilsTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserAndParenthesesTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserCharsetTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetMetadataCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/CreateCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/MoveParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/StatusCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserQuotedCharsetTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetAnnotationCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SelectParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SetQuotaCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/FetchCommandParserPartialFetchTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserNotTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SelectCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserOrTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserTopLevelAndTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/AppendCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeyTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/GetQuotaRootParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/NioUtils.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/CopyParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/SearchCommandParserSearchKeySequenceSetTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/decode/parser/StoreCommandParserTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/ImapSessionTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/ImapConfigurationTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/IdRangeTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/ImapCommandTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/request/SearchKeyTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/UidRangeTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/CapabilityTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/BodyFetchElementTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/response/AbstractStatusResponseFactoryTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/message/response/StatusResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/api/TagTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/ImapFixture.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/request/AbstractMailboxSelectionRequestTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/UnpooledStatusResponseFactoryTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/ListRightsResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/FlagsResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/NamespaceResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/ACLResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/QuotaResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/MyRightsResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/QuotaRootResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/imap/message/response/SearchResponseTest.java
  AL    protocols/imap/src/test/java/org/apache/james/mailbox/MessageSequenceNumberTest.java
  AL    protocols/imap/src/test/java/org/apache/james/mailbox/NullableMessageSequenceNumberTest.java
  AL    protocols/imap/pom.xml
 !????? server/README.crypto
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/HeadersDto.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceDTO.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Dequeuer.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueue.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReferenceSerializer.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailQueueName.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/EnqueuedItem.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueFactory.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueManagement.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/EnqueueId.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailWithEnqueueId.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueDeadLetterQueueHealthCheck.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConsumerHealthCheck.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailLoader.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/Enqueuer.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/MailReference.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/RabbitMQMailQueueConfiguration.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/FakeMailQueueView.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/DeleteCondition.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/api/MailQueueView.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDAO.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewStartUpCheck.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationAggregate.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfiguration.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommandHandler.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChanged.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/EventsourcingConfigurationManagement.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommand.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationModule.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTO.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/model/BucketedSlices.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueuedItemWithSlicingContext.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartDAO.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/MailQueueViewBlobReferenceSource.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueBrowser.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/DeletedMailsDAO.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewModule.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoUtil.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartHealthCheck.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueMailStore.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueMailDelete.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueView.java
  AL    server/queue/queue-rabbitmq/src/main/java/org/apache/james/queue/rabbitmq/view/cassandra/ContentStartDAO.java
  B     server/queue/queue-rabbitmq/src/test/resources/json/mail1-legacy.json
  B     server/queue/queue-rabbitmq/src/test/resources/json/mail1.json
  B     server/queue/queue-rabbitmq/src/test/resources/json/mailqueueview/configuration/configuration_changed.json
  B     server/queue/queue-rabbitmq/src/test/resources/json/mail_min.json
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailDTOTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailLoaderTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueDeadLetterQueueHealthCheckTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/EnqueuedItemTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMqMailQueueFactoryTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/MailQueueNameTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/RabbitMQMailQueueConfigurationChangeTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/api/DeleteConditionTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/RabbitMQMailQueueConfigurationTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/ContentStartDAOTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartHealthCheckTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/RegisterConfigurationCommandTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/ConfigurationChangedDTOTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/EventsourcingConfigurationManagementTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/DTOTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/configuration/CassandraMailQueueViewConfigurationTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/BucketedSlicesTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueuedItemWithSlicingContextTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/model/EnqueueIdTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/EnqueuedMailsDaoUtilTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/CassandraMailQueueViewTestFactory.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/BrowseStartDAOTest.java
  AL    server/queue/queue-rabbitmq/src/test/java/org/apache/james/queue/rabbitmq/view/cassandra/DeletedMailsDAOTest.java
  AL    server/queue/queue-rabbitmq/pom.xml
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/Filter.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/Header.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueue.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/FilterStage.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueueFactory.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/PulsarMailQueueConfiguration.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/MailMetadata.scala
  AL    server/queue/queue-pulsar/src/main/scala/org/apache/james/queue/pulsar/EnqueueId.scala
  AL    server/queue/queue-pulsar/src/test/scala/org/apache/james/queue/pulsar/JavaClient.scala
  AL    server/queue/queue-pulsar/src/test/java/org/apache/james/queue/pulsar/PulsarMailQueueTest.java
  AL    server/queue/queue-pulsar/src/test/java/org/apache/james/queue/pulsar/PulsarMailQueueFactoryTest.java
  AL    server/queue/queue-pulsar/pom.xml
  AL    server/queue/queue-activemq/src/main/resources/META-INF/spring/activemq-queue-context.xml
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/EmbeddedActiveMQ.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobStrategy.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQConfiguration.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/FileSystemBlobTransferPolicy.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQSupport.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/MimeMessageBlobMessageSource.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQHealthCheck.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollector.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorImpl.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorNoop.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetricConfiguration.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/metric/ActiveMQMetrics.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactory.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQMailQueueItem.java
  AL    server/queue/queue-activemq/src/main/java/org/apache/james/queue/activemq/ActiveMQCacheableMailQueue.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueBlobTest.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueTest.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQMailQueueFactoryTest.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/ActiveMQHealthCheckTest.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/metric/ActiveMQMetricConfigurationTest.java
  AL    server/queue/queue-activemq/src/test/java/org/apache/james/queue/activemq/metric/ActiveMQMetricCollectorTest.java
  AL    server/queue/queue-activemq/src/reporting-site/site.xml
  AL    server/queue/queue-activemq/pom.xml
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/RawMailQueueItem.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueManagementMBean.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/ManageableMailQueue.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueName.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/RawMailQueueItemDecoratorFactory.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueItemDecoratorFactory.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueue.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailQueueFactory.java
  AL    server/queue/queue-api/src/main/java/org/apache/james/queue/api/MailPrioritySupport.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/Mails.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/ManageableMailQueueFactoryContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedPriorityMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/DelayedManageableMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/PriorityMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueFactoryTest.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricExtension.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueNameTest.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/PriorityManageableMailQueueContract.java
  AL    server/queue/queue-api/src/test/java/org/apache/james/queue/api/MailQueueMetricContract.java
  AL    server/queue/queue-api/src/reporting-site/site.xml
  AL    server/queue/queue-api/pom.xml
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/library/MailQueueManagement.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/library/AbstractMailQueueFactory.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueItem.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/MimeMessageObjectMessageSource.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSMailQueueFactory.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSSupport.java
  AL    server/queue/queue-jms/src/main/java/org/apache/james/queue/jms/JMSCacheableMailQueue.java
  AL    server/queue/queue-jms/src/test/java/org/apache/james/queue/library/AbstractMailQueueFactoryTest.java
  AL    server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/BrokerExtension.java
  AL    server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSCacheableMailQueueFactoryTest.java
  AL    server/queue/queue-jms/src/test/java/org/apache/james/queue/jms/JMSCacheableMailQueueTest.java
  AL    server/queue/queue-jms/src/reporting-site/site.xml
  AL    server/queue/queue-jms/pom.xml
  AL    server/queue/queue-memory/src/main/java/org/apache/james/queue/memory/MemoryMailQueueFactory.java
  AL    server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryCacheableMailQueueTest.java
  AL    server/queue/queue-memory/src/test/java/org/apache/james/queue/memory/MemoryCacheableMailQueueFactoryTest.java
 !????? server/queue/queue-memory/pom.xml
  A     server/apps/memory-app/extensions-jars/apache-mailet-crypto-3.8.1-SNAPSHOT-jar-with-dependencies.jar
  AL    server/apps/memory-app/docker-configuration/webadmin.properties
 !????? server/apps/memory-app/src/main/extensions-jars/README.md
  AL    server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesServerMain.java
  AL    server/apps/memory-app/src/main/java/org/apache/james/MemoryJamesConfiguration.java
  B     server/apps/memory-app/src/main/glowroot/admin.json
  B     server/apps/memory-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/memory-app/src/main/glowroot/plugins/task.json
  B     server/apps/memory-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/memory-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/memory-app/src/main/glowroot/plugins/spooler.json
  B     server/apps/memory-app/src/main/glowroot/plugins/jmap.json
  B     server/apps/memory-app/src/main/glowroot/plugins/imap.json
 !????? server/apps/memory-app/src/main/scripts/james-cli
  AL    server/apps/memory-app/src/test/resources/smtpserver2.xml
  AL    server/apps/memory-app/src/test/resources/listeners.xml
 !????? server/apps/memory-app/src/test/resources/jwt_publickey
  AL    server/apps/memory-app/src/test/resources/dnsservice.xml
  AL    server/apps/memory-app/src/test/resources/lmtpserver.xml
  AL    server/apps/memory-app/src/test/resources/mailetcontainer.xml
  AL    server/apps/memory-app/src/test/resources/imapserver.xml
  AL    server/apps/memory-app/src/test/resources/managesieveserver.xml
  AL    server/apps/memory-app/src/test/resources/domainlist.xml
  AL    server/apps/memory-app/src/test/resources/mailrepositorystore.xml
  AL    server/apps/memory-app/src/test/resources/usersrepository.xml
  B     server/apps/memory-app/src/test/resources/keystore2
  B     server/apps/memory-app/src/test/resources/keystore
  B     server/apps/memory-app/src/test/resources/badAliasKeystore
  AL    server/apps/memory-app/src/test/resources/imapserver2.xml
  AL    server/apps/memory-app/src/test/resources/smtpserver.xml
  AL    server/apps/memory-app/src/test/resources/pop3server.xml
  AL    server/apps/memory-app/src/test/java/org/apache/james/MemoryJamesServerTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/ErrorMailet.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/WebAdminRoutesExtensionTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MyRoute.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/HealthCheckExtensionTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MyStartable.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/GuiceJamesServerTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/StartSequenceTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/UserStartableExtensionTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/DefaultMemoryJamesServerTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/GuiceJamesServerStartUpCheckTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/DisabledSpoolerTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MemoryLdapLocalPartLoginIntegrationTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MemoryJmapJamesServerTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/GuiceLifecycleHeathCheckTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/DisabledGroupExecutionTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/DomainAutodetectionTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MemoryJmapTestRule.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/IMAPIntegrationTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/MyHealthCheck.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/CertificateReloadTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/RCPTCaseSensitivityTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/LmtpIntegrationTest.java
  AL    server/apps/memory-app/src/test/java/org/apache/james/LinshareBlobExportMechanismProvidingTest.java
  AL    server/apps/memory-app/src/assemble/app.xml
  MIT   server/apps/memory-app/src/assemble/license-for-binary.txt
 !????? server/apps/memory-app/src/assemble/README.adoc
 !????? server/apps/memory-app/src/assemble/extensions-jars.txt
  AL    server/apps/memory-app/pom.xml
 !????? server/apps/memory-app/README.md
  AL    server/apps/memory-app/sample-configuration/webadmin.properties
  AL    server/apps/memory-app/sample-configuration/listeners.xml
 !????? server/apps/memory-app/sample-configuration/extensions.properties
  AL    server/apps/memory-app/sample-configuration/dnsservice.xml
 !????? server/apps/memory-app/sample-configuration/deletedMessageVault.properties
  AL    server/apps/memory-app/sample-configuration/mailetcontainer.xml
  AL    server/apps/memory-app/sample-configuration/imapserver.xml
  AL    server/apps/memory-app/sample-configuration/managesieveserver.xml
  AL    server/apps/memory-app/sample-configuration/domainlist.xml
  AL    server/apps/memory-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/memory-app/sample-configuration/jvm.properties
  AL    server/apps/memory-app/sample-configuration/usersrepository.xml
  AL    server/apps/memory-app/sample-configuration/recipientrewritetable.xml
  B     server/apps/memory-app/sample-configuration/keystore
  AL    server/apps/memory-app/sample-configuration/logback.xml
 !????? server/apps/memory-app/sample-configuration/jmap.properties
  AL    server/apps/memory-app/sample-configuration/jmx.properties
  AL    server/apps/memory-app/sample-configuration/smtpserver.xml
  AL    server/apps/memory-app/sample-configuration/pop3server.xml
  AL    server/apps/memory-app/sample-configuration/healthcheck.properties
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/WebAdminHTTPClientUtil.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/WebAdminCli.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainDeleteCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainCreateCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainListCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/AddDomainAliasCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/DomainExistCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/ListDomainAliasCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/domain/RemoveDomainAliasCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/SetGlobalQuotaCountCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaCountCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/DeleteGlobalQuotaCountCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/DeleteGlobalQuotaSizeCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GetGlobalQuotaSizeCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/QuotaCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/SetGlobalQuotaSizeCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GetGlobalQuotaCountCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/quota/GlobalQuotaSizeCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserExistCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserCreateCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserDeleteCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/user/UserListCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxDeleteCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxListCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCreateCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxDeleteAllCommand.java
  AL    server/apps/webadmin-cli/src/main/java/org/apache/james/cli/mailbox/MailboxExistCommand.java
  AL    server/apps/webadmin-cli/src/test/resources/webadmin.properties
  AL    server/apps/webadmin-cli/src/test/resources/listeners.xml
 !????? server/apps/webadmin-cli/src/test/resources/jwt_publickey
  AL    server/apps/webadmin-cli/src/test/resources/dnsservice.xml
  AL    server/apps/webadmin-cli/src/test/resources/lmtpserver.xml
  AL    server/apps/webadmin-cli/src/test/resources/mailetcontainer.xml
  AL    server/apps/webadmin-cli/src/test/resources/imapserver.xml
  AL    server/apps/webadmin-cli/src/test/resources/managesieveserver.xml
 !????? server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
  AL    server/apps/webadmin-cli/src/test/resources/domainlist.xml
  AL    server/apps/webadmin-cli/src/test/resources/mailrepositorystore.xml
  AL    server/apps/webadmin-cli/src/test/resources/usersrepository.xml
 !????? server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
  B     server/apps/webadmin-cli/src/test/resources/keystore
  AL    server/apps/webadmin-cli/src/test/resources/smtpserver.xml
  AL    server/apps/webadmin-cli/src/test/resources/pop3server.xml
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/JwtOptionTest.java
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/MailboxManageTest.java
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/HelpVersionCommandTest.java
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/DomainManageTest.java
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/UserManageTest.java
  AL    server/apps/webadmin-cli/src/test/java/org/apache/james/cli/QuotaManageTest.java
  AL    server/apps/webadmin-cli/pom.xml
 !????? server/apps/webadmin-cli/README.md
 !????? server/apps/webadmin-cli/james-cli
 !????? server/apps/scaling-pulsar-smtp/docker-compose.yml
 !????? server/apps/scaling-pulsar-smtp/README.adoc
  AL    server/apps/scaling-pulsar-smtp/src/main/resources/META-INF/persistence.xml
  AL    server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/Main.java
  AL    server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/SMTPRelayConfiguration.java
  AL    server/apps/scaling-pulsar-smtp/src/main/java/org/apache/james/MailStoreRepositoryModule.java
 !????? server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/listeners.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/dnsservice.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/mailetcontainer.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/domainlist.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/backmailrepositorystore.xml
  B     server/apps/scaling-pulsar-smtp/src/test/resources/keystore
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/smtpserver.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/resources/fakemailrepositorystore.xml
  AL    server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/PulsarExtension.java
  AL    server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/SMTPJamesServerTest.java
  AL    server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/AwsS3BlobStoreExtension.java
  AL    server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/PostgresExtension.java
  AL    server/apps/scaling-pulsar-smtp/src/test/java/org/apache/james/TestingSmtpRelayJamesServerBuilder.java
  AL    server/apps/scaling-pulsar-smtp/pom.xml
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/webadmin.properties
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/dnsservice.xml
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/mailetcontainer.xml
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/domainlist.xml
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/mailrepositorystore.xml
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/usersrepository.xml
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/recipientrewritetable.xml
  B     server/apps/scaling-pulsar-smtp/sample-configuration/keystore
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/james-database.properties
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/jmx.properties
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/smtpserver.xml
 !????? server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
  AL    server/apps/scaling-pulsar-smtp/sample-configuration/healthcheck.properties
 !????? server/apps/spring-app/README.crypto
  AL    server/apps/spring-app/src/main/resources/META-INF/persistence-template.xml
  AL    server/apps/spring-app/src/main/resources/META-INF/persistence.xml
  AL    server/apps/spring-app/src/main/resources/META-INF/jpa-mappings-template.xml
  AL    server/apps/spring-app/src/main/resources/dnsservice.xml
  AL    server/apps/spring-app/src/main/resources/lmtpserver.xml
  AL    server/apps/spring-app/src/main/resources/mailetcontainer.xml
  AL    server/apps/spring-app/src/main/resources/sieverepository.xml
  AL    server/apps/spring-app/src/main/resources/quota.xml
  AL    server/apps/spring-app/src/main/resources/sqlResources.xml
  AL    server/apps/spring-app/src/main/resources/imapserver.xml
  AL    server/apps/spring-app/src/main/resources/managesieveserver.xml
  AL    server/apps/spring-app/src/main/resources/indexer.xml
  AL    server/apps/spring-app/src/main/resources/domainlist.xml
  AL    server/apps/spring-app/src/main/resources/mailrepositorystore.xml
  AL    server/apps/spring-app/src/main/resources/mailbox.xml
 !????? server/apps/spring-app/src/main/resources/log4j2.xml
  AL    server/apps/spring-app/src/main/resources/fetchmail.xml
  AL    server/apps/spring-app/src/main/resources/usersrepository.xml
  AL    server/apps/spring-app/src/main/resources/recipientrewritetable.xml
 !????? server/apps/spring-app/src/main/resources/jmxremote.access
  AL    server/apps/spring-app/src/main/resources/setenv.sh
  AL    server/apps/spring-app/src/main/resources/james-database.properties
  AL    server/apps/spring-app/src/main/resources/jetm-monitoring.xml
  AL    server/apps/spring-app/src/main/resources/jmx.properties
  AL    server/apps/spring-app/src/main/resources/smtpserver.xml
  AL    server/apps/spring-app/src/main/resources/pop3server.xml
 !????? server/apps/spring-app/src/main/resources/jmxremote.password
  N     server/apps/spring-app/src/main/resources/lib/README.txt
  N     server/apps/spring-app/src/main/app/sieve/README.txt
  AL    server/apps/spring-app/src/main/app/bin/setenv.bat
  AL    server/apps/spring-app/src/main/app/bin/setenv.sh
  AL    server/apps/spring-app/src/main/appended-resources/supplemental-models.xml
  AL    server/apps/spring-app/src/main/java/org/apache/james/app/spring/JamesAppSpringMain.java
  AL    server/apps/spring-app/src/main/webapp/WEB-INF/web.xml
 !????? server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
  MIT   server/apps/spring-app/src/main/licensing/app/license-for-binary.txt
  AL    server/apps/spring-app/src/main/licensing/app/licensing.xml
  N     server/apps/spring-app/src/main/licensing/war/NOTICE
  AL    server/apps/spring-app/src/main/licensing/war/licensing.xml
  N     server/apps/spring-app/src/main/licensing/war/LICENSE
  AL    server/apps/spring-app/src/test/resources/quota.xml
  AL    server/apps/spring-app/src/test/resources/imapserver.xml
  AL    server/apps/spring-app/src/test/resources/managesieveserver.xml
  AL    server/apps/spring-app/src/test/resources/smtpserver.xml
  AL    server/apps/spring-app/src/test/resources/pop3server.xml
  AL    server/apps/spring-app/src/test/java/org/apache/james/app/spring/JamesAppSpringMainTest.java
  AL    server/apps/spring-app/src/test/java/org/apache/james/app/spring/JamesSpringContextTest.java
  AL    server/apps/spring-app/src/assemble/app.xml
  AL    server/apps/spring-app/src/reporting-site/site.xml
  N     server/apps/spring-app/src/debian/control/copyright
 !????? server/apps/spring-app/src/debian/control/control
  AL    server/apps/spring-app/pom.xml
  N     server/apps/spring-app/NOTICE
  N     server/apps/spring-app/LICENSE
  AL    server/apps/distributed-pop3-app/docker-configuration/webadmin.properties
 !????? server/apps/distributed-pop3-app/docker-configuration/jvm.properties
 !????? server/apps/distributed-pop3-app/docker-compose.yml
 !????? server/apps/distributed-pop3-app/README.adoc
 !????? server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/Pop3FixInconsistenciesTaskSerializationModule.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/DistributedPop3Module.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/modules/Pop3FixInconsistenciesWebAdminModule.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesConfiguration.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/RandomUidProvider.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/NoACLMapper.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/mailbox/RandomModSeqProvider.java
  AL    server/apps/distributed-pop3-app/src/main/java/org/apache/james/DistributedPOP3JamesServerMain.java
  B     server/apps/distributed-pop3-app/src/main/glowroot/admin.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/blobstore.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/task.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/distributed-pop3-app/src/main/glowroot/plugins/spooler.json
 !????? server/apps/distributed-pop3-app/src/main/scripts/james-cli
 !????? server/apps/distributed-pop3-app/src/test/resources/attachment.eml
  AL    server/apps/distributed-pop3-app/src/test/resources/listeners.xml
  AL    server/apps/distributed-pop3-app/src/test/resources/dnsservice.xml
  AL    server/apps/distributed-pop3-app/src/test/resources/lmtpserver.xml
  AL    server/apps/distributed-pop3-app/src/test/resources/mailetcontainer.xml
 !????? server/apps/distributed-pop3-app/src/test/resources/big.eml
  AL    server/apps/distributed-pop3-app/src/test/resources/domainlist.xml
  AL    server/apps/distributed-pop3-app/src/test/resources/mailrepositorystore.xml
  B     server/apps/distributed-pop3-app/src/test/resources/keystore
 !????? server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
  AL    server/apps/distributed-pop3-app/src/test/resources/smtpserver.xml
  AL    server/apps/distributed-pop3-app/src/test/resources/pop3server.xml
 !????? server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
  AL    server/apps/distributed-pop3-app/src/test/java/org/apache/james/Pop3ServerContract.java
  AL    server/apps/distributed-pop3-app/src/test/java/org/apache/james/DistributedPOP3ServerTest.java
  AL    server/apps/distributed-pop3-app/pom.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/webadmin.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/listeners.xml
 !????? server/apps/distributed-pop3-app/sample-configuration/extensions.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/dnsservice.xml
 !????? server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/lmtpserver.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/mailetcontainer.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/opensearch.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/domainlist.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/distributed-pop3-app/sample-configuration/jvm.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/usersrepository.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/recipientrewritetable.xml
 !????? server/apps/distributed-pop3-app/sample-configuration/logback.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/tika.properties
 !????? server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
 !????? server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/jmx.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/smtpserver.xml
  AL    server/apps/distributed-pop3-app/sample-configuration/pop3server.xml
 !????? server/apps/distributed-pop3-app/sample-configuration/blob.properties
 !????? server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
  AL    server/apps/distributed-pop3-app/sample-configuration/healthcheck.properties
 !????? server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
  AL    server/apps/jpa-smtp-app/docker-configuration/webadmin.properties
 !????? server/apps/jpa-smtp-app/docker-compose.yml
 !????? server/apps/jpa-smtp-app/README.adoc
 !????? server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
  AL    server/apps/jpa-smtp-app/src/main/resources/META-INF/persistence.xml
  AL    server/apps/jpa-smtp-app/src/main/resources/defaultMailetContainer.xml
  AL    server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesConfiguration.java
  AL    server/apps/jpa-smtp-app/src/main/java/org/apache/james/JPAJamesServerMain.java
  B     server/apps/jpa-smtp-app/src/main/glowroot/admin.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/task.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/spooler.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/jmap.json
  B     server/apps/jpa-smtp-app/src/main/glowroot/plugins/imap.json
 !????? server/apps/jpa-smtp-app/src/main/scripts/james-cli
  AL    server/apps/jpa-smtp-app/src/test/resources/dnsservice.xml
  AL    server/apps/jpa-smtp-app/src/test/resources/mailetcontainer.xml
  AL    server/apps/jpa-smtp-app/src/test/resources/managesieveserver.xml
  AL    server/apps/jpa-smtp-app/src/test/resources/domainlist.xml
  AL    server/apps/jpa-smtp-app/src/test/resources/mailrepositorystore.xml
  B     server/apps/jpa-smtp-app/src/test/resources/keystore
  AL    server/apps/jpa-smtp-app/src/test/resources/smtpserver.xml
  AL    server/apps/jpa-smtp-app/src/test/resources/fakemailrepositorystore.xml
  AL    server/apps/jpa-smtp-app/src/test/java/org/apache/james/JPAJamesServerTest.java
  AL    server/apps/jpa-smtp-app/src/test/java/org/apache/james/mariadb/JPAMariaDBJamesServerTest.java
  AL    server/apps/jpa-smtp-app/src/test/java/org/apache/james/mariadb/TestJPAMariaDBConfigurationModule.java
  AL    server/apps/jpa-smtp-app/src/assemble/app.xml
  MIT   server/apps/jpa-smtp-app/src/assemble/license-for-binary.txt
 !????? server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
  AL    server/apps/jpa-smtp-app/pom.xml
  AL    server/apps/jpa-smtp-app/conf/webadmin.properties
 !????? server/apps/jpa-smtp-app/conf/extensions.properties
  AL    server/apps/jpa-smtp-app/conf/james-database-mariadb.properties
  AL    server/apps/jpa-smtp-app/conf/dnsservice.xml
  AL    server/apps/jpa-smtp-app/conf/mailetcontainer.xml
  AL    server/apps/jpa-smtp-app/conf/domainlist.xml
  AL    server/apps/jpa-smtp-app/conf/mailrepositorystore.xml
 !????? server/apps/jpa-smtp-app/conf/jvm.properties
  AL    server/apps/jpa-smtp-app/conf/usersrepository.xml
  AL    server/apps/jpa-smtp-app/conf/recipientrewritetable.xml
  B     server/apps/jpa-smtp-app/conf/keystore
 !????? server/apps/jpa-smtp-app/conf/logback.xml
  AL    server/apps/jpa-smtp-app/conf/james-database.properties
  AL    server/apps/jpa-smtp-app/conf/jmx.properties
  AL    server/apps/jpa-smtp-app/conf/smtpserver.xml
  AL    server/apps/jpa-smtp-app/conf/healthcheck.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/webadmin.properties
 !????? server/apps/jpa-smtp-app/sample-configuration/extensions.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/james-database-mariadb.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/dnsservice.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/mailetcontainer.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/domainlist.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/jpa-smtp-app/sample-configuration/jvm.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/usersrepository.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/recipientrewritetable.xml
 !????? server/apps/jpa-smtp-app/sample-configuration/logback.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/james-database.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/jmx.properties
  AL    server/apps/jpa-smtp-app/sample-configuration/smtpserver.xml
  AL    server/apps/jpa-smtp-app/sample-configuration/healthcheck.properties
 !????? server/apps/conf/jmxremote.access
 !????? server/apps/conf/jmxremote.password
 !????? server/apps/demo/initialdata.sh
 !????? server/apps/demo/Dockerfile
  AL    server/apps/demo/imapserver.xml
 !????? server/apps/demo/startup.sh
  AL    server/apps/demo/smtpserver.xml
  AL    server/apps/demo/pop3server.xml
 !????? server/apps/cli/README.adoc
  AL    server/apps/cli/src/main/java/org/apache/james/cli/ServerCmd.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/type/CmdType.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/exceptions/MissingCommandException.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/exceptions/InvalidArgumentNumberException.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/exceptions/UnrecognizedCommandException.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/exceptions/JamesCliException.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxConnection.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxSieveProbe.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxMailboxProbe.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxDataProbe.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxQuotaProbe.java
  AL    server/apps/cli/src/main/java/org/apache/james/cli/probe/impl/JmxProbe.java
  AL    server/apps/cli/src/test/java/org/apache/james/cli/type/CmdTypeTest.java
  AL    server/apps/cli/src/test/java/org/apache/james/cli/ServerCmdTest.java
  AL    server/apps/cli/src/assemble/app.xml
  MIT   server/apps/cli/src/assemble/license-for-binary.txt
  AL    server/apps/cli/src/reporting-site/site.xml
  AL    server/apps/cli/pom.xml
  AL    server/apps/distributed-app/docker-configuration/webadmin.properties
 !????? server/apps/distributed-app/docker-configuration/jvm.properties
 !????? server/apps/distributed-app/docker-compose.yml
 !????? server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
 !????? server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
 !????? server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/service.yaml
 !????? server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
 !????? server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
 !????? server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
 !????? server/apps/distributed-app/helm-chart/james/Chart.yaml
 !????? server/apps/distributed-app/helm-chart/james/values.yaml
  B     server/apps/distributed-app/helm-chart/james/values.schema.json
 !????? server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
  AL    server/apps/distributed-app/helm-chart/james/configs/listeners.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/dnsservice.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/imapserver.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/opensearch.properties
  AL    server/apps/distributed-app/helm-chart/james/configs/domainlist.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/mailrepositorystore.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/usersrepository.xml
  AL    server/apps/distributed-app/helm-chart/james/configs/recipientrewritetable.xml
 !????? server/apps/distributed-app/helm-chart/james/configs/logback.xml
 !????? server/apps/distributed-app/helm-chart/james/configs/jmap.properties
 !????? server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
  AL    server/apps/distributed-app/helm-chart/james/configs/jmx.properties
  AL    server/apps/distributed-app/helm-chart/james/configs/smtpserver.xml
 !????? server/apps/distributed-app/helm-chart/james/configs/blob.properties
 !????? server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
 !????? server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
 !????? server/apps/distributed-app/helm-chart/README.md
 !????? server/apps/distributed-app/docker-compose-with-pulsar.yml
 !????? server/apps/distributed-app/README.adoc
 !????? server/apps/distributed-app/src/main/extensions-jars/README.md
  AL    server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesConfiguration.java
  AL    server/apps/distributed-app/src/main/java/org/apache/james/MailQueueChoice.java
  AL    server/apps/distributed-app/src/main/java/org/apache/james/CassandraRabbitMQJamesServerMain.java
  B     server/apps/distributed-app/src/main/glowroot/admin.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/blobstore.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/task.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/spooler.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/jmap.json
  B     server/apps/distributed-app/src/main/glowroot/plugins/imap.json
 !????? server/apps/distributed-app/src/main/scripts/james-cli
  AL    server/apps/distributed-app/src/test/resources/listeners.xml
  AL    server/apps/distributed-app/src/test/resources/dnsservice.xml
  AL    server/apps/distributed-app/src/test/resources/lmtpserver.xml
  AL    server/apps/distributed-app/src/test/resources/mailetcontainer.xml
  AL    server/apps/distributed-app/src/test/resources/imapserver.xml
  AL    server/apps/distributed-app/src/test/resources/managesieveserver.xml
  AL    server/apps/distributed-app/src/test/resources/domainlist.xml
  AL    server/apps/distributed-app/src/test/resources/mailrepositorystore.xml
  B     server/apps/distributed-app/src/test/resources/keystore
 !????? server/apps/distributed-app/src/test/resources/batchsizes.properties
  AL    server/apps/distributed-app/src/test/resources/smtpserver.xml
  AL    server/apps/distributed-app/src/test/resources/pop3server.xml
 !????? server/apps/distributed-app/src/test/resources/rabbitmq.properties
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQJamesConfigurationTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQJamesServerFixture.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreMutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQAwsS3JmapTestRule.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCacheImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQJamesServerReprocessingTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithEncryptedBlobStoreMutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraMessageOperationsContract.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraPassThroughBlobStoreImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithScanningSearchImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/modules/DockerRabbitMQRule.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/modules/TestRabbitMQModule.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/modules/RabbitMQExtension.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/modules/AwsS3BlobStoreExtension.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationValidationStartUpCheckTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/NamespaceConfigurationTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithEncryptedBlobStoreImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQJamesServerWithRetryConnectionTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCassandraDeduplicationBlobStoreMutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithScanningSearchMutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/RabbitMQDisabledTasksTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraCacheQueryTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraPulsarJamesServerTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithDefaultAwsS3MutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithDefaultAwsS3ImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLegacyQuotaJamesServerTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithoutMailQueueViewImmutableTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/CassandraRabbitMQLdapJmapJamesServerTest.java
  AL    server/apps/distributed-app/src/test/java/org/apache/james/WithCacheMutableTest.java
  AL    server/apps/distributed-app/src/assemble/app.xml
  MIT   server/apps/distributed-app/src/assemble/license-for-binary.txt
 !????? server/apps/distributed-app/src/assemble/extensions-jars.txt
  AL    server/apps/distributed-app/pom.xml
  AL    server/apps/distributed-app/sample-configuration/webadmin.properties
  AL    server/apps/distributed-app/sample-configuration/listeners.xml
 !????? server/apps/distributed-app/sample-configuration/extensions.properties
  AL    server/apps/distributed-app/sample-configuration/dnsservice.xml
 !????? server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
  AL    server/apps/distributed-app/sample-configuration/lmtpserver.xml
  AL    server/apps/distributed-app/sample-configuration/mailetcontainer.xml
 !????? server/apps/distributed-app/sample-configuration/queue-pulsar.properties
 !????? server/apps/distributed-app/sample-configuration/pulsar.properties
  AL    server/apps/distributed-app/sample-configuration/imapserver.xml
  AL    server/apps/distributed-app/sample-configuration/managesieveserver.xml
  AL    server/apps/distributed-app/sample-configuration/opensearch.properties
  AL    server/apps/distributed-app/sample-configuration/domainlist.xml
  AL    server/apps/distributed-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/distributed-app/sample-configuration/jvm.properties
  AL    server/apps/distributed-app/sample-configuration/usersrepository.xml
 !????? server/apps/distributed-app/sample-configuration/queue.properties
  AL    server/apps/distributed-app/sample-configuration/recipientrewritetable.xml
 !????? server/apps/distributed-app/sample-configuration/logback.xml
  AL    server/apps/distributed-app/sample-configuration/tika.properties
 !????? server/apps/distributed-app/sample-configuration/jmap.properties
 !????? server/apps/distributed-app/sample-configuration/cassandra-driver.conf
 !????? server/apps/distributed-app/sample-configuration/batchsizes.properties
  AL    server/apps/distributed-app/sample-configuration/jmx.properties
  AL    server/apps/distributed-app/sample-configuration/smtpserver.xml
  AL    server/apps/distributed-app/sample-configuration/pop3server.xml
 !????? server/apps/distributed-app/sample-configuration/blob.properties
 !????? server/apps/distributed-app/sample-configuration/cassandra.properties
  AL    server/apps/distributed-app/sample-configuration/healthcheck.properties
 !????? server/apps/distributed-app/sample-configuration/rabbitmq.properties
 !????? server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
 !????? server/apps/distributed-app/docs/ui-overrides/img/james.svg
 !????? server/apps/distributed-app/docs/modules/ROOT/nav.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/architecture/implemented-standards.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/architecture/specialized-instances.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/architecture/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/architecture/consistency-model.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/objectives.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/metrics.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/security.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/migrating.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/performanceChecklist.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/logging.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/cassandra-migration.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/operate/cli.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/db-benchmark.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/james-benchmark.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/provision.sh
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/mail-processing.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/smtp-hooks.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/imap.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/webadmin-routes.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/mailbox-listeners.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/extending/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-secrets.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-logsMetrics.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/run-docker.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/run-kubernetes.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-values.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/run-java.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-checklist.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-events.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/matchers.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailets.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/batchsizes.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp-hooks.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/domainlist.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/queue.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/dsn.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmx.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/cassandra.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/tika.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/jvm.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmap.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailrepositorystore.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-contacts.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/search.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/blobstore.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/extensions.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/sieve.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/listeners.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/imap.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/ssl.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailetcontainer.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/recipientrewritetable.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/rabbitmq.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/spam.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/remote-delivery-error-handling.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/index.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/dns.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/redis.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/healthcheck.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/usersrepository.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/opensearch.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/pages/configure/pop3.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsOverQuota.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasHeaderWithPrefix.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ManageSieveMailet.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AddFooter.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/FileRegexMatcher.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AtMostPriority.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientToLowerCase.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Expires.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AmqpForwardAttribute.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/LogMessage.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ClamAVScan.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesToMimeHeaders.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeader.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsNull.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SerialiseToHTTP.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ClassifyBounce.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMESigned.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SubjectIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ToPlainText.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/WithStorageDirective.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMEEncrypted.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AtMost.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ExtractMDNOriginalJMAPMessageId.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientRewriteTable.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsLocal.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeaderByPrefix.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ConvertTo7Bit.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HostIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/UserIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/XOriginatingIpInNetwork.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ICalendarParser.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasPriority.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/LocalDelivery.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/NESSpamCheck.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SPF.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/TextCalendarBodyToAttachment.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/WithPriority.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SpamAssassin.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Forward.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientDomainIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMTPIsAuthNetwork.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValueRegex.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ReplaceContent.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrInNetwork.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/NotifyPostmaster.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HeadersToHTTP.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/CommandForListserv.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RandomStoring.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/PostmasterAlias.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMIMECheckSignature.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecoverAttachment.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/StripAttachment.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/DKIMSign.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/TooManyRecipients.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoveAllMailAttributes.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ICALToHeader.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeAnySubPart.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AttachmentFileNameIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/MimeDecodingMailet.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsX509CertificateSubject.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Bounce.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/WrapText.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/DKIMVerify.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsSenderInRRTLoop.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SetMimeHeader.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Redirect.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RelayLimit.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ICALToJsonAttribute.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/TooManyLines.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsSingleRecipient.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ToRepository.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderInFakeDomain.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Null.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryPermanentError.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDelivery.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ServerTime.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AddSubjectPrefix.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMailAttribute.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Resend.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasException.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasHabeasWarrantMark.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/UnwrapText.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderDomainRepository.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/VacationMailet.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasAttachment.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/All.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/CommandListservMatcher.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Sieve.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ToProcessor.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesListToMimeHeaders.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/FetchedFrom.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HostIsLocal.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SetMailAttribute.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeParameter.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrNotInNetwork.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AtLeastPriority.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ContactExtractor.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/Sign.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValue.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/DSNBounce.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDeliveryFailedWithSMTPCode.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttribute.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderFolder.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIsLocal.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/CompareNumericHeaderValue.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsRegex.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/NotifySender.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMIMESign.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SubjectStartsWith.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderDomainIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryTemporaryError.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SentByMailet.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/DLP.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsLocal.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/FromRepository.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/InSpammerBlacklist.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/IsMarkedAsSpam.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthSuccessful.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasHeader.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeType.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/OnlyText.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/UseHeaderRecipients.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SentByJmap.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/ICSSanitizer.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsRegex.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AddHabeasWarrantMark.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/MetricsMailet.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthUserIs.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/AddDeliveredToHeader.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SMIMEDecrypt.adoc
 !????? server/apps/distributed-app/docs/modules/ROOT/partials/SizeGreaterThan.adoc
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/server-components.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/IMAP_board.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/james-hexagons-extensions.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_2.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/storage.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/apache-james-lens.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/james-imap-base-performance.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/webAdmin.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/cassandra_stress_test_result_1.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/BlobStore.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/remote-delivery-error-handling.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/specialized-instances.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/MATCHER.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/JMAP_board.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/preload-dashboards.png
  B     server/apps/distributed-app/docs/modules/ROOT/assets/images/JVM_board.png
 !????? server/apps/distributed-app/docs/README.md
 !????? server/apps/distributed-app/docs/antora-playbook-local.yml
 !????? server/apps/distributed-app/docs/antora.yml
 !????? server/apps/cli-integration-tests/src/test/resources/jwt_publickey
  AL    server/apps/cli-integration-tests/src/test/resources/dnsservice.xml
  AL    server/apps/cli-integration-tests/src/test/resources/lmtpserver.xml
  AL    server/apps/cli-integration-tests/src/test/resources/mailetcontainer.xml
  AL    server/apps/cli-integration-tests/src/test/resources/imapserver.xml
  AL    server/apps/cli-integration-tests/src/test/resources/managesieveserver.xml
  AL    server/apps/cli-integration-tests/src/test/resources/mailrepositorystore.xml
  AL    server/apps/cli-integration-tests/src/test/resources/usersrepository.xml
  AL    server/apps/cli-integration-tests/src/test/resources/conf/jmx.properties
  AL    server/apps/cli-integration-tests/src/test/resources/smtpserver.xml
  AL    server/apps/cli-integration-tests/src/test/resources/pop3server.xml
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/MailboxCommandsIntegrationTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/QuotaCommandsIntegrationTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/util/OutputCapture.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/util/OutputCaptureTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/ReindexCommandIntegrationTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/DataCommandsIntegrationTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/SieveQuotaCommandsIntegrationTest.java
  AL    server/apps/cli-integration-tests/src/test/java/org/apache/james/cli/JmxSecurityServerIntegrationTest.java
  AL    server/apps/cli-integration-tests/pom.xml
  AL    server/apps/cassandra-app/docker-configuration/webadmin.properties
 !????? server/apps/cassandra-app/docker-configuration/jvm.properties
 !????? server/apps/cassandra-app/docker-compose.yml
 !????? server/apps/cassandra-app/README.adoc
 !????? server/apps/cassandra-app/src/main/extensions-jars/README.md
  AL    server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerConfiguration.java
  AL    server/apps/cassandra-app/src/main/java/org/apache/james/CassandraBlobStoreModule.java
  AL    server/apps/cassandra-app/src/main/java/org/apache/james/BlobStoreConfiguration.java
  AL    server/apps/cassandra-app/src/main/java/org/apache/james/CassandraJamesServerMain.java
  AL    server/apps/cassandra-app/src/main/java/org/apache/james/BlobStoreModulesChooser.java
  B     server/apps/cassandra-app/src/main/glowroot/admin.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/blobstore.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/task.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/spooler.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/jmap.json
  B     server/apps/cassandra-app/src/main/glowroot/plugins/imap.json
 !????? server/apps/cassandra-app/src/main/scripts/james-cli
  AL    server/apps/cassandra-app/src/test/resources/listeners.xml
  AL    server/apps/cassandra-app/src/test/resources/dnsservice.xml
  AL    server/apps/cassandra-app/src/test/resources/lmtpserver.xml
  AL    server/apps/cassandra-app/src/test/resources/mailetcontainer.xml
  AL    server/apps/cassandra-app/src/test/resources/imapserver.xml
  AL    server/apps/cassandra-app/src/test/resources/managesieveserver.xml
  AL    server/apps/cassandra-app/src/test/resources/domainlist.xml
 !????? server/apps/cassandra-app/src/test/resources/ldif-files/populate.ldif
  AL    server/apps/cassandra-app/src/test/resources/mailrepositorystore.xml
  B     server/apps/cassandra-app/src/test/resources/keystore
 !????? server/apps/cassandra-app/src/test/resources/batchsizes.properties
  AL    server/apps/cassandra-app/src/test/resources/smtpserver.xml
  AL    server/apps/cassandra-app/src/test/resources/pop3server.xml
  AL    server/apps/cassandra-app/src/test/resources/fakemailrepositorystore.xml
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/KeyspaceCreationTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/TikaExtension.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/JamesServerConcreteContract.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/DefaultCassandraJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/WithCassandraBlobStoreImmutableTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLdapJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLdapJmapJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/MailsShouldBeWellReceivedConcreteContract.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CacheSessionTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/WithCassandraBlobStoreTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/DockerOpenSearchExtension.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraWithOpenSearchDisabled.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/AuthenticatedCassandraJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestDockerOpenSearchModule.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/modules/TestTikaModule.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheckTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraDuplicatingJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraExtension.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraWithTikaTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/TestingDistributedJamesServerBuilder.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraLegacyQuotaJamesServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraNodeConfTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraMailRepositoryIntegrationTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/DockerOpenSearchRule.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/JamesWithNonCompatibleElasticSearchServerTest.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/CassandraJmapTestRule.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/DockerCassandraRule.java
  AL    server/apps/cassandra-app/src/test/java/org/apache/james/JamesServerWithRetryConnectionTest.java
  AL    server/apps/cassandra-app/src/assemble/app.xml
  MIT   server/apps/cassandra-app/src/assemble/license-for-binary.txt
 !????? server/apps/cassandra-app/src/assemble/extensions-jars.txt
  AL    server/apps/cassandra-app/pom.xml
  AL    server/apps/cassandra-app/sample-configuration/webadmin.properties
  AL    server/apps/cassandra-app/sample-configuration/listeners.xml
 !????? server/apps/cassandra-app/sample-configuration/extensions.properties
  AL    server/apps/cassandra-app/sample-configuration/dnsservice.xml
 !????? server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
  AL    server/apps/cassandra-app/sample-configuration/lmtpserver.xml
  AL    server/apps/cassandra-app/sample-configuration/mailetcontainer.xml
  AL    server/apps/cassandra-app/sample-configuration/imapserver.xml
  AL    server/apps/cassandra-app/sample-configuration/managesieveserver.xml
  AL    server/apps/cassandra-app/sample-configuration/opensearch.properties
  AL    server/apps/cassandra-app/sample-configuration/domainlist.xml
  AL    server/apps/cassandra-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/cassandra-app/sample-configuration/jvm.properties
  AL    server/apps/cassandra-app/sample-configuration/usersrepository.xml
  AL    server/apps/cassandra-app/sample-configuration/recipientrewritetable.xml
 !????? server/apps/cassandra-app/sample-configuration/logback.xml
  AL    server/apps/cassandra-app/sample-configuration/tika.properties
 !????? server/apps/cassandra-app/sample-configuration/jmap.properties
 !????? server/apps/cassandra-app/sample-configuration/cassandra-driver.conf
 !????? server/apps/cassandra-app/sample-configuration/batchsizes.properties
  AL    server/apps/cassandra-app/sample-configuration/jmx.properties
  AL    server/apps/cassandra-app/sample-configuration/smtpserver.xml
  AL    server/apps/cassandra-app/sample-configuration/pop3server.xml
 !????? server/apps/cassandra-app/sample-configuration/activemq.properties
 !????? server/apps/cassandra-app/sample-configuration/blob.properties
 !????? server/apps/cassandra-app/sample-configuration/cassandra.properties
  AL    server/apps/cassandra-app/sample-configuration/healthcheck.properties
  AL    server/apps/jpa-app/docker-configuration/webadmin.properties
 !????? server/apps/jpa-app/docker-compose.yml
 !????? server/apps/jpa-app/README.adoc
 !????? server/apps/jpa-app/src/main/extensions-jars/README.md
  AL    server/apps/jpa-app/src/main/resources/META-INF/persistence.xml
  AL    server/apps/jpa-app/src/main/resources/defaultMailetContainer.xml
  AL    server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesConfiguration.java
  AL    server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
  B     server/apps/jpa-app/src/main/glowroot/admin.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/smtp.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/task.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/mailboxListener.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/pop3.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/spooler.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/jmap.json
  B     server/apps/jpa-app/src/main/glowroot/plugins/imap.json
 !????? server/apps/jpa-app/src/main/scripts/james-cli
  AL    server/apps/jpa-app/src/test/resources/dnsservice.xml
  AL    server/apps/jpa-app/src/test/resources/lmtpserver.xml
  AL    server/apps/jpa-app/src/test/resources/mailetcontainer.xml
  AL    server/apps/jpa-app/src/test/resources/imapserver.xml
  AL    server/apps/jpa-app/src/test/resources/managesieveserver.xml
  AL    server/apps/jpa-app/src/test/resources/domainlist.xml
  AL    server/apps/jpa-app/src/test/resources/mailrepositorystore.xml
  B     server/apps/jpa-app/src/test/resources/keystore
  AL    server/apps/jpa-app/src/test/resources/smtpserver.xml
  AL    server/apps/jpa-app/src/test/resources/pop3server.xml
  AL    server/apps/jpa-app/src/test/resources/fakemailrepositorystore.xml
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JamesServerConcreteContract.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerWithNoDatabaseAuthenticaticationSqlValidationTest.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerWithAuthenticatedDatabaseSqlValidationTest.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JamesCapabilitiesServerTest.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerWithSqlValidationTest.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JPAJamesServerTest.java
  AL    server/apps/jpa-app/src/test/java/org/apache/james/JPAWithLDAPJamesServerTest.java
  AL    server/apps/jpa-app/src/assemble/app.xml
  MIT   server/apps/jpa-app/src/assemble/license-for-binary.txt
 !????? server/apps/jpa-app/src/assemble/extensions-jars.txt
  AL    server/apps/jpa-app/pom.xml
  B     server/apps/jpa-app/keystore
  AL    server/apps/jpa-app/sample-configuration/webadmin.properties
  AL    server/apps/jpa-app/sample-configuration/listeners.xml
 !????? server/apps/jpa-app/sample-configuration/extensions.properties
  AL    server/apps/jpa-app/sample-configuration/james-database-mariadb.properties
 !????? server/apps/jpa-app/sample-configuration/jwt_publickey
  AL    server/apps/jpa-app/sample-configuration/dnsservice.xml
  AL    server/apps/jpa-app/sample-configuration/lmtpserver.xml
  AL    server/apps/jpa-app/sample-configuration/mailetcontainer.xml
  AL    server/apps/jpa-app/sample-configuration/imapserver.xml
  AL    server/apps/jpa-app/sample-configuration/managesieveserver.xml
  AL    server/apps/jpa-app/sample-configuration/domainlist.xml
  AL    server/apps/jpa-app/sample-configuration/mailrepositorystore.xml
 !????? server/apps/jpa-app/sample-configuration/jvm.properties
  AL    server/apps/jpa-app/sample-configuration/usersrepository.xml
  AL    server/apps/jpa-app/sample-configuration/recipientrewritetable.xml
 !????? server/apps/jpa-app/sample-configuration/logback.xml
  AL    server/apps/jpa-app/sample-configuration/james-database.properties
  AL    server/apps/jpa-app/sample-configuration/jmx.properties
  AL    server/apps/jpa-app/sample-configuration/smtpserver.xml
  AL    server/apps/jpa-app/sample-configuration/pop3server.xml
  AL    server/apps/jpa-app/sample-configuration/healthcheck.properties
  A     server/apps/jpa-app/mariadb-java-client-2.7.2.jar
  AL    server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreFactory.java
  AL    server/blob/blob-memory/src/main/java/org/apache/james/blob/memory/MemoryBlobStoreDAO.java
  AL    server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreDAOTest.java
  AL    server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreTest.java
  AL    server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStorePassThroughTest.java
  AL    server/blob/blob-memory/src/test/java/org/apache/james/blob/memory/MemoryBlobStoreGCAlgorithmTest.java
  AL    server/blob/blob-memory/pom.xml
  AL    server/blob/blob-common/src/main/java/org/apache/james/blob/api/Store.java
  AL    server/blob/blob-common/pom.xml
  AL    server/blob/blob-file/src/main/java/org/apache/james/blob/file/FileBlobStoreDAO.java
  AL    server/blob/blob-file/src/main/java/org/apache/james/blob/file/FileBlobStoreFactory.java
  AL    server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreTest.java
  AL    server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStorePassThroughTest.java
  AL    server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreGCAlgorithmTest.java
  AL    server/blob/blob-file/src/test/java/org/apache/james/blob/file/FileBlobStoreDAOTest.java
  AL    server/blob/blob-file/pom.xml
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStoreDAO.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobId.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectNotFoundException.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStorageHealthCheck.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobPartsId.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobReferenceSource.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobType.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStoreIOException.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/HashBlobId.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/ObjectStoreException.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/MetricableBlobStore.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BlobStore.java
  AL    server/blob/blob-api/src/main/java/org/apache/james/blob/api/BucketName.java
  B     server/blob/blob-api/src/test/resources/shattered-2.pdf
  B     server/blob/blob-api/src/test/resources/shattered-1.pdf
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobTypeTest.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeleteBlobStoreDAOContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/TestBlobId.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/MetricableBlobStoreContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketNameTest.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeduplicationBlobStoreContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/HashBlobIdTest.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BucketBlobStoreDAOContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/DeleteBlobStoreContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/ReadSaveBlobStoreDAOContract.java
  AL    server/blob/blob-api/src/test/java/org/apache/james/blob/api/BlobStoreDAOFixture.java
  AL    server/blob/blob-api/pom.xml
  AL    server/blob/blob-export-file/src/main/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanism.java
  AL    server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/LocalFileBlobExportMechanismTest.java
  AL    server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtensionTest.java
  AL    server/blob/blob-export-file/src/test/java/org/apache/james/blob/export/file/FileSystemExtension.java
  AL    server/blob/blob-export-file/pom.xml
  AL    server/blob/pom.xml
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraDefaultBucketDAO.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobModule.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAO.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBucketDAO.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/BlobTables.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraCacheConfiguration.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/BlobStoreCache.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CachedBlobStore.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCache.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/cache/CassandraBlobCacheModule.java
  AL    server/blob/blob-cassandra/src/main/java/org/apache/james/blob/cassandra/CassandraBlobStoreFactory.java
 !????? server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBucketDAOTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreClOneTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraDefaultBucketDAOTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreContract.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreDAOTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraPassTroughBlobStoreTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CachedBlobStoreTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraCacheConfigurationTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/BlobStoreCacheContract.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/cache/CassandraBlobStoreCacheTest.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreFixture.java
  AL    server/blob/blob-cassandra/src/test/java/org/apache/james/blob/cassandra/CassandraBlobStoreTest.java
  AL    server/blob/blob-cassandra/pom.xml
  AL    server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/PassThroughBlobStore.scala
  AL    server/blob/blob-storage-strategy/src/main/scala/org/apache/james/server/blob/deduplication/DeDuplicationBlobStore.scala
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/GenerationAwareBlobId.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobReferenceAggregate.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BloomFilterGCAlgorithm.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/StorageStrategy.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTaskAdditionalInformationDTO.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTaskDTO.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobGCTask.java
  AL    server/blob/blob-storage-strategy/src/main/java/org/apache/james/server/blob/deduplication/BlobStoreFactory.java
  B     server/blob/blob-storage-strategy/src/test/resources/json/blobGC-legacy.task.json
  B     server/blob/blob-storage-strategy/src/test/resources/json/blobGC.additionalInformation.json
  B     server/blob/blob-storage-strategy/src/test/resources/json/blobGC.task.json
  B     server/blob/blob-storage-strategy/src/test/resources/json/blobGC-legacy.additionalInformation.json
  AL    server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BlobGCTaskSerializationTest.java
  AL    server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BloomFilterGCAlgorithmContract.java
  AL    server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/GenerationAwareBlobIdTest.java
  AL    server/blob/blob-storage-strategy/src/test/java/org/apache/james/server/blob/deduplication/BlobGCTaskAdditionalInformationDTOTest.java
  AL    server/blob/blob-storage-strategy/pom.xml
  AL    server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessagePartsId.java
  AL    server/blob/mail-store/src/main/java/org/apache/james/blob/mail/MimeMessageStore.java
  AL    server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessageStoreTest.java
  AL    server/blob/mail-store/src/test/java/org/apache/james/blob/mail/MimeMessagePartsIdTest.java
  AL    server/blob/mail-store/pom.xml
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfiguration.java
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/Region.java
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreConfiguration.java
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/BucketNameResolver.java
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/MinimalCopyBytesResponseTransformer.java
  AL    server/blob/blob-s3/src/main/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAO.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3HealthCheckTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3MinioTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PrefixAndNamespaceTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/BucketNameResolverTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Container.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PrefixTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/RegionTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Singleton.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/AwsS3AuthConfigurationTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3NamespaceTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3BlobStoreDAOTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3Extension.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/DockerAwsS3.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3DeDuplicationBlobStoreTest.java
  AL    server/blob/blob-s3/src/test/java/org/apache/james/blob/objectstorage/aws/S3PassThroughBlobStoreTest.java
  AL    server/blob/blob-s3/pom.xml
  AL    server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfig.java
  AL    server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/PBKDF2StreamingAeadFactory.java
  AL    server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoConfigBuilder.java
  AL    server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/AESBlobStoreDAO.java
  AL    server/blob/blob-aes/src/main/java/org/apache/james/blob/aes/CryptoException.java
  AL    server/blob/blob-aes/src/test/java/org/apache/james/blob/aes/AESBlobStoreDAOTest.java
  AL    server/blob/blob-aes/pom.xml
  AL    server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/FileExtension.java
  AL    server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/BlobExportMechanism.java
  AL    server/blob/blob-export-api/src/main/java/org/apache/james/blob/export/api/ExportedFileNamesGenerator.java
  AL    server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/ExportedFileNamesGeneratorTest.java
  AL    server/blob/blob-export-api/src/test/java/org/apache/james/blob/export/api/FileExtensionTest.java
  AL    server/blob/blob-export-api/pom.xml
  AL    server/task/task-api/src/main/scala/org/apache/james/task/TaskExecutionDetails.scala
  AL    server/task/task-api/src/main/scala/org/apache/james/task/Hostname.scala
  AL    server/task/task-api/src/main/java/org/apache/james/task/TaskNotFoundException.java
  AL    server/task/task-api/src/main/java/org/apache/james/task/Task.java
  AL    server/task/task-api/src/main/java/org/apache/james/task/TaskType.java
  AL    server/task/task-api/src/main/java/org/apache/james/task/TaskManager.java
  AL    server/task/task-api/src/main/java/org/apache/james/task/TaskId.java
  AL    server/task/task-api/src/main/java/org/apache/james/task/AsyncSafeTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/ThrowingTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/MemoryReferenceTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/TaskIdTest.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/TaskTypeTest.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/TaskTest.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/CompletedTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/FailsDeserializationTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/FailedTask.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/TaskManagerContract.java
  AL    server/task/task-api/src/test/java/org/apache/james/task/MemoryReferenceWithCounterTask.java
  AL    server/task/task-api/pom.xml
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/TaskModuleInjectionKeys.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/TaskExtensionModule.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskSerializer.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/JsonTaskAdditionalInformationSerializer.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTO.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/AdditionalInformationDTO.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/TaskDTOModule.java
  AL    server/task/task-json/src/main/java/org/apache/james/server/task/json/dto/AdditionalInformationDTOModule.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskDeserializerTest.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializerTest.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/FailedTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTOModules.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskStore.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskStore.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/FailsDeserializationTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/ThrowingTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceWithCounterTaskAdditionalInformationDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/CompletedTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/TestTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/dto/MemoryReferenceTaskDTO.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/TestTask.java
  AL    server/task/task-json/src/test/java/org/apache/james/server/task/json/TaskSerializationTest.java
  AL    server/task/task-json/pom.xml
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueSupplier.scala
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueConfiguration.scala
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/distributed/TaskEventDTO.scala
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionModule.scala
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionDAO.scala
  AL    server/task/task-distributed/src/main/scala/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjection.scala
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerHealthCheck.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueReconnectionHandler.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TerminationReconnectionHandler.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueue.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriber.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TasksSerializationModule.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/TerminationQueueName.java
  AL    server/task/task-distributed/src/main/java/org/apache/james/task/eventsourcing/distributed/CancelRequestQueueName.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueuePersistenceTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQTerminationSubscriberTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/DistributedTaskManagerTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/RabbitMQWorkQueueTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/ImmediateWorker.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/distributed/TaskEventsSerializationTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionTest.java
  AL    server/task/task-distributed/src/test/java/org/apache/james/task/eventsourcing/cassandra/CassandraTaskExecutionDetailsProjectionDAOTest.java
  AL    server/task/task-distributed/pom.xml
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjection.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/Events.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/DecisionProjection.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/WorkerStatusListener.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskAggregate.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskAggregateId.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/WorkQueueSupplier.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/CommandHandlers.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TaskCommand.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/EventSourcingTaskManager.scala
  AL    server/task/task-memory/src/main/scala/org/apache/james/task/eventsourcing/TerminationSubscriber.scala
  AL    server/task/task-memory/src/main/java/org/apache/james/task/WorkQueue.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/SerialTaskManagerWorker.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/MemoryWorkQueue.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/MemoryTaskManager.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/TaskWithId.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/TaskExecutionDetailsUpdater.java
  AL    server/task/task-memory/src/main/java/org/apache/james/task/TaskManagerWorker.java
  AL    server/task/task-memory/src/test/scala/org/apache/james/task/TaskExecutionDetailsFixture.scala
  AL    server/task/task-memory/src/test/java/org/apache/james/task/TaskWithIdTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/SerialTaskManagerWorkerTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/MemoryTaskExecutionDetailsProjectionTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TaskAggregateTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/EventSourcingTaskManagerTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TerminationSubscriberContract.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/TaskExecutionDetailsProjectionContract.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/eventsourcing/MemoryTerminationSubscriberTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/MemoryTaskManagerTest.java
  AL    server/task/task-memory/src/test/java/org/apache/james/task/CountDownLatchExtension.java
  AL    server/task/task-memory/pom.xml
  AL    server/src/main/appended-resources/supplemental-models.xml
  AL    server/src/reporting-site/site.xml
  AL    server/pom.xml
  AL    server/dns-service/dnsservice-dnsjava/src/main/resources/META-INF/spring/dns-context.xml
  AL    server/dns-service/dnsservice-dnsjava/src/main/java/org/apache/james/dnsservice/dnsjava/DNSJavaService.java
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/test-zone.com.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/three-mx.bar.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/two-mx.sameprio.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/pippo.com.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/brandilyncollins.com.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/dnstest.com.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/one-mx.bar.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/resources/org/apache/james/dnsservice/dnsjava/two-mx.differentprio.zone
  AL    server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/ZoneCacheLookupRecordsAnswer.java
  AL    server/dns-service/dnsservice-dnsjava/src/test/java/org/apache/james/dnsservice/dnsjava/DNSJavaServiceTest.java
  AL    server/dns-service/dnsservice-dnsjava/src/reporting-site/site.xml
  AL    server/dns-service/dnsservice-dnsjava/pom.xml
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/MXHostAddressIterator.java
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/Inet4Network.java
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/Inet6Network.java
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/model/InetNetwork.java
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/inetnetwork/InetNetworkBuilder.java
  AL    server/dns-service/dnsservice-library/src/main/java/org/apache/james/dnsservice/library/netmatcher/NetMatcher.java
  AL    server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/inetnetwork/model/InetNetworkTest.java
  AL    server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/inetnetwork/InetNetworkBuilderTest.java
  AL    server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/netmatcher/NetMatcherTest.java
  AL    server/dns-service/dnsservice-library/src/test/java/org/apache/james/dnsservice/library/MXHostAddressIteratorTest.java
  AL    server/dns-service/dnsservice-library/src/reporting-site/site.xml
  AL    server/dns-service/dnsservice-library/pom.xml
  AL    server/dns-service/dnsservice-api/src/main/resources/dnsservice.xml
  AL    server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/DNSService.java
  AL    server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/TemporaryResolutionException.java
  AL    server/dns-service/dnsservice-api/src/main/java/org/apache/james/dnsservice/api/DNSServiceMBean.java
  AL    server/dns-service/dnsservice-api/src/reporting-site/site.xml
  AL    server/dns-service/dnsservice-api/pom.xml
  AL    server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/InMemoryDNSService.java
  AL    server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/mock/DNSFixture.java
  AL    server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/mock/MockDNSService.java
  AL    server/dns-service/dnsservice-test/src/main/java/org/apache/james/dnsservice/api/AbstractDNSServiceTest.java
  AL    server/dns-service/dnsservice-test/pom.xml
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/PopulateMetadataStoreListener.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesDTO.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesTask.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesService.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesAdditionalInformationDTO.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/task/MessageInconsistenciesEntry.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/MemoryPop3MetadataStore.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataModule.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStore.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/Pop3MetadataStore.java
  AL    server/protocols/protocols-pop3-distributed/src/main/java/org/apache/james/pop3server/mailbox/DistributedMailboxAdapter.java
  B     server/protocols/protocols-pop3-distributed/src/test/resources/keystore
 !????? server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesDTOTest.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesAdditionalInformationDTOTest.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/task/MetaDataFixInconsistenciesServiceTest.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/CassandraPop3MetadataStoreTest.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/Pop3MetadataStoreContract.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/MemoryPop3MetadataStoreTest.java
  AL    server/protocols/protocols-pop3-distributed/src/test/java/org/apache/james/pop3server/mailbox/DistributedPop3ServerTest.java
  AL    server/protocols/protocols-pop3-distributed/pom.xml
  AL    server/protocols/webadmin/webadmin-dropwizard-metrics/src/main/java/org/apache/james/webadmin/dropwizard/MetricsRoutes.java
  AL    server/protocols/webadmin/webadmin-dropwizard-metrics/src/test/java/org/apache/james/webadmin/dropwizard/MetricsRoutesTest.java
  AL    server/protocols/webadmin/webadmin-dropwizard-metrics/pom.xml
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadRepositoryCleanupTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/JmapUploadRoutes.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewRequestToTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/MessageFastViewProjectionCorrector.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/EmailQueryViewPopulator.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionRequestToTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptionsParser.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UserIdentityRoutes.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskDTO.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RunningOptions.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/dto/UserIdentity.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/Constants.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTask.java
  AL    server/protocols/webadmin/webadmin-jmap/src/main/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTask.java
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.additionalInformation.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateAll.additionalInformation.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/cleanUpload.task.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateAll.task.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.additionalInformation.legacy.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateFilters.additionalInformation.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/cleanUpload.additionalInformation.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.additionalInformation.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/populateFilters.task.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.task.legacy.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeUser.task.legacy.json
  B     server/protocols/webadmin/webadmin-jmap/src/test/resources/json/recomputeAll.additionalInformation.legacy.json
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionItemsTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UserIdentitiesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/UploadCleanupTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/JmapUploadRoutesTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewProjectionItemsTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeUserFastViewProjectionItemsTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/RecomputeAllFastViewProjectionItemsTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateEmailQueryViewRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-jmap/src/test/java/org/apache/james/webadmin/data/jmap/PopulateFilteringProjectionTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-jmap/pom.xml
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingService.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/MailRepositoryStoreService.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTask.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTask.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ClearMailRepositoryTask.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/WebAdminClearMailRepositoryTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/routes/MailRepositoriesRoutes.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/HeadersDto.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/SingleMailRepositoryResponse.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/InaccessibleFieldException.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailRepositoryResponse.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/ExtendedMailRepositoryResponse.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailKeyDTO.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/main/java/org/apache/james/webadmin/dto/MailDto.java
 !????? server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingAllMailsTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingServiceTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/MailRepositoryStoreServiceTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/WebAdminClearMailRepositoryTaskDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ReprocessingOneMailTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/service/ClearMailRepositoryTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/src/test/java/org/apache/james/webadmin/routes/MailRepositoriesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailrepository/pom.xml
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTask.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTask.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/ClearMailQueueTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/routes/MailQueueRoutes.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/MailQueueItemDTO.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/main/java/org/apache/james/webadmin/dto/ForceDelivery.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/DeleteMailsFromMailQueueTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/ClearMailQueueTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/service/WebAdminDeleteMailsFromMailQueueTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesUnitTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/routes/MailQueueRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/src/test/java/org/apache/james/webadmin/dto/MailQueueItemDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailqueue/pom.xml
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/Quotas.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/MailboxName.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/validation/QuotaDTOValidator.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/jackson/QuotaModule.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserMailboxesService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/GlobalQuotaService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsRequestToTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverOneTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverGroupTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/CreateMissingParentsTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverAllTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExportService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/MailboxesExportRequestToTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliveryTaskAdditionalInformation.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/DomainQuotaService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/UserQuotaService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventRetriever.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllRequestToTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/EventDeadLettersService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ClearMailboxContentTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/SubscribeAllTask.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/ExpireMailboxDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/service/PreviousReIndexingService.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/utils/MailboxHaveChildrenException.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserQuotaRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/GlobalQuotaRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/DomainQuotaRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/MessagesRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/ReindexingRunningOptionsParser.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/UserMailboxesRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/MailboxesRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/routes/EventDeadLettersRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDetailsDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaValueDeserializer.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminIndexationContextInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminUserReindexingTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/MailboxResponse.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxReindexingTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/ValidatedQuotaDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/SerializableReIndexingExecutionFailures.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/OccupationRatioDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/UsersQuotaDetailsDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaDomainDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/main/java/org/apache/james/webadmin/dto/QuotaValueSerializer.java
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/subscribeAll.additionalInformation.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/mailboxesExport.task.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/subscribeAll.task.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/createMissingParents.task.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/mailboxesExport.additionalInformation.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.additionalInformation.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/clearMailboxContent.task.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.additionalInformation.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.age.task.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/createMissingParents.additionalInformation.json
  B     server/protocols/webadmin/webadmin-mailbox/src/test/resources/json/expireMailbox.header.task.json
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/validation/QuotaLimitValueTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/EventDeadLettersRedeliverTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxServiceTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExpireMailboxTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/SubscribeAllTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/MailboxesExportTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ExportServiceTestSystem.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/ClearMailboxContentTaskAdditionalInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/service/CreateMissingParentsTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/WebAdminQuotaSearchTestSystem.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesNoVirtualHostingTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesExpireTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MessageRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserQuotaRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/ScanningQuotaSearchExtension.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MailboxesRoutesNoTasksTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/EventDeadLettersRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/DomainQuotaRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/GlobalQuotaRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/UserMailboxesRoutesNoIndexationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/MalformedUrlRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/routes/OpenSearchQuotaSearchExtension.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/SerializableReIndexingExecutionFailuresTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/UsersQuotaDetailsDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminIndexationContextInformationDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminUserReIndexingDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/WebAdminSingleMailboxIndexingDTOTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/src/test/java/org/apache/james/webadmin/dto/QuotaLimitValueDeserializerTest.java
  AL    server/protocols/webadmin/webadmin-mailbox/pom.xml
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeService.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTask.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTask.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UsernameChangeTaskDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/UserService.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DomainAliasService.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTaskDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataService.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/service/DeleteUserDataTask.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AliasRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/ForwardRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DeleteUserDataRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/BlobRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DLPConfigurationRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MailAddressParser.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/GroupsRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UsernameChangeRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/SieveScriptRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainsRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/RegexMappingRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/DomainMappingsRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/SieveQuotaRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/AddressMappingRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/MappingRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/UserCreationRequestLogger.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/routes/VacationRoutes.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/UserResponse.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/ForwardDestinationResponse.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/VerifyUserRequest.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingSourceModule.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DomainAliasResponse.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/AliasSourcesResponse.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/MappingValueDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/VacationDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/DLPConfigurationItemDTO.java
  AL    server/protocols/webadmin/webadmin-data/src/main/java/org/apache/james/webadmin/dto/AddUserRequest.java
 !????? server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUsersDataOfDomainTaskTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/UsernameChangeTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/service/DeleteUserDataTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/GroupsRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/BlobRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AddressMappingRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/VacationRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UserRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/ForwardRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/UsernameChangeRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveScriptRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/MappingRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DLPConfigurationRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/AliasRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainsRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DomainMappingsRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/DeleteUserDataRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/SieveQuotaRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/routes/RegexMappingRoutesTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/DomainAliasResponseTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/DLPConfigurationItemDTOTest.java
  AL    server/protocols/webadmin/webadmin-data/src/test/java/org/apache/james/webadmin/dto/VacationDTOTest.java
  AL    server/protocols/webadmin/webadmin-data/pom.xml
  AL    server/protocols/webadmin/webadmin-pop3/src/main/java/org/apache/james/pop3/webadmin/Pop3MetaDataFixInconsistenciesTaskRegistration.java
  AL    server/protocols/webadmin/webadmin-pop3/src/test/java/org/apache/james/pop3/webadmin/Pop3MetaDataFixInconsistenciesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-pop3/pom.xml
 !????? server/protocols/webadmin/webadmin-pop3/README.md
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/UserClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/UserPassword.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/UserName.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/DomainAlias.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/model/MailboxName.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/MailboxClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/WebAdminHTTPClientFactory.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/QuotaClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/DomainClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/DomainFeignClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/UserFeignClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/JamesFeignException.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/MailboxFeignClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/feign/QuotaFeignClient.java
  AL    server/protocols/webadmin/webadmin-http-client/src/main/java/org/apache/james/webadmin/httpclient/FeignHelper.java
  AL    server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/MailboxClientTest.java
  AL    server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/DomainClientTest.java
  AL    server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/UserClientTest.java
  AL    server/protocols/webadmin/webadmin-http-client/src/test/java/org/apache/james/webadmin/httpclient/QuotaClientTest.java
  AL    server/protocols/webadmin/webadmin-http-client/pom.xml
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/services/TasksCleanupService.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTaskDTO.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/tasks/TasksCleanupTask.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/TasksCleanupRoutes.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/CassandraMailboxMergingRoutes.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTask.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/RecomputeMailboxCountersRequestToTask.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/RunningOptionsParser.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/CassandraMigrationRoutes.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/routes/SolveMessageInconsistenciesRequestToTask.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/CassandraVersionRequest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/WebAdminMigrationTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/CassandraVersionResponse.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/main/java/org/apache/james/webadmin/dto/MailboxMergingRequest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/CassandraMigrationRoutesTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/SolveMessageInconsistenciesRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/SolveMailboxInconsistenciesRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/TasksCleanupRoutesTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/routes/RecomputeMailboxCountersRequestToTaskTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/dto/VersionRequestTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/src/test/java/org/apache/james/webadmin/dto/WebAdminMigrationTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-cassandra/pom.xml
  AL    server/protocols/webadmin/pom.xml
  AL    server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsSolveInconsistenciesTask.java
  AL    server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/service/CassandraMappingsService.java
  AL    server/protocols/webadmin/webadmin-cassandra-data/src/main/java/org/apache/james/webadmin/routes/CassandraMappingsRoutes.java
  AL    server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/service/CassandraMappingsSolveInconsistenciesTaskTest.java
  AL    server/protocols/webadmin/webadmin-cassandra-data/src/test/java/org/apache/james/webadmin/routes/CassandraMappingsRoutesTest.java
  AL    server/protocols/webadmin/webadmin-cassandra-data/pom.xml
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/AuthenticationFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/JwtFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/authentication/NoAuthenticationFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PublicRoutes.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/FixedPortSupplier.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminServer.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/WebAdminConfiguration.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistry.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskFromRequest.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskRegistrationKey.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/tasks/TaskIdDto.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/TlsConfiguration.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestLogger.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingRequestFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/MDCFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/MDCCleanupFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/LoggingResponseFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/mdc/RequestId.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformer.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonTransformerModule.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/ParametersExtractor.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/ErrorResponder.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonExtractor.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/Responses.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/utils/JsonExtractException.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/PortSupplier.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/CORSRoute.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/HealthCheckRoutes.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/routes/TasksRoutes.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/ExecutionDetailsDto.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckExecutionResultDto.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HealthCheckDto.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/DTOModuleInjections.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/dto/HeathCheckAggregationExecutionResultDto.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Constants.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/RandomPortSupplier.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/CORSFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/metric/MetricPreFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/metric/MetricPostFilter.java
  AL    server/protocols/webadmin/webadmin-core/src/main/java/org/apache/james/webadmin/Routes.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/authentication/JwtFilterTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtils.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskFromRequestRegistryTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskFromRequestTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/tasks/TaskRegistrationKeyTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/FixedPortSupplierTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/mdc/RequestIdTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminUtilsTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/ParametersExtractorTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/ErrorResponderTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/utils/JsonExtractorTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminServerTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/WebAdminConfigurationTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/HealthCheckRoutesTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/ErrorRoutes.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/ErrorRoutesTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/routes/TasksRoutesTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/RandomPortSupplierTest.java
  AL    server/protocols/webadmin/webadmin-core/src/test/java/org/apache/james/webadmin/TlsConfigurationTest.java
  AL    server/protocols/webadmin/webadmin-core/pom.xml
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotProcessedMailsTaskDTO.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotProcessedMailsTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTaskDTO.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/BrowseStartUpdateTask.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/service/RepublishNotprocessedMailsTask.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/routes/BrowseStartUpdateTaskRegistration.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/main/java/org/apache/james/webadmin/routes/RabbitMQMailQueuesRoutes.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/test/java/org/apache/james/webadmin/service/RepublishNotprocessedMailsTaskTest.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/src/test/java/org/apache/james/webadmin/routes/RabbitMQMailQueuesRoutesTest.java
  AL    server/protocols/webadmin/webadmin-rabbitmq/pom.xml
  AL    server/protocols/webadmin/webadmin-protocols/src/main/java/org/apache/james/protocols/webadmin/ProtocolServerRoutes.java
  AL    server/protocols/webadmin/webadmin-protocols/pom.xml
  AL    server/protocols/webadmin/webadmin-mail-over-web/src/main/java/org/apache/james/webadmin/routes/TransferEmailRoutes.java
 !????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
 !????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
 !????? server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
  AL    server/protocols/webadmin/webadmin-mail-over-web/src/test/java/org/apache/james/routes/TransferEmailRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mail-over-web/pom.xml
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTask.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutes.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTask.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/ExportService.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/RestoreService.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultDeleteTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTask.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskAdditionalInformationDTO.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/main/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskAdditionalInformationDTO.java
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_no_attachment.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_equals.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_equals_ignore_case.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/zoned_date_time_before_or_equals.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_contains.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_sender.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/zoned_date_time_after_or_equals.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/contains_origin_mailbox.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/has_attachment.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/contains_recipient.json
  B     server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/resources/query/string_contains_ignore_case.json
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebadminApiQuerySerializationContractTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRestoreTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultDeleteTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultRoutesTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/WebAdminDeletedMessagesVaultRestoreTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultDeleteTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/src/test/java/org/apache/james/webadmin/vault/routes/DeletedMessagesVaultExportTaskSerializationTest.java
  AL    server/protocols/webadmin/webadmin-mailbox-deleted-message-vault/pom.xml
 !????? server/protocols/jmap-draft/doc/annotation.css
 !????? server/protocols/jmap-draft/doc/Dockerfile
 !????? server/protocols/jmap-draft/doc/specs/client-guide/jmap-client-guide.mdwn
 !????? server/protocols/jmap-draft/doc/specs/home/faq.mdwn
 !????? server/protocols/jmap-draft/doc/specs/software/software.mdwn
 !????? server/protocols/jmap-draft/doc/specs/server-guide/jmap-server-guide.mdwn
  AL    server/protocols/jmap-draft/doc/specs/LICENSE.md
  N     server/protocols/jmap-draft/doc/specs/README
 !????? server/protocols/jmap-draft/doc/specs/spec/vacationresponse.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/searchsnippet.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/push.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/calendarevent.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/thread.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/mailbox.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/message.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/account.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/contactgroup.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/calendar.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/contactlist.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/contact.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/upload.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/authentication.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/messagelist.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/apimodel.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/calendareventlist.mdwn
 !????? server/protocols/jmap-draft/doc/specs/spec/datamodel.mdwn
 !????? server/protocols/jmap-draft/doc/mkdocs.yml
 !????? server/protocols/jmap-draft/doc/README.md
 !????? server/protocols/jmap-draft/src/main/resources/jwt-public.der
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListener.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PropagateLookupRightListener.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/event/PopulateEmailQueryViewListener.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/ObjectMapperFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/MultipleClassesDeserializer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/FieldNamePropertyFilter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/OptionalZonedDateTimeSerializer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/RoleMixIn.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/OptionalZonedDateTimeDeserializer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/FilterDeserializer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/json/MultipleObjectMapperBuilder.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/MalformedContinuationTokenException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/BlobNotFoundException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/MailboxNotOwnedException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/InvalidDraftKeywordsException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/MessageNotFoundException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/SystemMailboxNotUpdatableException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/InvalidOriginMessageForMDNException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/MailboxHasChildException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/AttachmentsNotFoundException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/JmapFieldNotSupportedException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/InvalidMailboxForCreationException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/InternalErrorException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/BadRequestException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/SizeExceededException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/MailboxParentNotFoundException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/exceptions/InvalidOutboxMoveException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/MailMetadata.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/exception/MessageIdNotFoundException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/exception/MailShouldBeInOutboxException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/PostDequeueDecorator.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/send/MailSpool.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/ContinuationToken.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetMailboxesRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/ContinuationTokenRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/UpdateMessagePatch.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapMDN.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/CreationMessage.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetVacationRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MessageProperties.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Emailer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/PreviewDTO.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/deserialization/JmapRuleDTODeserializer.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/BlobId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Header.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Number.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/FilterOperator.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetVacationRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxProperty.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMailboxesRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxCreationId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/ContinuationTokenResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessagesRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/FilterCondition.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessageListRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MDNDisposition.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetMessagesResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/VacationResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/InvocationResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetMessagesError.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetError.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetFilterRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/JmapRuleDTO.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMailboxesResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetMessagesRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetFilterResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Operator.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/CreationMessageId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Filter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MailboxFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetMailboxesResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/EnvelopeUtils.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Property.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/AttachmentAccessToken.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/AccessTokenResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetVacationResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SignedExpiringToken.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/Rights.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/MailboxUpdateRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/Mailbox.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/MailboxNamespace.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/Quotas.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/MailboxCreateRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/mailbox/SortOrder.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetVacationResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/InvocationRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetMessageListResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/SetFilterRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/AuthenticatedRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/MethodCallId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keywords.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/OldKeyword.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/UploadResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Keyword.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataView.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/SubMessage.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageView.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFullView.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MetaMessageViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastView.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageViewFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderView.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Attachment.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/AccessTokenRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/EndPointsResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/Blob.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/model/GetFilterResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/JMAPDraftConfiguration.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/api/AccessTokenManager.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/api/SimpleTokenFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/api/SimpleTokenManager.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMessagesMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/ErrorResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetVacationResponseMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/ValueWithId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesUpdateProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageSender.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetVacationResponseMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MessageAppender.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetFilterMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SendMDNProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/RequestHandler.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMailboxesMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponse.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesDestructionProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManager.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessagesMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/Validator.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/ReferenceUpdater.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MailboxSendingNotAllowedException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/GetMessageListMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequest.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMessagesProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MailboxInvalidMessageCreationException.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchConverter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParserImpl.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetFilterMethod.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/MIMEMessageConverter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMessagesDestructionProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapRequestParser.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/BlobManagerImpl.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/ValidationResult.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImpl.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidator.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/methods/Method.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/SortingHierarchicalCollections.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/SortConverter.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/DependencyGraph.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/KeywordsCombiner.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/DownloadPath.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/FilterToCriteria.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/AccountIdUtil.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/MailboxUtils.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/quotas/QuotaLoader.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/quotas/QuotaLoaderWithDefaultPreloaded.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/quotas/DefaultQuotaLoader.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SignedTokenFactory.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SignedTokenManager.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SignatureHandler.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/JamesSignatureHandler.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/AsymmetricKeys.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/AccessTokenManagerImpl.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoader.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachment.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/ExtractMDNOriginalJMAPMessageId.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ContentMatcher.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/RuleMatcher.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/MailMatcher.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/ActionApplier.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/HeaderExtractor.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/filter/JMAPFiltering.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/mailet/SentByJmap.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/UploadRoutes.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/LoggingHelper.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/JMAPApiRoutes.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/UserProvisioner.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/AccessTokenAuthenticationStrategy.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/DownloadRoutes.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/DefaultMailboxesProvisioner.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/QueryParameterAccessTokenAuthenticationStrategy.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/InjectionKeys.java
  AL    server/protocols/jmap-draft/src/main/java/org/apache/james/jmap/http/AuthenticationRoutes.java
 !????? server/protocols/jmap-draft/src/test/resources/noReplyTo.eml
  B     server/protocols/jmap-draft/src/test/resources/json/subMessage.json
  B     server/protocols/jmap-draft/src/test/resources/json/message.json
 !????? server/protocols/jmap-draft/src/test/resources/inlineAttachment.eml
 !????? server/protocols/jmap-draft/src/test/resources/spamMail.eml
 !????? server/protocols/jmap-draft/src/test/resources/key.pub
 !????? server/protocols/jmap-draft/src/test/resources/fullMessage.eml
 !????? server/protocols/jmap-draft/src/test/resources/example.html
 !????? server/protocols/jmap-draft/src/test/resources/private.nopass.key
  B     server/protocols/jmap-draft/src/test/resources/keystoreJava11
 !????? server/protocols/jmap-draft/src/test/resources/oneAttachment.eml
  B     server/protocols/jmap-draft/src/test/resources/keystore
 !????? server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
  B     server/protocols/jmap-draft/src/test/resources/keystoreJava7
  B     server/protocols/jmap-draft/src/test/resources/badAliasKeystore
 !????? server/protocols/jmap-draft/src/test/resources/calendar.eml
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/ComputeMessageFastViewProjectionListenerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/PopulateEmailQueryViewListenerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/event/PropagateLookupRightListenerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/OperatorSerializeDeserializeTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ObjectMapperFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/MultipleObjectMapperTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjects.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/json/ParsingWritingObjectsTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/JMAPDraftConfigurationTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/MailMetadataTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/MailSpoolTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/send/PostDequeueDecoratorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/UploadResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/KeywordsTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetMessageListRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMailboxesResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxPropertyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetVacationResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/InvocationResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetVacationRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterConditionTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/JmapMDNTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/FilterOperatorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/AttachmentAccessTokenTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/CreationMessageTest.java
 !????? server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/OldKeywordTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MethodCallIdTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetErrorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetVacationRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/BlobTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetMailboxMessageListResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/ContinuationTokenTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/HeaderTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/VacationResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertiesTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/InvocationRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/UpdateMessagePatchTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetMailboxesRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessagePropertyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MessageHeaderPropertyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/QuotaIdTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/MailboxCreateRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/MailboxNamespaceTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/SortOrderTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/MailboxUpdateRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/RightsTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/mailbox/MailboxTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/PreviewDTOTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetMessagesRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMessagesResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/BlobIdTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/KeywordTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/AttachmentTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MailboxFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/GetVacationResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/SetMailboxesRequestTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFastViewFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageMetadataViewFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/SubMessageTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageHeaderViewFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageViewFixture.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/message/view/MessageFullViewTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/EmailerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/NumberTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/MDNDispositionTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/RequestHandlerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MessageSenderTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/BlobManagerImplTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapResponseWriterImplTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetVacationResponseMethodTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchConverterTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesCreationProcessorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/MIMEMessageConverterTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/UpdateMessagePatchValidatorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetMessagesMethodTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMessagesUpdateProcessorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMailboxesCreationProcessorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/ErrorResponseTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMailboxesUpdateProcessorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/GetVacationResponseMethodTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/SetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/methods/JmapRequestParserImplTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/FixedDateZonedDateTimeProvider.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/DependencyGraphTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/SortingHierarchicalCollectionsTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/FilterToCriteriaTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/KeywordsCombinerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/JsoupHtmlTextExtractorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/MailboxUtilsTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/utils/SortConverterTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/JamesSignatureHandlerFixture.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/SignedTokenManagerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/SecurityKeyLoaderTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/JamesSignatureHandlerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/AccessTokenManagerImplTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/crypto/SignedTokenFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/BeansTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/TextCalendarBodyToAttachmentTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/SentByJmapTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringFixture.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringExtension.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/mailet/filter/JMAPFilteringTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/PreviewFactoryTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/JWTAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/AccessTokenAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/XUserAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/UserProvisionerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/DownloadRoutesTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/QueryParameterAccessTokenAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/AuthenticatorTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/DefaultMailboxesProvisionerThreadTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/JMAPApiRoutesTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/DefaultMailboxesProvisionerTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/http/UserProvisionerThreadTest.java
  AL    server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/MessageFastViewProjectionItemFactoryTest.java
  AL    server/protocols/jmap-draft/pom.xml
 !????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/README.md
  AL    server/protocols/jmap-rfc-8621/doc/specs/LICENSE.md
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
 !????? server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
 !????? server/protocols/jmap-rfc-8621/doc/README.md
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailQuerySerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ResponseSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/PushSubscriptionSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/VacationSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/QuotaSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/PushSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/package.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailSetSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MailboxQuerySerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/ThreadSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/IdentitySerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/BackReferenceDeserializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailGetSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/UploadSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/EmailSubmissionSetSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/DelegationSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/json/MDNSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxFactory.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentitySet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailAddressGroup.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Keywords.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailQuery.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSubmissionSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/BlobId.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxQuery.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Mailbox.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailBodyPart.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentityGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Thread.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailBodyValue.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Rights.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDN.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/IdentityChanges.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailHeader.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Email.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDNSend.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxQueryChanges.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/KeywordsCombiner.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailParse.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/EmailImport.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Keyword.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MailboxNamespace.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/MDNParse.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/mail/Quotas.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/WebPushClient.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/PushRequest.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/pushsubscription/PushListener.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetCreatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/CoreEchoMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetUpdatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionUpdatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailQueryMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetCreatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/ThreadGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetCreatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSubmissionSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxQueryChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaQueryMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegateSetDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentityGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNParseMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/VacationResponseGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/Method.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetCreatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/package.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailSetMethod.scala
 !????? server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetDeletePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/QuotaGetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailImportMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/DelegatedAccountSetMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MailboxSetUpdatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailParseMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/IdentitySetUpdatePerformer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/EmailChangesMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/MDNSendMethod.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponseSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponseGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/vacation/VacationResponse.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/SessionTranslator.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Session.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Invocation.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/RequestLevelErrorType.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/SetError.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Id.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Query.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/PushSubscriptionSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/UTCDate.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capabilities.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/ProblemDetails.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/PushSubscriptionGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/UnsignedInt.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/RequestObject.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/ResponseObject.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/WebSocketTransport.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Properties.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/JmapRfc8621Configuration.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/core/Capability.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegateSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/Delegation.scala
 !????? server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegateGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountGet.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/MailboxesProvisioner.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/UserProvisioning.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/http/BasicAuthenticationStrategy.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaReader.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaLoaderWithPreloadedDefault.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/quotas/QuotaLoader.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/utils/search/MailboxFilter.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JMAPApiRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/SessionRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/DownloadRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/SessionSupplier.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/JmapApi.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/WebSocketRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/ProcessingContext.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/UploadRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/routes/EventSourceRoutes.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/AccountIdRegistrationKey.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/EventDTOModule.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/JmapEventSerializer.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/StateChangeListener.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/MailboxChangeListener.scala
  AL    server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/change/StateChange.scala
  AL    server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mime4j/JamesBodyDescriptorBuilder.java
  AL    server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/mime4j/MaximalBodyDescriptor.java
  AL    server/protocols/jmap-rfc-8621/src/main/java/org/apache/james/jmap/http/rfc8621/InjectionKeys.java
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/EmailSubmissionSetSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/ResponseObjectSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/JsErrorSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MailboxSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/VacationResponseSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/RequestObjectSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/PushSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/BackReferenceTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/VacationResponseGetSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MDNSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/MailboxGetSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/SessionSerializationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/Fixture.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/EmailSetSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/PushSubscriptionSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/json/QuotaSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/mail/RightsTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/mail/MailboxTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushSubscriptionSetCreateProcessorTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushServerExtension.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushRequestTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/SafeWebPushClientContract.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/PushListenerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/pushsubscription/WebPushClientContract.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/method/CoreEchoMethodTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/UTCDateTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordsTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/JmapUrlEndpointResolverTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordsCombinerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/MailboxValidationTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/core/KeywordTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/UserProvisioningTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/MailboxesProvisionerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/http/UserCredentialParserTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionRoutesTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/SessionSupplierTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/routes/JMAPApiRoutesTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/TypeStateFactoryTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/MailboxChangeListenerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/AccountIdRegistrationKeyTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/StateChangeEventSerializerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/scala/org/apache/james/jmap/change/StateChangeListenerTest.scala
  AL    server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/pushsubscription/DefaultWebPushClientTest.java
  AL    server/protocols/jmap-rfc-8621/src/test/java/org/apache/james/jmap/pushsubscription/DefaultWebPushClientServerSideForgeryTest.java
  AL    server/protocols/jmap-rfc-8621/pom.xml
  AL    server/protocols/protocols-smtp/src/main/resources/META-INF/spring/smtpserver-context.xml
  AL    server/protocols/protocols-smtp/src/main/resources/smtpserver.xml
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/MailPriorityHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseParameters.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseMailParameterHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/futurerelease/FutureReleaseEHLOHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesDataCmdHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNMessageHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNEhloHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNMailParameterHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/dsn/DSNRcptParameterHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SenderAuthIdentifyVerificationHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SendMailHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/POP3BeforeSMTPHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesWelcomeMessageHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesRcptCmdHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetrics.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServer.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerFactory.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SmtpMetricsImpl.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPServerMBean.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/netty/SMTPChannelInboundHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStats.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/CommandHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/SMTPCommandHandlerStatsMBean.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookStatsMBean.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/JMXHandlersLoader.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/ConnectHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/LineHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookResultJMXMonitor.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/jmx/HookStats.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/CoreCmdHandlerLoader.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/ExtendedSMTPSession.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SetMimeHeaderHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/model/ProtocolMailAddressAdapter.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/AddDefaultAttributesMessageHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/AuthRequiredToRelayRcptHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/SMTPConstants.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/DataLineJamesMessageHookHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/TLDLookup.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/UsersRepositoryAuthHook.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesMailCmdHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/DNSRBLHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ReverseEqualsEhloHeloHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/URIScanner.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptMX.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/JDBCGreylistHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidSenderDomainHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/MaxRcptHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/URIRBLHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SpamTrapHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/SPFHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ValidRcptHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/ResolvableEhloHeloHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/fastfail/MaxUnknownCmdHandler.java
  AL    server/protocols/protocols-smtp/src/main/java/org/apache/james/smtpserver/JamesMessageHook.java
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-requireSSL.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-disabled-feature.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-no-plain.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-noauth.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-proxy.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-tls.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-dsn.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceSometimeNotMatching.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-futurerelease.xml
  B     server/protocols/protocols-smtp/src/test/resources/keystore
 !????? server/protocols/protocols-smtp/src/test/resources/log4j.xml
  B     server/protocols/protocols-smtp/src/test/resources/test_keystore
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceAlways.xml
 !????? server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceNever.xml
  AL    server/protocols/protocols-smtp/src/test/resources/smtpserver-authAnnounceSometimeMatching.xml
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTestSystem.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/futurerelease/FutureReleaseParametersTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPProxyProtocolTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPServerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/DSNTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPSaslTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/DisableFeatureTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/FutureReleaseTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptHandlerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SPFHandlerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPSTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SetMimeHeaderHandlerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/SMTPTestConfiguration.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/POP3BeforeSMTPHandlerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/ValidRcptMXTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/URIRBLHandlerTest.java
  AL    server/protocols/protocols-smtp/src/test/java/org/apache/james/smtpserver/AuthAnnounceTest.java
  AL    server/protocols/protocols-smtp/src/reporting-site/site.xml
  AL    server/protocols/protocols-smtp/pom.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/listeners.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/dnsservice.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/lmtpserver.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/mailetcontainer.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/imapserver.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/managesieveserver.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/domainlist.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/mailrepositorystore.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/usersrepository.xml
  B     server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/keystore
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/smtpserver.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/resources/pop3server.xml
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryCorsHeaderAPITest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryQuotaMailingTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationRelayIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryFilterTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemorySetMailboxesMethodCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemorySetMessagesMethodCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryDownloadCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryIMAPKeywordsInconsistenciesTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryUploadCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryIMAPSetMessagesCompatibilityTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemorySharingTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/cucumber/MemoryGetMessagesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryProvisioningTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetVacationResponseMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodReRoutingTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMessageListMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySendMDNMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryModularizeJmapDraftAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemorySetMessagesOutboxFlagUpdateTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryGetVacationResponseMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryJmapAuthenticationTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/memory/MemoryVacationIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/memory-jmap-draft-integration-testing/pom.xml
  AL    server/protocols/jmap-draft-integration-testing/pom.xml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoSameAttachments.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlMail.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlWithLongAndComplicatedContent.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/ics_in_header.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlBodyWithManyEmptyTags.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentAndBlankCid.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/windows1252charset.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
  B     server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/attachment.pdf
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImageWithoutContentDisposition.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachments.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/multipartRelated.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImage.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/sameInlinedImages.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentID.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlAndTextMultipartWithOneAttachment.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/longLine.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/textInMainMultipartHtmlInInnerMultipart.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachmentsTextPlain.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part1.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentDisposition.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/calendar.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedMultipart.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part2.eml
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/SetMessages.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/ImapSetMessagesMailboxesUpdatesCompatibility.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/DownloadGet.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/DownloadAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/GetMessageAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/SharingMailboxWithOtherDomain.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/GetMessageListAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/MoveMailboxAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/SetFlagAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/SharingParentMailboxWithAndWithoutChildren.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/KeywordsConsistencyOnDelegationMailbox.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/MoveMessageAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/SharingChildrenWithoutSharingParent.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/MailboxDeletionAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/SetMessagesOnSharedMailbox.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/CopyAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/RenamingMailboxAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/sharing/MailboxCreationAndSharing.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/DownloadEndpoint.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/UploadEndpoint.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/DownloadPost.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/ImapKeywordsConsistency.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/GetMessages.feature
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/cucumber/MailboxModification.feature
 !????? server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/attachment/nonIndexableAttachment.html
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/MessageAppender.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/AllowAuthenticationStrategy.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/categories/CassandraAndOpenSearchCategory.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/categories/EnableCucumber.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/categories/BasicFeature.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/MockSmtpTestRule.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/UserCredentials.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesOutboxFlagUpdateTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodReRoutingTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetVacationResponseTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMessagesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/FilterTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetMessageListMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/ObjectFromString.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/IntegerFromString.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/BooleanFromString.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/ObjectFromStringExtractor.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/TableRow.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/util/StringFromString.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/ContentType.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/MainStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/StringListToFlagsTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/SetMessagesMethodStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/StringListToFlags.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/GetMailboxesMethodStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/GetMessagesMethodStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/UploadStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/DownloadStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/SetMailboxesMethodStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/UserStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/ImapStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/GetMessageListMethodStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/HttpClient.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/cucumber/MessageIdStepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SendMDNMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/QuotaMailingTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/GetVacationResponseTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/CorsHeaderAPITest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/draft/methods/integration/SetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/ContainerTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/DenyAuthenticationStrategy.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/ModularizeJmapDraftAuthenticationStrategyTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/JmapURIBuilder.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/ProvisioningTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/java/org/apache/james/jmap/VacationRelayIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/pom.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/listeners.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/dnsservice.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/lmtpserver.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/mailetcontainer.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/imapserver.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/domainlist.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/mailrepositorystore.xml
  B     server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/keystore
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/smtpserver.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/resources/pop3server.xml
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetVacationResponseTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3FilterTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SendMDNMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3JmapAuthenticationTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetMailboxesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3GetMessageListMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQSetMailboxesMethodCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQIMAPSetMessagesCompatibilityTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQGetMessagesMethodTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQUploadCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQMessageSharingTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberOpenSearchSingleton.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQDownloadCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQMailboxSharingTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberRabbitMQSingleton.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQAwsS3Stepdefs.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQIMAPKeywordsInconsistenciesTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberCassandraSingleton.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/CucumberAwsS3Singleton.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/cucumber/awss3/RabbitMQSetMessagesMethodCucumberTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3QuotaMailingTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3ProvisioningTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3VacationRelayIntegrationTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetVacationResponseTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMessagesMethodReRoutingTest.java
  AL    server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/src/test/java/org/apache/james/jmap/rabbitmq/RabbitMQAwsS3SetMailboxesMethodTest.java
 !????? server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/LegacyJavaEncryptionFactory.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/POP3BeforeSMTPHelper.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractProtocolAsyncServer.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractConfigurableAsyncServer.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/CertificateReloadable.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/netty/AbstractServerFactory.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractLineHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/ServerMBean.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/CommandHandlerStatsMBean.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/LineHandlerStats.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/HandlerStatsMBean.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractConnectHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/ConnectHandlerStats.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractCommandHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/jmx/AbstractCommandHandlerStats.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/handler/ProtocolHandlerLoader.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/handler/HandlersPackage.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/SslConfig.java
  AL    server/protocols/protocols-library/src/main/java/org/apache/james/protocols/lib/ProtocolHandlerChainImpl.java
 !????? server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
 !????? server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
 !????? server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
 !????? server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
 !????? server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
  B     server/protocols/protocols-library/src/test/resources/keystore
 !????? server/protocols/protocols-library/src/test/resources/testServerPlain.xml
 !????? server/protocols/protocols-library/src/test/resources/testServerTLS.xml
  AL    server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/ConfigLoader.java
  AL    server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/mock/MockProtocolHandlerLoader.java
  AL    server/protocols/protocols-library/src/test/java/org/apache/james/protocols/lib/AbstractConfigurableAsyncServerTest.java
  AL    server/protocols/protocols-library/src/reporting-site/site.xml
  AL    server/protocols/protocols-library/pom.xml
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPUrls.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/Endpoint.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoutesHandler.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/UnauthorizedException.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/exceptions/NoAuthorizationSuppliedException.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/VersionParser.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/HttpConstants.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/Version.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPConfiguration.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationStrategy.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationScheme.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticationChallenge.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/Authenticator.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/AuthenticateHeader.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/XUserAuthenticationStrategy.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/http/JWTAuthenticationStrategy.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/UriMatcher.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPServer.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoute.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/JMAPRoutes.java
  AL    server/protocols/jmap/src/main/java/org/apache/james/jmap/InjectionKeys.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/FixedUriMatcherTest.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/EndpointTest.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPServerTest.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/VersionTest.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/VersionParserTest.java
  AL    server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPConfigurationTest.java
  AL    server/protocols/jmap/pom.xml
  AL    server/protocols/protocols-managesieve/src/main/resources/META-INF/spring/managesieveserver-context.xml
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveMDCContext.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/NettyConstants.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerFactory.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServerMBean.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveChannelUpstreamHandler.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ManageSieveServer.java
  AL    server/protocols/protocols-managesieve/src/main/java/org/apache/james/managesieveserver/netty/ChannelManageSieveResponseWriter.java
 !????? server/protocols/protocols-managesieve/pom.xml
  AL    server/protocols/protocols-lmtp/src/main/resources/META-INF/spring/lmtpserver-context.xml
  AL    server/protocols/protocols-lmtp/src/main/resources/lmtpserver.xml
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerFactory.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPMetricsImpl.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServerMBean.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/CommandHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/JMXHandlersLoader.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/ConnectHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/jmx/LineHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/CoreCmdHandlerLoader.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/MailetContainerHandler.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/DataLineLMTPHandler.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/MailetContainerCmdHandlerLoader.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/hook/MailboxDeliverToRecipientHandler.java
  AL    server/protocols/protocols-lmtp/src/main/java/org/apache/james/lmtpserver/NoopJamesMessageHook.java
  AL    server/protocols/protocols-lmtp/src/test/resources/lmtp.xml
  AL    server/protocols/protocols-lmtp/src/test/resources/lmtpnormaldsn.xml
  AL    server/protocols/protocols-lmtp/src/test/resources/lmtpdsn.xml
  AL    server/protocols/protocols-lmtp/src/test/resources/lmtpmailet.xml
  AL    server/protocols/protocols-lmtp/src/test/java/org/apache/james/lmtpserver/LmtpServerTest.java
  AL    server/protocols/protocols-lmtp/src/reporting-site/site.xml
  AL    server/protocols/protocols-lmtp/pom.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/webadmin.properties
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/listeners.xml
 !????? server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/dnsservice.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/lmtpserver.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/mailetcontainer.xml
 !????? server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/imapserver.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/managesieveserver.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/domainlist.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/mailrepositorystore.xml
  B     server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/keystore
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/smtpserver.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/pop3server.xml
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/ConsistencyTasksIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQReindexingWithEventDeadLettersTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQAuthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/MailReceptionCheckIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationImmutableTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQLinshareBlobExportMechanismIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/vault/RabbitMQDeletedMessageVaultIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerBlobGCIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQQuotaSearchIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerTaskSerializationIntegrationImmutableTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQWebAdminServerIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/FixingGhostMailboxTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQEventDeadLettersIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQForwardIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQUnauthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQJwtFilterIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/rabbitmq/RabbitMQFastViewProjectionHealthCheckIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/pom.xml
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationImmutableTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/WebAdminServerIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/AuthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/ExportRequest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessagesVaultRequests.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/LinshareBlobExportMechanismIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/vault/DeletedMessageVaultIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/JwtFilterIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/UnauthorizedModule.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/FastViewProjectionHealthCheckIntegrationContract.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/ForwardIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/QuotaSearchIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/src/main/java/org/apache/james/webadmin/integration/UnauthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/webadmin-integration-test-common/pom.xml
  AL    server/protocols/webadmin-integration-test/pom.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/webadmin.properties
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/listeners.xml
 !????? server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/dnsservice.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/lmtpserver.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/mailetcontainer.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/imapserver.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/managesieveserver.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/domainlist.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/mailrepositorystore.xml
  B     server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/keystore
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/smtpserver.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/pop3server.xml
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryWebAdminServerIntegrationImmutableTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUnauthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryDeletedMessageVaultIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/vault/MemoryLinshareBlobExportMechanismIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryFastViewProjectionHealthCheckIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/DisabledMetricsTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryAuthorizedEndpointsTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUsernameChangeIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryWebAdminServerIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryQuotaSearchIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryJwtFilterIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryForwardIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/java/org/apache/james/webadmin/integration/memory/MemoryUserDeletionIntegrationTest.java
  AL    server/protocols/webadmin-integration-test/memory-webadmin-integration-test/pom.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegatedAccountSetContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxSetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/UploadContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxQueryChangesContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailParseMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegatedAccountGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EchoMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaQueryMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegateSetContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaChangesMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNParseMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/SessionRoutesContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationResponseGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailQueryMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EventSourceContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/JmapRequests.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailChangesMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/BackReferenceContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/QuotaGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/VacationResponseSetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/PushSubscriptionSetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/tags/CategoryTags.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentityChangesContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ProvisioningContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodFutureReleaseContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/PushServerExtension.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailImportContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/probe/DelegationProbe.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/AuthenticationContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ThreadChangesContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/DenyAuthenticationStrategy.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/ModularizeJmapRFC8621AuthenticationStrategyContract.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/custom/authentication/strategy/AllowAuthenticationStrategy.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentitySetContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/WebPushContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/EmailSubmissionSetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/package.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxQueryMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/ThreadGetContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/CustomNamespaceContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DownloadContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DelegateGetMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/IdentityGetContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/Fixture.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/DisabledCapabilityContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MDNSendMethodContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/WebSocketContract.scala
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/scala/org/apache/james/jmap/rfc8621/contract/MailboxChangesMethodContract.scala
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/rtf.mp.alt.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_report.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested_mixed_alternative.txt
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/iso-8859-1.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mixed_alternative.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
 !????? server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
  AL    server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/pom.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/listeners.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/dnsservice.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/lmtpserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/mailetcontainer.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/imapserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/managesieveserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/domainlist.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/mailrepositorystore.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/usersrepository.xml
  B     server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/keystore
 !????? server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/smtpserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/pop3server.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDownloadTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEventSourceTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNSendMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationResponseSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryAuthenticationTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDisabledCapabilityTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryThreadGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentityGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryModularizeJmapRFC8621AuthenticationStrategyContract.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailImportTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentitySetMethodTests.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryIdentityChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegatedAccountGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryWebSocketTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryVacationResponseGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegateSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryProvisioningTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailParseMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEchoMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegatedAccountSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemorySessionRouteTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryPushSubscriptionSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryQuotaGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryBackReferenceTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailSubmissionSetMethodFutureReleaseTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryEmailQueryMethodNoViewTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryBase.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryCustomNamespaceTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMailboxQueryChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryMDNParseMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryThreadChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryCustomMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryWebPushTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryDelegateGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/memory/MemoryUploadTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/pom.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/pom.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/listeners.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/dnsservice.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/lmtpserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/mailetcontainer.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/imapserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/domainlist.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/mailrepositorystore.xml
  B     server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/keystore
 !????? server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/smtpserver.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/pop3server.xml
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedProvisioningTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebSocketTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEchoMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedSessionRouteTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodNoViewTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDownloadTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedThreadGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNParseMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedAuthenticationTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedCustomNamespaceTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentitySetTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/ReadLevelTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodtest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegateSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedIdentityGetTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedUploadTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailChangeMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedBase.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegatedAccountSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedWebPushTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailQueryMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedQuotaChangesMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedPushSubscriptionSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxChangeMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMDNSendMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegateGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSubmissionSetMethodFutureReleaseTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedEmailSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedMailboxSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedDelegatedAccountGetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedCustomMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/java/org/apache/james/jmap/rfc8621/distributed/DistributedVacationResponseSetMethodTest.java
  AL    server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/pom.xml
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/PublicKeyProvider.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/JwksPublicKeyProvider.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/DefaultPublicKeyProvider.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/JwtConfiguration.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/JwtTokenVerifier.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/TokenIntrospectionResponse.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/TokenIntrospectionException.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/introspection/IntrospectionEndpoint.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/PublicKeyReader.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/userinfo/UserinfoResponse.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/userinfo/UserInfoCheckException.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/CheckTokenClient.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/DefaultCheckTokenClient.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/OidcJwtTokenVerifier.java
  AL    server/protocols/jwt/src/main/java/org/apache/james/jwt/MissingOrInvalidKeyException.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/OidcJwtTokenVerifierTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/JwksPublicKeyProviderTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/OidcTokenFixture.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/introspection/DefaultCheckTokenClientTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/JwtConfigurationTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/JwtTokenVerifierTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/DefaultPublicKeyProviderTest.java
  AL    server/protocols/jwt/src/test/java/org/apache/james/jwt/PublicKeyReaderTest.java
  AL    server/protocols/jwt/pom.xml
  AL    server/protocols/protocols-pop3/src/main/resources/META-INF/spring/pop3server-context.xml
  AL    server/protocols/protocols-pop3/src/main/resources/pop3server.xml
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerMBean.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3Server.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/netty/POP3ServerFactory.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/CommandHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStatsMBean.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/POP3CommandHandlerStats.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/JMXHandlersLoader.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/ConnectHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/jmx/LineHandlerResultJMXMonitor.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/CoreCmdHandlerLoader.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/core/PassCmdHandler.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/DefaultMailboxAdapterFactory.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapter.java
  AL    server/protocols/protocols-pop3/src/main/java/org/apache/james/pop3server/mailbox/MailboxAdapterFactory.java
  B     server/protocols/protocols-pop3/src/test/resources/keystore
 !????? server/protocols/protocols-pop3/src/test/resources/pop3server.xml
  AL    server/protocols/protocols-pop3/src/test/java/org/apache/james/pop3server/POP3ServerTest.java
  AL    server/protocols/protocols-pop3/src/reporting-site/site.xml
  AL    server/protocols/protocols-pop3/pom.xml
  AL    server/protocols/protocols-imap4/src/main/resources/META-INF/spring/imapserver-context.xml
  AL    server/protocols/protocols-imap4/src/main/resources/imapserver.xml
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapMetrics.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/Linearalizer.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyConstants.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapHeartbeatHandler.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ChannelImapResponseWriter.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyStreamImapRequestLineReader.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapRequestLineReader.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapIdleStateHandler.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServer.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPMDCContext.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapLineHandlerAdapter.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ReactiveThrottler.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/NettyImapSession.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineBasedFrameDecoderFactory.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/AbstractNettyImapRequestLineReader.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerFactory.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/SwitchableLineBasedFrameDecoder.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/HAProxyMessageHandler.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/IMAPServerMBean.java
  AL    server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapChannelUpstreamHandler.java
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
 !????? server/protocols/protocols-imap4/src/test/resources/oauth.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
  B     server/protocols/protocols-imap4/src/test/resources/keystore.p12
 !????? server/protocols/protocols-imap4/src/test/resources/private.nopass.key
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServer.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
  B     server/protocols/protocols-imap4/src/test/resources/keystore
 !????? server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
 !????? server/protocols/protocols-imap4/src/test/resources/private.key
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
  B     server/protocols/protocols-imap4/src/test/resources/keystore.jks
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
 !????? server/protocols/protocols-imap4/src/test/resources/certs.csr
 !????? server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
 !????? server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
  AL    server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/ReactiveThrottlerTest.java
  AL    server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerTest.java
  AL    server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IpConnectionCheck.java
  AL    server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/IMAPServerConfigurationTest.java
  AL    server/protocols/protocols-imap4/src/test/java/org/apache/james/imapserver/netty/LinearalizerTest.java
  AL    server/protocols/protocols-imap4/src/reporting-site/site.xml
  AL    server/protocols/protocols-imap4/pom.xml
  AL    server/protocols/fetchmail/src/main/resources/META-INF/spring/fetchmail-context.xml
  AL    server/protocols/fetchmail/src/main/resources/fetchmail.xml
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/MessageProcessor.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/ParsedConfiguration.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchMail.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchSchedulerMBean.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/DynamicAccount.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/Account.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/ProcessorAbstract.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FetchScheduler.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/FolderProcessor.java
  AL    server/protocols/fetchmail/src/main/java/org/apache/james/fetchmail/StoreProcessor.java
  AL    server/protocols/fetchmail/src/test/java/org/apache/james/fetchmail/FetchMailTest.java
  AL    server/protocols/fetchmail/src/reporting-site/site.xml
  AL    server/protocols/fetchmail/pom.xml
 !????? server/Overview.md
 !????? server/mailet/rate-limiter-redis/redis.properties
 !????? server/mailet/rate-limiter-redis/extensions.properties
  AL    server/mailet/rate-limiter-redis/mailetcontainer.xml
 !????? server/mailet/rate-limiter-redis/docker-compose.yml
 !????? server/mailet/rate-limiter-redis/README.adoc
  AL    server/mailet/rate-limiter-redis/src/main/scala/org/apache/james/rate/limiter/redis/RedisRateLimiter.scala
  AL    server/mailet/rate-limiter-redis/src/test/java/org/apache/james/rate/limiter/RedisRateLimiterTest.scala
  AL    server/mailet/rate-limiter-redis/pom.xml
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/MockPublicKeyRecordRetriever.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/ConvertTo7Bit.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMSign.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMVerify.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/CRLFOutputStream.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/DKIMVerifier.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/MimeMessageHeaders.java
  AL    server/mailet/dkim/src/main/java/org/apache/james/jdkim/mailets/HeaderSkippingOutputStream.java
  B     server/mailet/dkim/src/test/resources/test-dkim-pkcs8.pem
  B     server/mailet/dkim/src/test/resources/test-dkim-pkcs1.pem
  AL    server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/DKIMVerifyTest.java
  AL    server/mailet/dkim/src/test/java/org/apache/james/jdkim/mailets/DKIMSignTest.java
  AL    server/mailet/dkim/pom.xml
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRemoteIntegrationTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNRelayTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/smtp/dsn/DSNLocalIntegrationTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryForwardIntegrationTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryDKIMIntegrationTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryOnSuccessTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/mailets/RemoteDeliveryErrorHandlingTest.java
  AL    server/mailet/remote-delivery-integration-testing/src/test/java/org/apache/james/SubAddressingRelayTest.java
  AL    server/mailet/remote-delivery-integration-testing/pom.xml
  AL    server/mailet/integration-testing/src/main/resources/dnsservice.xml
  AL    server/mailet/integration-testing/src/main/resources/lmtpserver.xml
 !????? server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/crypted.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/calendar.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
 !????? server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
  AL    server/mailet/integration-testing/src/main/resources/imapserver.xml
  AL    server/mailet/integration-testing/src/main/resources/managesieveserver.xml
  AL    server/mailet/integration-testing/src/main/resources/domainlist.xml
  AL    server/mailet/integration-testing/src/main/resources/mailrepositorystore.xml
  AL    server/mailet/integration-testing/src/main/resources/usersrepository.xml
  AL    server/mailet/integration-testing/src/main/resources/recipientrewritetable.xml
  B     server/mailet/integration-testing/src/main/resources/keystore
  B     server/mailet/integration-testing/src/main/resources/smime.p12
  AL    server/mailet/integration-testing/src/main/resources/smtpserver.xml
  AL    server/mailet/integration-testing/src/main/resources/pop3server.xml
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SerializableAsXml.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/SmtpConfiguration.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/MailetConfiguration.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/ProcessorConfiguration.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/CommonProcessors.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/Constants.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/configuration/MailetContainer.java
  AL    server/mailet/integration-testing/src/main/java/org/apache/james/mailets/TemporaryJamesServer.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpContentTypeTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpSizeLimitationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpNullSenderTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/StaticInputChecker.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/SMTPHeloHooksTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DeclinedHeloHook.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/OkHeloHook.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DenyHeloHook.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/RecordingHeloHook.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/extensions/hooks/DenySoftHeloHook.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpRandomStoringTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpIdentityVerificationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpBracketEnforcementTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/smtp/SmtpAuthorizedAddressesTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoopMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoClassDefFoundErrorMatcher.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ErrorMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeErrorMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ICSAttachmentWorkflowTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ErrorMatcher.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeExceptionMatcher.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/PerSenderRateLimitIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RequeueThrottlingIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/IsOverQuotaMatcherTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/NoClassDefFoundErrorMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttachmentTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneRuntimeExceptionMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ExtractAttributeStub.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ToRepositoryIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/MailReprocessingIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DomainMappingTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AliasMappingTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeExceptionMatcher.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/DlpIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeErrorMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GlobalRateLimitIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/amqp/AmqpExtension.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/RuntimeExceptionMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/OneThreadSuicideMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/GroupMappingRelayTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/transport/mailets/PerRecipientRateLimitMailetIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/CommonMailetConfigurationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DKIMIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionMailetBis.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/FirstRecipientCountingExecutions.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectMailAttributeMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ShutDownIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectingExecutionMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/NoneWithNull.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CountingExecutionTerminatingMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/None.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/CollectingExecutionMailetBis.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/AddRecipient.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/PauseThenCountingExecutionMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ClearRecipientsMailet.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/ExecutionFlowTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/flow/EnsureNotDisposed.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/GatewayRemoteDeliveryIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/WithStorageDirectiveIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SieveDelivery.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/MailetConfigurationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/configuration/SmtpConfigurationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SPFIntegrationTests.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardLoopIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/AddDeliveredToHeaderTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SenderIsLocalIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/ForwardIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/RecipientRewriteTableIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SizeGreaterThanIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MissingProcessorTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/DirectResolutionRemoteDeliveryIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/MailetErrorsTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/BounceIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/FilterForwardIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/NetworkMatcherIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/SmtpAuthIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMESignIntegrationTest.java
  AL    server/mailet/integration-testing/src/test/java/org/apache/james/mailets/crypto/SMIMEDecryptIntegrationTest.java
  AL    server/mailet/integration-testing/pom.xml
 !????? server/mailet/rate-limiter/extensions.properties
  AL    server/mailet/rate-limiter/mailetcontainer.xml
 !????? server/mailet/rate-limiter/docker-compose.yml
 !????? server/mailet/rate-limiter/README.adoc
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/EntityType.scala
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/GlobalRateLimit.scala
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerRecipientRateLimit.scala
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/transport/mailets/PerSenderRateLimit.scala
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/rate/limiter/memory/MemoryRateLimiter.scala
  AL    server/mailet/rate-limiter/src/main/scala/org/apache/james/rate/limiter/api/RateLimiter.scala
  AL    server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/GlobalRateLimitTest.scala
  AL    server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/PerSenderRateLimitTest.scala
  AL    server/mailet/rate-limiter/src/test/scala/org/apache/james/transport/mailets/PerRecipientRateLimitTest.scala
  AL    server/mailet/rate-limiter/src/test/scala/org/apache/james/rate/limiter/memory/MemoryRateLimiterTest.scala
  AL    server/mailet/rate-limiter/src/test/scala/org/apache/james/rate/limiter/api/RateLimiterContract.scala
  AL    server/mailet/rate-limiter/pom.xml
  AL    server/mailet/mailets/src/main/scala/org/apache/james/transport/mailets/XOriginatingIpInNetwork.scala
  AL    server/mailet/mailets/src/main/resources/sieveConfig.xml
 !????? server/mailet/mailets/src/main/resources/managesieve.help.txt
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/MimeMessageBodyGenerator.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/SenderUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/RecipientsUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/SizeUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/SpecialAddressesUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/Patterns.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/MailAddressUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/ReplyToUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/util/TosUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/NetworkIsInWhitelist.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteDeliveryFailedWithSMTPCode.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/package.html
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsSenderInRRTLoop.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNSuccessRequested.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentError.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsOverQuota.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteAddrInNetwork.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNFailureRequested.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractNetworkMatcher.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/HasPriority.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpRulesLoader.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/Dlp.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/dlp/DlpDomainRules.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/DSNDelayRequested.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AtLeastPriority.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/InSpammerBlacklist.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/SenderInFakeDomain.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsMarkedAsSpam.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/RemoteAddrNotInNetwork.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsRemoteDeliveryTemporaryError.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractSQLWhitelistMatcher.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/IsInWhiteList.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AtMostPriority.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/matchers/AbstractPriorityMatcher.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/transcode/MessageToCoreToMessage.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailet.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/RedirectNotify.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/AddressExtractor.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MessageAlteringUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/SpecialAddress.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetInitParameters.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/InitParameters.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessage.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/LoadedOnceInitParameters.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/RedirectMailetInitParameters.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/ProcessRedirectNotify.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/TypeCode.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/SpecialAddressKind.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/MailModifier.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/redirect/InitParametersSerializer.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionDispatcher.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/MailAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/FileIntoAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/DiscardAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionContext.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RedirectAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ActionUtils.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SievePoster.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutor.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/delivery/SieveFailureMessageComposer.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/Poster.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/ResourceLocator.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/SieveMailAdapter.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/VacationReply.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/KeepAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/jsieve/RejectAction.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Bounce.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/SPF.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/package.html
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToPlainText.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/LocalDelivery.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RandomStoring.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToRepository.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Redirect.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DnsHelper.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerToHost.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MessageComposer.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Bouncer.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Delay.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/ExecutionResult.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/HeloNameProvider.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/EnhancedMessagingException.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnable.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/Repeat.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DelaysAndMaxRetry.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRetriesHelper.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/InternetAddressConverter.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryConfiguration.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrer.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/remote/delivery/AddressesArrayToMailAddressListConverter.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Sieve.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifySender.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RemoteDelivery.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithStorageDirective.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Forward.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderFolder.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppender.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImpl.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/SimpleMailStore.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailDispatcher.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/delivery/MailStore.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/MetricsMailet.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationMailet.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Resend.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WithPriority.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/FromRepository.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/DSNBounce.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/Requeue.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/ToSenderDomainRepository.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/NotifyPostmaster.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessor.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/WhiteListManager.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/RecipientRewriteTable.java
  AL    server/mailet/mailets/src/main/java/org/apache/james/transport/mailets/VacationReply.java
  AL    server/mailet/mailets/src/test/scala/org/apache/james/transport/mailets/XOriginatingIpInNetworkSpec.scala
 !????? server/mailet/mailets/src/test/resources/noReplyTo.eml
 !????? server/mailet/mailets/src/test/resources/spamMail.eml
 !????? server/mailet/mailets/src/test/resources/eml/gmail.eml
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeFromOtherSender.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/headerEncodedFolded.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllResend-From.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllFrom.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/discard.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/true.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationDaysReason.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofAllTrue.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/stop.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationMime.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationSubjectFromReason.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressDomain.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/redirect.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/reject.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/keep.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyRawInvalid.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyTextMatch.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentMatch.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressLocalPart.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeFrom.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllSender.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/exists.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/false.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllBcc.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllCc.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllResend-To.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyTextInvalid.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeTo.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofOneFalse.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/addressAllTo.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/sizeOver.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentInvalid.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/notFalse.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofOneFalse.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/envelopeToOtherReceiver.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationReasonAndFileInto.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/header.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyContentWrongContentType.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/allofAllFalse.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/doubleVacation.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationDaysAddressesReason.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/notTrue.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofAllFalse.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/bodyRawMatch.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/sizeUnder.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/vacationReason.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/fileinto.script
  AL    server/mailet/mailets/src/test/resources/org/apache/james/transport/mailets/delivery/anyofAllTrue.script
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/TosUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/SenderUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/SizeUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/RecipientsUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/MailAddressUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/MimeMessageBodyGeneratorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/ReplyToUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/util/SpecialAddressesUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/InSpammerBlacklistTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/AtMostPriorityTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteAddrNotInNetworkTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsOverQuotaTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNDelayRequestedTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsMarkedAsSpamTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNFailureRequestedTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteAddrInNetworkTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/DSNSuccessRequestedTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/AtLeastPriorityTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/dlp/DlpTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/dlp/DlpDomainRulesTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/RemoteDeliveryFailedWithSMTPCodeTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/HasPriorityTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsRemoteDeliveryPermanentErrorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsSenderInRRTLoopTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/matchers/IsRemoteDeliveryTemporaryErrorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/managesieve/ManageSieveMailetTestCase.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ForwardTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/LoadedOnceInitParametersTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/AddressExtractorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetsMessageTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/RedirectMailetInitParametersTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/MessageAlteringUtilsTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/MailModifierTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/SpecialAddressTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/redirect/NotifyMailetInitParametersTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/jsieve/delivery/SieveExecutorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/jsieve/DiscardActionTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifyPostmasterTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/BounceTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationReplyTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/MetricsMailetTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DelaysAndMaxRetryTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/MailDelivrerTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/InternetAddressConverterTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryRunningTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RepeatTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRetryHelperTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DeliveryRunnableTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/DelayTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/BouncerTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/AddressesArrayToMailAddressListConverterTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryConfigurationTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/RemoteDeliveryTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/remote/delivery/HeloNameProviderTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithPriorityTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RequeueTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResendTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/VacationMailetTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToSenderDomainRepositoryTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RedirectTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/NotifySenderTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/SPFTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailDispatcherTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/MailboxAppenderImplTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SimpleMailStoreTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/SieveIntegrationTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/delivery/LocalDeliveryTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/DSNBounceTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToPlainTextTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ToRepositoryTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableProcessorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/ResourceLocatorTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/transport/mailets/WithStorageDirectiveTest.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/HelloWorldMailet.java
  AL    server/mailet/mailets/src/test/java/org/apache/james/samples/mailets/InstrumentationMailet.java
  AL    server/mailet/mailets/src/reporting-site/site.xml
  AL    server/mailet/mailets/pom.xml
  AL    server/mailet/mailetcontainer-impl/src/main/resources/META-INF/spring/mailetcontainer-context.xml
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherConfigImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/ProcessorUtil.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/CompositeProcessorImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherMailetPair.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MatcherSplitter.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/LocalResourcesImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/JMXStateMailetProcessorListener.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/JMXStateCompositeProcessorListener.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MailProcessorManagement.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MatcherManagement.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/jmx/MailetManagement.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailetContext.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/JamesMailSpooler.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Not.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/CompositeMatcher.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Or.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/And.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/Xor.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/matchers/GenericCompositeMatcher.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MailetConfigImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/MailetProcessorImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/impl/ProcessorImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImpl.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessor.java
  AL    server/mailet/mailetcontainer-impl/src/main/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessor.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/MailetProcessorImplTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/XorTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/NotTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/OrTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/matchers/AndTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/MailetConfigImplTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/CompositeProcessorImplTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextContract.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/AutomaticallySentMailDetectorImplTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateMailetProcessorTest.java
  AL    server/mailet/mailetcontainer-impl/src/test/java/org/apache/james/mailetcontainer/lib/AbstractStateCompositeProcessorTest.java
  AL    server/mailet/mailetcontainer-impl/src/reporting-site/site.xml
  AL    server/mailet/mailetcontainer-impl/pom.xml
  AL    server/mailet/mailetcontainer-api/src/main/resources/mailetcontainer.xml
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MailProcessor.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailetManagementMBean.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailProcessorManagementMBean.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MailSpoolerMBean.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/jmx/MatcherManagementMBean.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MailetLoader.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/MatcherLoader.java
  AL    server/mailet/mailetcontainer-api/src/main/java/org/apache/james/mailetcontainer/api/LocalResources.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/ExceptionThrowingMatcher.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMatcherLoader.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMatcher.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/ExceptionThrowingMailet.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailProcessor.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailet.java
  AL    server/mailet/mailetcontainer-api/src/test/java/org/apache/james/mailetcontainer/api/mock/MockMailetLoader.java
  AL    server/mailet/mailetcontainer-api/src/reporting-site/site.xml
  AL    server/mailet/mailetcontainer-api/pom.xml
 !????? server/mailet/mock-smtp-server/README.adoc
 !????? server/mailet/mock-smtp-server/src/main/jib/logback.xml
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedEhloCommand.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/HTTPConfigurationServer.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedRcptToCommand.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ExtendedMailFromCommand.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockMessageHandler.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSMTPBehavior.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviors.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Response.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mails.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPCommand.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPExtensions.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Condition.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Mail.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/Operator.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/SMTPExtension.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorInformation.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServerMain.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressSerializer.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressModule.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/jackson/MailAddressDeserializer.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/MockSMTPServer.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ReceivedMailRepository.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/ConfigurationClient.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepository.java
  AL    server/mailet/mock-smtp-server/src/main/java/org/apache/james/mock/smtp/server/testing/MockSmtpServerExtension.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/MockSMTPServerTest.java
 !????? server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPBehaviorRepositoryTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/HTTPConfigurationServerTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/ResponseTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MailsTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/OperatorTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSmtpBehaviorsTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/ConditionTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/model/MockSMTPBehaviorInformationTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ReceivedMailRepositoryTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/jackson/MailAddressModuleTest.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/Fixture.java
  AL    server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/SMTPCommandTest.java
  AL    server/mailet/mock-smtp-server/pom.xml
  AL    server/container/spring/src/main/resources/META-INF/spring/loaders-context.xml
  AL    server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authenticator.xml
  AL    server/container/spring/src/main/resources/META-INF/org/apache/james/spring-mailbox-authorizator.xml
  AL    server/container/spring/src/main/resources/META-INF/org/apache/james/spring-server.xml
  N     server/container/spring/src/main/resources/META-INF/org/apache/james/README
  AL    server/container/spring/src/main/appended-resources/supplemental-models.xml
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurableBeanPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProvider.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/AbstractLifecycleBeanPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/lifecycle/ConfigurationProviderImpl.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/resource/JamesResourceLoader.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/resource/SpringUserEntityValidator.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/resource/DefaultJamesResourceLoader.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/filesystem/FileSystemImpl.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/filesystem/ResourceLoaderFileSystem.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/MaxQuotaConfigurationReader.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/mailbox/SpringResolver.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/context/web/JamesServerWebApplicationContext.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/context/JamesServerApplicationContext.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/protocols/ProtocolHandlerLoaderBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailrepositorystore/MailRepositoryStoreBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/AbstractBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/MailetLoaderBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/AbstractLoaderBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factory/mailetcontainer/MatcherLoaderBeanFactory.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/IndexerConfigurationBeanFactoryPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/FileSystemBeanFactoryPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/QuotaBeanFactoryPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/ConfigurationBeanFactoryPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/factorypostprocessor/MailboxConfigurationBeanFactoryPostProcessor.java
  AL    server/container/spring/src/main/java/org/apache/james/container/spring/bean/AbstractBeanFactory.java
  AL    server/container/spring/src/test/java/org/apache/james/container/spring/filesystem/FileSystemImplTest.java
  AL    server/container/spring/src/reporting-site/site.xml
  AL    server/container/spring/pom.xml
  AL    server/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/JamesDirectoriesProvider.java
  AL    server/container/filesystem-api/src/main/java/org/apache/james/filesystem/api/FileSystem.java
 !????? server/container/filesystem-api/src/test/resources/classpathTest.txt
 !????? server/container/filesystem-api/src/test/resources/class path Test.txt
  AL    server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/AbstractFileSystemTest.java
  AL    server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/FileSystemFixture.java
  AL    server/container/filesystem-api/src/test/java/org/apache/james/filesystem/api/mock/MockFileSystem.java
  AL    server/container/filesystem-api/src/reporting-site/site.xml
  AL    server/container/filesystem-api/pom.xml
  AL    server/container/util/src/main/java/org/apache/james/util/io/InputStreamConsummer.java
  AL    server/container/util/src/main/java/org/apache/james/util/io/ZeroedInputStream.java
  AL    server/container/util/src/main/java/org/apache/james/util/io/CountDownConsumeInputStream.java
  AL    server/container/util/src/main/java/org/apache/james/util/io/CurrentPositionInputStream.java
  AL    server/container/util/src/main/java/org/apache/james/util/io/InputStreamUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/io/BodyOffsetInputStream.java
  AL    server/container/util/src/main/java/org/apache/james/util/FunctionalUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/RestrictingRMISocketFactory.java
  AL    server/container/util/src/main/java/org/apache/james/util/MDCStructuredLogger.java
  AL    server/container/util/src/main/java/org/apache/james/util/reactor/Constants.java
  AL    server/container/util/src/main/java/org/apache/james/util/ValuePatch.java
  AL    server/container/util/src/main/java/org/apache/james/util/ClassLoaderUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/GuavaUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/DurationParser.java
  AL    server/container/util/src/main/java/org/apache/james/util/UnitParser.java
  AL    server/container/util/src/main/java/org/apache/james/util/Runnables.java
  AL    server/container/util/src/main/java/org/apache/james/util/streams/Offset.java
  AL    server/container/util/src/main/java/org/apache/james/util/streams/Iterables.java
  AL    server/container/util/src/main/java/org/apache/james/util/streams/Iterators.java
  AL    server/container/util/src/main/java/org/apache/james/util/streams/Limit.java
  AL    server/container/util/src/main/java/org/apache/james/util/LoggingLevel.java
  AL    server/container/util/src/main/java/org/apache/james/util/IteratorWrapper.java
  AL    server/container/util/src/main/java/org/apache/james/util/StructuredLogger.java
  AL    server/container/util/src/main/java/org/apache/james/util/AuditTrail.java
  AL    server/container/util/src/main/java/org/apache/james/util/Size.java
  AL    server/container/util/src/main/java/org/apache/james/util/mime/MessageContentExtractor.java
  AL    server/container/util/src/main/java/org/apache/james/util/MemoizedSupplier.java
  AL    server/container/util/src/main/java/org/apache/james/util/ReactorUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/html/HtmlTextExtractor.java
  AL    server/container/util/src/main/java/org/apache/james/util/StreamUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/DataChunker.java
  AL    server/container/util/src/main/java/org/apache/james/util/date/ZonedDateTimeProvider.java
  AL    server/container/util/src/main/java/org/apache/james/util/date/DefaultZonedDateTimeProvider.java
  AL    server/container/util/src/main/java/org/apache/james/util/date/ImapDateTimeFormatter.java
  AL    server/container/util/src/main/java/org/apache/james/util/MimeMessageUtil.java
  AL    server/container/util/src/main/java/org/apache/james/util/SizeFormat.java
  AL    server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledScheduledThreadPoolExecutor.java
  AL    server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledScheduledThreadPoolExecutorMBean.java
  AL    server/container/util/src/main/java/org/apache/james/util/concurrent/NamedThreadFactory.java
  AL    server/container/util/src/main/java/org/apache/james/util/concurrent/JMXEnabledThreadPoolExecutorMBean.java
  AL    server/container/util/src/main/java/org/apache/james/util/OptionalUtils.java
  AL    server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java
  AL    server/container/util/src/main/java/org/apache/james/util/sql/JDBCUtil.java
  AL    server/container/util/src/main/java/org/apache/james/util/sql/SqlResources.java
  AL    server/container/util/src/main/java/org/apache/james/util/concurrency/ConcurrentTestRunner.java
  AL    server/container/util/src/test/java/org/apache/james/util/AuditTrailTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/DataChunkerTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/io/CurrentPositionInputStreamTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/ReactorUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/BodyOffsetInputStreamTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/DurationParserTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/RunnablesTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/FunctionalUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/IteratorWrapperTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/OptionalUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/streams/OffsetTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/streams/IteratorsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/streams/ImmutableCollectorsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/streams/LimitTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/MemoizedSupplierTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/CommutativityCheckerTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/StreamUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/InputStreamUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/SizeTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/mime/MessageContentExtractorTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/MDCBuilderTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/date/ImapDateTimeFormatterTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/LoggingLevelTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/CommutativityChecker.java
  AL    server/container/util/src/test/java/org/apache/james/util/SizeFormatTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/GuavaUtilsTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/concurrency/ConcurrentTestRunnerTest.java
  AL    server/container/util/src/test/java/org/apache/james/util/ValuePatchTest.java
  AL    server/container/util/src/reporting-site/site.xml
  AL    server/container/util/pom.xml
  AL    server/container/feature-checks/src/main/java/org/apache/james/healthcheck/MailReceptionCheck.java
  AL    server/container/feature-checks/pom.xml
  AL    server/container/core/src/main/resources/jmx.properties
  AL    server/container/core/src/main/java/org/apache/james/server/core/package.html
  AL    server/container/core/src/main/java/org/apache/james/server/core/ContentTypeCleaner.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MimeMessageSource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/configuration/FileConfigurationProvider.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/configuration/ConfigurationProvider.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/configuration/Configuration.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStream.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MailImpl.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MissingArgumentException.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MailHeaders.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/JamesServerResourceLoader.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/InternetHeadersInputStream.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemResource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/UrlResource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/Resource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/ResourceUtils.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/ResourceFactory.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/FileSystemImpl.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/ClassPathResource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/filesystem/SimpleUrl.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MimeMessageUtil.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/Envelope.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/MimeMessageWrapper.java
  AL    server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java
 !????? server/container/core/src/test/resources/JAMES-1593.eml
 !????? server/container/core/src/test/resources/mail-containing-unicode-characters.eml
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromStreamTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MailHeadersTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/ContentTypeCleanerTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/configuration/BasicConfigurationTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MailImplTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageInputStreamSourceTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/filesystem/FileSystemImplTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/filesystem/SimpleUrlTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageWrapperTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromSharedStreamTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageUtilTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/EnvelopeTest.java
  AL    server/container/core/src/test/java/org/apache/james/server/core/MimeMessageFromMimeMessageTest.java
  AL    server/container/core/src/reporting-site/site.xml
  AL    server/container/core/pom.xml
  AL    server/container/mailbox-adapter/src/main/resources/mailbox.xml
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/DelegationStoreAuthorizator.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/QuotaUsernameChangeTaskStep.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/ACLUsernameChangeTaskStep.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/UserRepositoryAuthenticator.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxUserDeletionTaskStep.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/UserRepositoryAuthorizator.java
  AL    server/container/mailbox-adapter/src/main/java/org/apache/james/adapter/mailbox/MailboxUsernameChangeTaskStep.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/QuotaUsernameChangeTaskStepTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/UserRepositoryAuthenticatorTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/DelegationStoreAuthorizatorTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxUsernameChangeTaskStepTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/UserRepositoryAuthorizatorTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/MailboxUserDeletionTaskStepTest.java
  AL    server/container/mailbox-adapter/src/test/java/org/apache/james/adapter/mailbox/ACLUsernameChangeTaskStepTest.java
  AL    server/container/mailbox-adapter/src/reporting-site/site.xml
  AL    server/container/mailbox-adapter/pom.xml
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/event/JMAPEventBusModule.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/event/RabbitMQEventBusModule.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/DistributedTaskManagerModule.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreConfiguration.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooser.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreChoosingModule.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/blobstore/BlobStoreModulesChooser.java
  AL    server/container/guice/distributed/src/main/java/org/apache/james/modules/DistributedTaskSerializationModule.java
  AL    server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreConfigurationTest.java
  AL    server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreModulesChooserTest.java
  AL    server/container/guice/distributed/src/test/java/org/apache/james/modules/blobstore/BlobStoreCacheModulesChooserTest.java
  AL    server/container/guice/distributed/pom.xml
  AL    server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraRecipientRewriteTableModule.java
  AL    server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraUsersRepositoryModule.java
  AL    server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDomainListModule.java
  AL    server/container/guice/data-cassandra/src/main/java/org/apache/james/modules/data/CassandraDelegationStoreModule.java
  AL    server/container/guice/data-cassandra/pom.xml
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPADomainListModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPADataModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAEntityManagerModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAMailRepositoryModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAAuthorizatorModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPAUsersRepositoryModule.java
  AL    server/container/guice/jpa-common/src/main/java/org/apache/james/modules/data/JPARecipientRewriteTableModule.java
  AL    server/container/guice/jpa-common/src/test/java/org/apache/james/TestJPAConfigurationModule.java
  AL    server/container/guice/jpa-common/src/test/java/org/apache/james/TestJPAConfigurationModuleWithSqlValidation.java
  AL    server/container/guice/jpa-common/pom.xml
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/SearchModuleChooser.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/SearchConfiguration.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchDisabledModule.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchQuotaSearcherModule.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchStartUpCheck.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchClientModule.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxConfigurationModule.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/TikaConfigurationReader.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/TikaMailboxModule.java
  AL    server/container/guice/opensearch/src/main/java/org/apache/james/modules/mailbox/OpenSearchMailboxModule.java
  AL    server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/SearchOverrideA.java
  AL    server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/SearchOverrideB.java
  AL    server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/TikaConfigurationReaderTest.java
  AL    server/container/guice/opensearch/src/test/java/org/apache/james/modules/mailbox/OpenSearchMailboxModuleTest.java
  AL    server/container/guice/opensearch/src/test/java/org/apache/james/SearchConfigurationTest.java
  AL    server/container/guice/opensearch/pom.xml
  AL    server/container/guice/memory/src/main/java/org/apache/james/FakeMessageSearchIndex.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/eventstore/MemoryEventStoreModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryMailboxModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/mailbox/MemoryQuotaSearchModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDataModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryUsersRepositoryModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDataJmapModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/modules/data/MemoryDelegationStoreModule.java
  AL    server/container/guice/memory/src/main/java/org/apache/james/FakeSearchMailboxModule.java
  AL    server/container/guice/memory/pom.xml
 !????? server/container/guice/memory/README.md
  AL    server/container/guice/queue/memory/src/main/java/org/apache/james/modules/queue/memory/MemoryMailQueueModule.java
  AL    server/container/guice/queue/memory/pom.xml
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQMailQueueModule.java
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/SpoolerReconnectionHandler.java
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/RabbitMQModule.java
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/FakeMailQueueViewModule.java
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/MailQueueViewChoice.java
  AL    server/container/guice/queue/rabbitmq/src/main/java/org/apache/james/modules/queue/rabbitmq/CassandraMailQueueViewModule.java
  AL    server/container/guice/queue/rabbitmq/pom.xml
  AL    server/container/guice/queue/activemq/src/main/java/org/apache/james/modules/queue/activemq/ActiveMQQueueModule.java
  AL    server/container/guice/queue/activemq/pom.xml
  AL    server/container/guice/queue/pulsar/src/main/java/org/apache/james/queue/pulsar/module/PulsarQueueModule.java
  AL    server/container/guice/queue/pulsar/src/main/java/org/apache/james/queue/pulsar/module/PulsarMailQueueViewModule.java
  AL    server/container/guice/queue/pulsar/pom.xml
  AL    server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReader.java
  AL    server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreModule.java
  AL    server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BucketModule.java
  AL    server/container/guice/blob/s3/src/main/java/org/apache/james/modules/objectstorage/S3BlobStoreConfigurationReader.java
  AL    server/container/guice/blob/s3/src/test/java/org/apache/james/modules/objectstorage/aws/s3/DockerAwsS3TestRule.java
  AL    server/container/guice/blob/s3/src/test/java/org/apache/james/modules/objectstorage/aws/s3/AwsS3ConfigurationReaderTest.java
  AL    server/container/guice/blob/s3/pom.xml
  AL    server/container/guice/blob/memory/src/main/java/org/apache/james/modules/BlobMemoryModule.java
  AL    server/container/guice/blob/memory/pom.xml
  AL    server/container/guice/blob/export/src/main/java/org/apache/james/modules/BlobExportImplChoice.java
  AL    server/container/guice/blob/export/src/main/java/org/apache/james/modules/BlobExportMechanismModule.java
  AL    server/container/guice/blob/export/src/main/java/org/apache/james/modules/LocalFileBlobExportMechanismModule.java
  AL    server/container/guice/blob/export/src/main/java/org/apache/james/modules/LinshareBlobExportMechanismModule.java
  AL    server/container/guice/blob/export/src/test/java/org/apache/james/modules/BlobExportMechanismModuleTest.java
  AL    server/container/guice/blob/export/src/test/java/org/apache/james/modules/LinshareGuiceExtension.java
  AL    server/container/guice/blob/export/src/test/java/org/apache/james/modules/BlobExportImplChoiceTest.java
  AL    server/container/guice/blob/export/pom.xml
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StoragePolicyConfigurationSanityEnforcementModule.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyModule.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyAggregate.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/RegisterStorageStrategy.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/EventsourcingStorageStrategy.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyChangedDTO.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyChanged.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/RegisterStorageStrategyCommandHandler.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/BlobStoreConfigurationValidationStartUpCheck.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystem.java
  AL    server/container/guice/blob/deduplication-gc/src/main/java/org/apache/james/modules/blobstore/BlobDeduplicationGCModule.java
  AL    server/container/guice/blob/deduplication-gc/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyValidationEventSourcingSystemTest.java
  AL    server/container/guice/blob/deduplication-gc/src/test/java/org/apache/james/modules/blobstore/validation/StorageStrategyChangedDTOTest.java
  AL    server/container/guice/blob/deduplication-gc/pom.xml
  AL    server/container/guice/blob/api/src/main/java/org/apache/james/modules/mailbox/BlobStoreAPIModule.java
  AL    server/container/guice/blob/api/src/main/java/org/apache/james/modules/mailbox/ConfigurationComponent.java
  AL    server/container/guice/blob/api/pom.xml
  AL    server/container/guice/data-ldap/src/main/java/org/apache/james/data/UsersRepositoryModuleChooser.java
  AL    server/container/guice/data-ldap/src/main/java/org/apache/james/data/LdapUsersRepositoryModule.java
  AL    server/container/guice/data-ldap/src/test/java/org/apache/james/data/DockerLdapRule.java
  AL    server/container/guice/data-ldap/src/test/java/org/apache/james/data/LdapTestExtension.java
  AL    server/container/guice/data-ldap/pom.xml
  AL    server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAQuotaSearchModule.java
  AL    server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JpaQuotaModule.java
  AL    server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/JPAMailboxModule.java
  AL    server/container/guice/mailbox-jpa/src/main/java/org/apache/james/modules/mailbox/LuceneSearchMailboxModule.java
  AL    server/container/guice/mailbox-jpa/pom.xml
  AL    server/container/guice/sieve-jpa/src/main/java/org/apache/james/modules/data/SieveJPARepositoryModules.java
  AL    server/container/guice/sieve-jpa/pom.xml
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/InitilizationOperationBuilder.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/UserDefinedStartable.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/PropertiesProvider.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/GuiceProbe.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/KeystoreCreator.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/InitializationOperation.java
  AL    server/container/guice/configuration/src/main/java/org/apache/james/utils/DelegatedPropertiesConfiguration.java
 !????? server/container/guice/configuration/src/test/resources/b.properties
 !????? server/container/guice/configuration/src/test/resources/a.properties
 !????? server/container/guice/configuration/src/test/resources/env.properties
  AL    server/container/guice/configuration/src/test/java/org/apache/james/utils/PropertiesProviderTest.java
  AL    server/container/guice/configuration/src/test/java/org/apache/james/utils/PropertiesProviderFromEnvVariablesTest.java
  AL    server/container/guice/configuration/pom.xml
  AL    server/container/guice/common/src/main/java/org/apache/james/PeriodicalHealthChecks.java
  AL    server/container/guice/common/src/main/java/org/apache/james/NaiveDelegationStoreModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/IsStartedProbe.java
  AL    server/container/guice/common/src/main/java/org/apache/james/ConfigurationSanitizingPerformer.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/CommonServicesModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/StartUpChecksModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/RunArgumentsModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/ClockModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/MailetProcessingModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/StartablesModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/PeriodicalHealthChecksModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/protocols/ProtocolHandlerModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/ErrorMailRepositoryEmptyHealthCheckModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/DefaultProcessorsConfigurationProviderModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/DropWizardMetricsModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/TaskManagerModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/DNSServiceModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/HostnameModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/RawPostDequeueDecoratorModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/TaskSerializationModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/LoggingMetricsModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/server/MailStoreRepositoryModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/CleanupTaskModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/MimeMessageModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/modules/IsStartedProbeModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/CoreDataModule.java
  AL    server/container/guice/common/src/main/java/org/apache/james/TemporaryJamesServer.java
  AL    server/container/guice/common/src/main/java/org/apache/james/GuiceLifecycleHealthCheck.java
  AL    server/container/guice/common/src/main/java/org/apache/james/JamesServerMain.java
  AL    server/container/guice/common/src/main/java/org/apache/james/ProtocolConfigurationSanitizer.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/InitializationOperations.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/MailboxManagerDefinition.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/Startables.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/DataProbeImpl.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/MailRepositoryProbeImpl.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/FilteringManagementProbeImpl.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/GuiceProbeProvider.java
  AL    server/container/guice/common/src/main/java/org/apache/james/utils/GuiceProtocolHandlerLoader.java
  AL    server/container/guice/common/src/main/java/org/apache/james/ExtraProperties.java
  AL    server/container/guice/common/src/main/java/org/apache/james/StartUpChecksPerformer.java
  AL    server/container/guice/common/src/main/java/org/apache/james/PeriodicalHealthChecksConfiguration.java
  AL    server/container/guice/common/src/main/java/org/apache/james/GuiceJamesServer.java
  AL    server/container/guice/common/src/main/java/org/apache/james/RunArguments.java
  AL    server/container/guice/common/src/main/java/org/apache/james/CleanupTasksPerformer.java
 !????? server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
  AL    server/container/guice/common/src/test/resources/test.xml
 !????? server/container/guice/common/src/test/resources/test.properties
  AL    server/container/guice/common/src/test/java/org/apache/james/AggregateJunitExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/GuiceModuleTestExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/JamesServerContract.java
  AL    server/container/guice/common/src/test/java/org/apache/james/MailsShouldBeWellReceived.java
  AL    server/container/guice/common/src/test/java/org/apache/james/PeriodicalHealthChecksConfigurationTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/modules/InitializationOperationsTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/GuiceModuleTestRule.java
  AL    server/container/guice/common/src/test/java/org/apache/james/PeriodicalHealthChecksTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/JamesServerBuilder.java
  AL    server/container/guice/common/src/test/java/org/apache/james/TempFilesystemTestRule.java
  AL    server/container/guice/common/src/test/java/org/apache/james/RegistrableExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/utils/FileConfigurationProviderTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/utils/FailingPropertiesProvider.java
  AL    server/container/guice/common/src/test/java/org/apache/james/utils/ConfigurablesTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/utils/GuiceProbeProviderTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/TemporaryFolderRegistrableExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/ClockExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/JamesServerExtension.java
  AL    server/container/guice/common/src/test/java/org/apache/james/StartUpChecksPerformerTest.java
  AL    server/container/guice/common/src/test/java/org/apache/james/FakePropertiesProvider.java
  AL    server/container/guice/common/src/test/java/org/apache/james/AggregateGuiceModuleTestRule.java
  AL    server/container/guice/common/pom.xml
  AL    server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServer.java
  AL    server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JMXServerModule.java
  AL    server/container/guice/jmx/src/main/java/org/apache/james/modules/server/JmxConfiguration.java
  AL    server/container/guice/jmx/src/main/java/org/apache/james/utils/GuiceMailboxManagerResolver.java
  AL    server/container/guice/jmx/src/test/java/org/apache/james/modules/server/JmxConfigurationTest.java
  AL    server/container/guice/jmx/pom.xml
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/LifeCycleStageModule.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/NoOpStageableTypeMapper.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractMethodTypeListener.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageHandler.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/NoOpStageHandler.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageableMethod.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/Stageable.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractStageable.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/AbstractBasicStageable.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/PreDestroyModule.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/LifeCycleModule.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/DefaultStager.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/DisposingStager.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/StageableTypeMapper.java
  AL    server/container/guice/onami/src/main/java/org/apache/james/onami/lifecycle/Stager.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationB.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationA.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/DefaultStagerTestCase.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StageObject2.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StageObject1.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/StagingOrderTestCase.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/MultiLifeCycleObject.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/TestAnnotationC.java
  AL    server/container/guice/onami/src/test/java/org/apache/james/onami/lifecycle/MultiLifeCycleTestCase.java
  AL    server/container/guice/onami/pom.xml
  AL    server/container/guice/sieve-file/src/main/java/org/apache/james/modules/data/SieveFileRepositoryModule.java
  AL    server/container/guice/sieve-file/pom.xml
  AL    server/container/guice/pom.xml
  AL    server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SMTPServerModule.java
  AL    server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/SmtpGuiceProbe.java
  AL    server/container/guice/protocols/smtp/src/main/java/org/apache/james/modules/protocols/JSPFModule.java
  AL    server/container/guice/protocols/smtp/pom.xml
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/WebAdminServer.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/TaskRoutesModule.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/HealthCheckRoutesModule.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/NoJwtModule.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/ServerRouteModule.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/modules/server/WebAdminServerModule.java
  AL    server/container/guice/protocols/webadmin/src/main/java/org/apache/james/utils/WebAdminGuiceProbe.java
 !????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
 !????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
 !????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
 !????? server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
  AL    server/container/guice/protocols/webadmin/src/test/java/org/apache/james/modules/server/WebAdminServerModuleTest.java
  AL    server/container/guice/protocols/webadmin/pom.xml
  AL    server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/UserIdentityModule.java
  AL    server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTasksModule.java
  AL    server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-jmap/src/main/java/org/apache/james/modules/server/JmapUploadCleanupModule.java
  AL    server/container/guice/protocols/webadmin-jmap/pom.xml
  AL    server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LMTPServerModule.java
  AL    server/container/guice/protocols/lmtp/src/main/java/org/apache/james/modules/protocols/LmtpGuiceProbe.java
  AL    server/container/guice/protocols/lmtp/pom.xml
  AL    server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoriesRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailrepository/src/main/java/org/apache/james/modules/server/MailRepositoryTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-mailrepository/pom.xml
  AL    server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-mailqueue/src/main/java/org/apache/james/modules/server/MailQueueRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailqueue/pom.xml
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesBackupModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxExportTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/ReIndexingModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesExportRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/InconsistencyQuotasSolvingRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MessagesRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebadminMailboxTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/MailboxesRoutesModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/src/main/java/org/apache/james/modules/server/WebAdminReIndexingTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-mailbox/pom.xml
  AL    server/container/guice/protocols/netty/pom.xml
  AL    server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/VacationRoutesModule.java
  AL    server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DLPRoutesModule.java
  AL    server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/DataRoutesModules.java
  AL    server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/server/SieveRoutesModule.java
  AL    server/container/guice/protocols/webadmin-data/src/main/java/org/apache/james/modules/blobstore/server/BlobRoutesModules.java
  AL    server/container/guice/protocols/webadmin-data/pom.xml
  AL    server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/Pop3GuiceProbe.java
  AL    server/container/guice/protocols/pop/src/main/java/org/apache/james/modules/protocols/POP3ServerModule.java
  AL    server/container/guice/protocols/pop/pom.xml
  AL    server/container/guice/protocols/jmap/src/main/resources/defaultJmapMailetContainer.xml
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/MessageIdProbe.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JmapConfigurationSanitizer.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/DraftMethodsModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPCommonModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPConfigurationStartUpCheck.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JmapGuiceProbe.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/draft/JMAPListenerModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/jmap/rfc8621/RFC8621MethodsModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JmapEventBusModule.java
  AL    server/container/guice/protocols/jmap/src/main/java/org/apache/james/modules/protocols/JMAPServerModule.java
  AL    server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JmapJamesServerContract.java
  AL    server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/JMAPModuleTest.java
  AL    server/container/guice/protocols/jmap/src/test/java/org/apache/james/jmap/draft/MailetPreconditionTest.java
  AL    server/container/guice/protocols/jmap/src/test/java/org/apache/james/modules/TestJMAPServerModule.java
  AL    server/container/guice/protocols/jmap/pom.xml
  AL    server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ConnectionCheckFactoryImpl.java
  AL    server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapPackage.java
  AL    server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/IMAPServerModule.java
  AL    server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/ImapGuiceProbe.java
  AL    server/container/guice/protocols/imap/src/main/java/org/apache/james/modules/protocols/DefaultImapPackage.java
  AL    server/container/guice/protocols/imap/pom.xml
  AL    server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/ManageSieveServerModule.java
  AL    server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveProbeImpl.java
  AL    server/container/guice/protocols/managedsieve/src/main/java/org/apache/james/modules/protocols/SieveModule.java
  AL    server/container/guice/protocols/managedsieve/pom.xml
  AL    server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/RabbitMailQueueTaskSerializationModule.java
  AL    server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/RabbitMailQueueRoutesModule.java
  AL    server/container/guice/protocols/webadmin-rabbitmq-mailqueue/src/main/java/org/apache/james/modules/server/BrowseStartTaskModule.java
  AL    server/container/guice/protocols/webadmin-rabbitmq-mailqueue/pom.xml
  AL    server/container/guice/protocols/webadmin-mail-over-web/src/main/java/org/apache/james/modules/server/WebAdminMailOverWebModule.java
  AL    server/container/guice/protocols/webadmin-mail-over-web/pom.xml
  AL    server/container/guice/mailet/src/main/java/org/apache/james/modules/server/DKIMMailetModule.java
  AL    server/container/guice/mailet/src/main/java/org/apache/james/modules/server/MailetContainerModule.java
  AL    server/container/guice/mailet/src/main/java/org/apache/james/utils/MailetConfigurationOverride.java
  AL    server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMatcherLoader.java
  AL    server/container/guice/mailet/src/main/java/org/apache/james/utils/GuiceMailetLoader.java
  AL    server/container/guice/mailet/src/main/java/org/apache/james/utils/SpoolerProbe.java
  A     server/container/guice/mailet/src/test/resources/recursive/extensions-jars/james-server-guice-custom-mailets-3.5.0-SNAPSHOT-jar-with-dependencies.jar
  A     server/container/guice/mailet/src/test/resources/recursive/extensions-jars/custom-mailets-implementation-3.5.0-SNAPSHOT.jar
  AL    server/container/guice/mailet/src/test/java/org/apache/james/transport/matchers/sub/TestMatcher.java
  AL    server/container/guice/mailet/src/test/java/org/apache/james/transport/mailets/sub/TestMailet.java
  AL    server/container/guice/mailet/src/test/java/org/apache/james/modules/server/MailetContainerModuleTest.java
  AL    server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMatcherLoaderTest.java
  AL    server/container/guice/mailet/src/test/java/org/apache/james/utils/GuiceMailetLoaderTest.java
  AL    server/container/guice/mailet/pom.xml
  AL    server/container/guice/mailrepository-blob/src/main/java/org/apache/james/modules/mailrepository/BlobstoreMailRepositoryModule.java
  AL    server/container/guice/mailrepository-blob/pom.xml
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/Names.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/ConfigurationProbe.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/QuotaProbesImpl.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/EventDeadLettersProbe.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/MailboxProbeImpl.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoader.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/FastRetryBackoffModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenerFactory.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookConfiguration.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImpl.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenerConfiguration.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ListenersConfiguration.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MailReceptionHealthCheckModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImpl.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHooksConfiguration.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookLoader.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/ReIndexingTaskSerializationModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/DefaultEventModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/PreDeletionHookModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/mailbox/MemoryDeadLetterModule.java
  AL    server/container/guice/mailbox/src/main/java/org/apache/james/modules/ACLProbeImpl.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookConfigurationTest.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ListenerConfigurationTest.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/NoopPreDeletionHook.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/NoopMailboxListener.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ConfiguredListener.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHookLoaderImplTest.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/ReactiveNoopMailboxListener.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/MailboxListenersLoaderImplTest.java
  AL    server/container/guice/mailbox/src/test/java/org/apache/james/modules/mailbox/PreDeletionHooksConfigurationTest.java
  AL    server/container/guice/mailbox/pom.xml
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/ExtensionModule.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/UserStartables.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/ExtensionConfiguration.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/FullyQualifiedClassName.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/GuiceGenericLoader.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/NamingScheme.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/ExtendedClassLoader.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/ClassName.java
  AL    server/container/guice/utils/src/main/java/org/apache/james/utils/PackageName.java
 !????? server/container/guice/utils/src/test/resources/extensions-empty.properties
 !????? server/container/guice/utils/src/test/resources/extensions-two.properties
 !????? server/container/guice/utils/src/test/resources/extensions-none.properties
 !????? server/container/guice/utils/src/test/resources/extensions-one.properties
  AL    server/container/guice/utils/src/test/java/org/apache/james/utils/NamingSchemeTest.java
  AL    server/container/guice/utils/src/test/java/org/apache/james/utils/ExtensionConfigurationTest.java
  AL    server/container/guice/utils/src/test/java/org/apache/james/utils/ClassNameTest.java
  AL    server/container/guice/utils/src/test/java/org/apache/james/utils/PackageNameTest.java
  AL    server/container/guice/utils/src/test/java/org/apache/james/utils/FullyQualifiedClassNameTest.java
  AL    server/container/guice/utils/pom.xml
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultModule.java
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultConfigurationModule.java
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/VaultTaskSerializationModule.java
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/src/main/java/org/apache/james/modules/vault/DeletedMessageVaultRoutesModule.java
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/src/test/java/org/apache/james/modules/vault/TestDeleteMessageVaultPreDeletionHookModule.java
  AL    server/container/guice/mailbox-plugin-deleted-messages-vault/pom.xml
  AL    server/container/guice/mailrepository-loaders/src/main/java/org/apache/james/modules/mailrepository/guice/GuiceMailRepositoryLoader.java
  AL    server/container/guice/mailrepository-loaders/src/main/java/org/apache/james/modules/mailrepository/guice/MultiBoundGuiceRepositoryLoader.java
  AL    server/container/guice/mailrepository-loaders/pom.xml
  AL    server/container/guice/mailrepository-cassandra/src/main/java/org/apache/james/modules/mailrepository/CassandraMailRepositoryModule.java
  AL    server/container/guice/mailrepository-cassandra/pom.xml
  AL    server/container/guice/testing/dependency/src/main/java/org/apache/james/dependency/MyDependency.java
  AL    server/container/guice/testing/dependency/pom.xml
  AL    server/container/guice/testing/custom-mailets/src/main/java/com/custom/matchers/AnotherMatcher.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/com/custom/mailets/AnotherMailet.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/matchers/CustomMatcher.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailet.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailetWithCustomDependencyInConstructor.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/MyGenericMailet.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/MyInterface.java
  AL    server/container/guice/testing/custom-mailets/src/main/java/org/apache/james/transport/mailets/CustomMailetWithCustomDependencyInService.java
  AL    server/container/guice/testing/custom-mailets/pom.xml
 !????? server/container/guice/testing/custom-mailets/README.md
  AL    server/container/guice/testing/pom.xml
  AL    server/container/guice/testing/custom-mailets-implementation/src/main/java/org/apache/james/transport/mailets/MyInterfaceImplementation.java
  AL    server/container/guice/testing/custom-mailets-implementation/src/main/java/org/apache/james/transport/mailets/MyExtensionModule.java
  AL    server/container/guice/testing/custom-mailets-implementation/pom.xml
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/metrics/CassandraMetricsModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/InconsistencySolvingRoutesModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/TasksCleanupRoutesModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/webadmin/CassandraRoutesModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/CassandraConsistencyTaskSerializationModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/eventstore/CassandraEventStoreModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/TasksCleanupTaskSerializationModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraDeadLetterModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/DefaultBucketModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSchemaVersionStartUpCheck.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraQuotaMailingModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraSessionModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraThreadIdGuessingModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/KeyspacesConfiguration.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraCacheSessionModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraBlobStoreDependenciesModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaLegacyModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraDeletedMessageVaultModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/mailbox/CassandraMailboxQuotaModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveQuotaModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraVacationModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraJmapModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraDLPConfigurationStoreModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveQuotaLegacyModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/modules/data/CassandraSieveRepositoryModule.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/server/CassandraProbe.java
  AL    server/container/guice/cassandra/src/main/java/org/apache/james/server/CassandraTruncateTableTask.java
 !????? server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
  AL    server/container/guice/cassandra/src/test/java/org/apache/james/modules/mailbox/KeyspacesConfigurationTest.java
  AL    server/container/guice/cassandra/pom.xml
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerResolver.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/QuotaManagement.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagement.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxCopierManagement.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerManagementMBean.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxCopierManagementMBean.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagementMBean.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/QuotaManagementMBean.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/MailboxManagerResolverException.java
  AL    server/container/mailbox-jmx/src/main/java/org/apache/james/adapter/mailbox/ReIndexerManagement.java
 !????? server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
  AL    server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/ReIndexerManagementTest.java
  AL    server/container/mailbox-jmx/src/test/java/org/apache/james/adapter/mailbox/MailboxManagementTest.java
  AL    server/container/mailbox-jmx/pom.xml
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Startable.java
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Configurable.java
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/LifecycleUtil.java
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/Disposable.java
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/ConfigurationSanitizer.java
  AL    server/container/lifecycle-api/src/main/java/org/apache/james/lifecycle/api/StartUpCheck.java
  AL    server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/StartUpCheckTest.java
  AL    server/container/lifecycle-api/src/test/java/org/apache/james/lifecycle/api/LeakAwareTest.java
  AL    server/container/lifecycle-api/src/reporting-site/site.xml
  AL    server/container/lifecycle-api/pom.xml
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV1.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepository.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveSpaceTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveActiveTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveQuotaTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/tables/CassandraSieveClusterQuotaTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/FakeSieveQuotaDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/SieveQuota.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/ActiveScriptInfo.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/model/Script.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/migration/SieveQuotaMigration.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV2.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/tables/CassandraDomainsTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainListModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/domainlist/cassandra/CassandraDomainList.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraMappingsSourcesDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/tables/CassandraRecipientRewriteTableTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/tables/CassandraMappingsSourcesTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskAdditionalInformationDTO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskDTO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigration.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/rrt/cassandra/CassandraRRTModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationRepository.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/tables/CassandraNotificationTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/tables/CassandraVacationTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistry.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraVacationDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationModules.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemsRemovedDTO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemAddedDTO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/dlp/eventsourcing/cassandra/DLPConfigurationItemDTO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/tables/CassandraUserTable.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersRepositoryModule.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraRepositoryConfiguration.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraUsersDAO.java
  AL    server/data/data-cassandra/src/main/java/org/apache/james/user/cassandra/CassandraDelegationStore.java
  B     server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_added_event_2.json
  B     server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_removed_event_2.json
  B     server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_removed_event_1.json
  B     server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/configuration_item_1.json
  B     server/data/data-cassandra/src/test/resources/json/dlp/eventsourcing/items_added_event_1.json
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveCurrentUploadUsageCalculatorTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveRepositoryTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV1Test.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/ScriptTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/model/SieveQuotaTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOContract.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveDAOTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/migration/SieveQuotaMigrationTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraActiveScriptDAOTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/sieve/cassandra/CassandraSieveQuotaDAOV2Test.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CassandraDomainListTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/domainlist/cassandra/CacheDomainListTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraRecipientRewriteTableDAOTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTaskSerializationTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/migration/MappingsSourcesMigrationTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraMappingsSourcesDAOTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/CassandraStepdefs.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/rrt/cassandra/RewriteTablesTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/vacation/cassandra/CassandraVacationRepositoryTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/vacation/cassandra/CassandraNotificationRegistryTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/DTOTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/dlp/eventsourcing/cassandra/CassandraEventSourcingDLPConfigurationStoreExtension.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraDelegationStoreTest.java
  AL    server/data/data-cassandra/src/test/java/org/apache/james/user/cassandra/CassandraUsersRepositoryTest.java
  AL    server/data/data-cassandra/pom.xml
  AL    server/data/data-library/src/main/resources/META-INF/spring/data-context.xml
  AL    server/data/data-library/src/main/java/org/apache/james/domainlist/lib/DomainListManagement.java
  AL    server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java
  AL    server/data/data-library/src/main/java/org/apache/james/domainlist/lib/EnvDetector.java
  AL    server/data/data-library/src/main/java/org/apache/james/domainlist/lib/DomainListConfiguration.java
  AL    server/data/data-library/src/main/java/org/apache/james/UserEntityValidator.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/AbstractFileRepository.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/ClassLoaderObjectInputStream.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/FilePersistentObjectRepository.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/ExtensionFileFilter.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/NumberedRepositoryFileFilter.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/file/FilePersistentStreamRepository.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/api/StreamRepository.java
  AL    server/data/data-library/src/main/java/org/apache/james/repository/api/ObjectRepository.java
  AL    server/data/data-library/src/main/java/org/apache/james/RecipientRewriteTableUserEntityValidator.java
  AL    server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableUtil.java
  AL    server/data/data-library/src/main/java/org/apache/james/rrt/lib/CanSendFromImpl.java
  AL    server/data/data-library/src/main/java/org/apache/james/rrt/lib/AliasReverseResolverImpl.java
  AL    server/data/data-library/src/main/java/org/apache/james/rrt/lib/RecipientRewriteTableManagement.java
  AL    server/data/data-library/src/main/java/org/apache/james/rrt/lib/AbstractRecipientRewriteTable.java
  AL    server/data/data-library/src/main/java/org/apache/james/sieverepository/lib/SieveRepositoryManagement.java
  AL    server/data/data-library/src/main/java/org/apache/james/AggregateUserEntityValidator.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsAdded.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsRemoved.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/EventSourcingDLPConfigurationStore.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/ClearCommandHandler.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommand.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandHandler.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/commands/ClearCommand.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPAggregateId.java
  AL    server/data/data-library/src/main/java/org/apache/james/dlp/eventsourcing/aggregates/DLPDomainConfiguration.java
  AL    server/data/data-library/src/main/java/org/apache/james/DefaultVacationService.java
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/UsersRepositoryManagement.java
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/package.html
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/model/Algorithm.java
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/model/DefaultUser.java
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/UsersRepositoryImpl.java
  AL    server/data/data-library/src/main/java/org/apache/james/user/lib/UsersDAO.java
  AL    server/data/data-library/src/main/java/org/apache/james/DefaultUserEntityValidator.java
 !????? server/data/data-library/src/test/resources/sieve/my_sieve
 !????? server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
  AL    server/data/data-library/src/test/java/org/apache/james/domainlist/api/mock/SimpleDomainList.java
  AL    server/data/data-library/src/test/java/org/apache/james/domainlist/lib/DomainListContract.java
  AL    server/data/data-library/src/test/java/org/apache/james/domainlist/lib/DomainListConfigurationTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/domainlist/lib/AbstractDomainListPrivateMethodsTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableFixture.java
  AL    server/data/data-library/src/test/java/org/apache/james/rrt/lib/RewriteTablesStepdefs.java
  AL    server/data/data-library/src/test/java/org/apache/james/rrt/lib/RecipientRewriteTableContract.java
  AL    server/data/data-library/src/test/java/org/apache/james/rrt/lib/MappingsImplTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/SieveRepositoryContract.java
  AL    server/data/data-library/src/test/java/org/apache/james/sieverepository/lib/SieveRepositoryManagementTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsAddedTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/events/ConfigurationItemsRemovedTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/StoreCommandTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/commands/ClearCommandTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/dlp/eventsourcing/aggregates/DLPAggregateIdTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/user/lib/UsersRepositoryContract.java
  AL    server/data/data-library/src/test/java/org/apache/james/user/lib/model/AlgorithmTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/user/lib/model/DefaultUserTest.java
  AL    server/data/data-library/src/test/java/org/apache/james/DefaultVacationServiceTest.java
  AL    server/data/data-library/src/reporting-site/site.xml
  AL    server/data/data-library/pom.xml
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUsersDAO.java
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepository.java
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapHealthCheck.java
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPUser.java
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/ReadOnlyLDAPGroupRestriction.java
  AL    server/data/data-ldap/src/main/java/org/apache/james/user/ldap/LdapRepositoryConfiguration.java
 !????? server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
 !????? server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
 !????? server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
 !????? server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
 !????? server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
 !????? server/data/data-ldap/src/test/resources/usersrepository-default.xml
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLocalPartAsLoginNameTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/DockerLdapSingleton.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryWithLDAPFailoverTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryInvalidDnTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapHealthCheckTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapRepositoryConfigurationTest.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/LdapGenericContainer.java
  AL    server/data/data-ldap/src/test/java/org/apache/james/user/ldap/ReadOnlyUsersLDAPRepositoryEmptyListTest.java
  AL    server/data/data-ldap/src/reporting-site/site.xml
  AL    server/data/data-ldap/pom.xml
  AL    server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainList.java
  AL    server/data/data-api/src/main/java/org/apache/james/domainlist/api/AutoDetectedDomainRemovalException.java
  AL    server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainListException.java
  AL    server/data/data-api/src/main/java/org/apache/james/domainlist/api/DomainListManagementMBean.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/ForwardUsernameChangeTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/RecipientRewriteTableUserDeletionTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/AliasReverseResolver.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/SourceDomainIsNotInDomainListException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableManagementMBean.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableConfiguration.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingConflictException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/MappingAlreadyExistsException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/LoopDetectedException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/SameSourceAndDestinationException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTableException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/CanSendFrom.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/api/InvalidRegexException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/SeparatorUtil.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/SkipMappingProcessingException.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mappings.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/Mapping.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingSource.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/MappingsImpl.java
  AL    server/data/data-api/src/main/java/org/apache/james/rrt/lib/UserRewritter.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepository.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptSummary.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveCurrentUploadUsageCalculator.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/IsActiveException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/StorageException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/QuotaExceededException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/SieveRepositoryException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/QuotaNotFoundException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/ScriptNotFoundException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/exception/DuplicateException.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveQuotaRepository.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptContent.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/SieveRepositoryManagementMBean.java
  AL    server/data/data-api/src/main/java/org/apache/james/sieverepository/api/ScriptName.java
  AL    server/data/data-api/src/main/java/org/apache/james/probe/SieveProbe.java
  AL    server/data/data-api/src/main/java/org/apache/james/probe/DataProbe.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/AccountId.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationService.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationPatch.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationRepository.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/NotificationRegistry.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/VacationDeleteUserTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/Vacation.java
  AL    server/data/data-api/src/main/java/org/apache/james/vacation/api/RecipientId.java
  AL    server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPRules.java
  AL    server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationStore.java
  AL    server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationItem.java
  AL    server/data/data-api/src/main/java/org/apache/james/dlp/api/DLPConfigurationLoader.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUserDeletionTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepositoryManagementMBean.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/DelegationUsernameChangeTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/AlreadyExistInUsersRepositoryException.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/model/User.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepositoryException.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/DeleteUserDataTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/UsernameChangeTaskStep.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/InvalidUsernameException.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/UsersRepository.java
  AL    server/data/data-api/src/main/java/org/apache/james/user/api/DelegationStore.java
  AL    server/data/data-api/src/test/resources/sieverepository.xml
  AL    server/data/data-api/src/test/resources/domainlist.xml
  AL    server/data/data-api/src/test/resources/mailrepositorystore.xml
  AL    server/data/data-api/src/test/resources/usersrepository.xml
  AL    server/data/data-api/src/test/resources/recipientrewritetable.xml
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/api/RecipientRewriteTableConfigurationTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/MappingSourceTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/DomainRewriterTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/SeparatorUtilTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/ReplaceRewriterTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/ThrowingRewriterTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/MappingTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/CanSendFromContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/rrt/lib/RegexRewriterTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/sieverepository/api/SieveCurrentUploadUsageCalculatorContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/sieverepository/api/ScriptSummaryTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/sieverepository/api/ScriptNameTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/vacation/api/AccountIdTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationPatchTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/vacation/api/NotificationRegistryContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/vacation/api/VacationRepositoryContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationItemTest.java
  AL    server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPConfigurationStoreContract.java
  AL    server/data/data-api/src/test/java/org/apache/james/dlp/api/DLPFixture.java
  AL    server/data/data-api/src/test/java/org/apache/james/user/api/DelegationStoreContract.java
  AL    server/data/data-api/src/reporting-site/site.xml
  AL    server/data/data-api/pom.xml
  AL    server/data/data-memory/src/main/java/org/apache/james/domainlist/memory/MemoryDomainList.java
  AL    server/data/data-memory/src/main/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTable.java
  AL    server/data/data-memory/src/main/java/org/apache/james/sieverepository/memory/InMemorySieveQuotaRepository.java
  AL    server/data/data-memory/src/main/java/org/apache/james/vacation/memory/MemoryVacationRepository.java
  AL    server/data/data-memory/src/main/java/org/apache/james/vacation/memory/MemoryNotificationRegistry.java
  AL    server/data/data-memory/src/main/java/org/apache/james/user/memory/NaiveDelegationStore.java
  AL    server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryDelegationStore.java
  AL    server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersRepository.java
  AL    server/data/data-memory/src/main/java/org/apache/james/user/memory/MemoryUsersDAO.java
  AL    server/data/data-memory/src/test/resources/fakemailrepositorystore.xml
  AL    server/data/data-memory/src/test/java/org/apache/james/domainlist/memory/MemoryDomainListTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/memory/MemoryRecipientRewriteTableTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/memory/RecipientRewriteTableUserDeletionTaskStepTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/memory/InMemoryStepdefs.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/memory/ForwardUsernameChangeTaskStepTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/memory/RewriteTablesTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/lib/AliasReverseResolverImplTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/rrt/lib/CanSendFromImplTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/vacation/memory/VacationDeleteUserTaskStepTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/vacation/memory/MemoryNotificationRegistryTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/vacation/memory/MemoryVacationRepositoryTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/dlp/memory/EventSourcingDLPConfigurationStoreTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/dlp/memory/InMemoryEventSourcingDLPConfigurationStoreExtension.java
  AL    server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryUsersRepositoryTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUsernameChangeTaskStepTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/user/memory/MemoryDelegationStoreTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/user/memory/UsersRepositoryManagementTest.java
  AL    server/data/data-memory/src/test/java/org/apache/james/user/memory/DelegationUserDeletionTaskStepTest.java
  AL    server/data/data-memory/pom.xml
  AL    server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/model/JPASieveScript.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/model/JPASieveQuota.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/sieve/jpa/JPASieveRepository.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/JPADomainList.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/domainlist/jpa/model/JPADomain.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersDAO.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/user/jpa/JPAUsersRepository.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/user/jpa/model/JPAUser.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/jpa/healthcheck/JPAHealthCheck.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStore.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/model/JPAMail.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/model/JPAUrl.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/MimeMessageJPASource.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryFactory.java
  AL    server/data/data-jpa/src/main/java/org/apache/james/mailrepository/jpa/JPAMailRepository.java
 !????? server/data/data-jpa/src/test/resources/log4j.properties
  AL    server/data/data-jpa/src/test/resources/persistence.xml
  AL    server/data/data-jpa/src/test/java/org/apache/james/sieve/jpa/JpaSieveRepositoryTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/domainlist/jpa/JPADomainListTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPAStepdefs.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/RewriteTablesTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/rrt/jpa/JPARecipientRewriteTableTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/user/jpa/model/JPAUserTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/user/jpa/JpaUsersRepositoryTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/jpa/healthcheck/JPAHealthCheckTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreTest.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryUrlStoreExtension.java
  AL    server/data/data-jpa/src/test/java/org/apache/james/mailrepository/jpa/JPAMailRepositoryTest.java
  AL    server/data/data-jpa/src/reporting-site/site.xml
  AL    server/data/data-jpa/pom.xml
  AL    server/data/data-file/src/main/java/org/apache/james/domainlist/xml/XMLDomainList.java
  AL    server/data/data-file/src/main/java/org/apache/james/rrt/file/XMLRecipientRewriteTable.java
  AL    server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
  AL    server/data/data-file/src/main/java/org/apache/james/mailrepository/file/Lock.java
  AL    server/data/data-file/src/main/java/org/apache/james/mailrepository/file/FileMailRepository.java
  AL    server/data/data-file/src/main/java/org/apache/james/mailrepository/file/MimeMessageStreamRepositorySource.java
 !????? server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
  AL    server/data/data-file/src/test/java/org/apache/james/domainlist/xml/XMLDomainListTest.java
  AL    server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLStepdefs.java
  AL    server/data/data-file/src/test/java/org/apache/james/rrt/file/XMLRecipientRewriteTableTest.java
  AL    server/data/data-file/src/test/java/org/apache/james/rrt/file/RewriteTablesTest.java
  AL    server/data/data-file/src/test/java/org/apache/james/sieverepository/file/SieveFileRepositoryTest.java
  AL    server/data/data-file/src/test/java/org/apache/james/mailrepository/FileMailRepositoryTest.java
  AL    server/data/data-file/src/reporting-site/site.xml
  AL    server/data/data-file/pom.xml
  AL    server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/utils/EmailAddressTupleUtil.scala
  AL    server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityDAO.scala
  AL    server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/tables/CassandraCustomIdentityTable.scala
  AL    server/data/data-jmap-cassandra/src/main/scala/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityModule.scala
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/table/CassandraAccessTokenTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/tables/CassandraPushSubscriptionTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionDAO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryViewModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraEmailQueryViewTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/table/CassandraMessageFastViewProjectionTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjection.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadBucketName.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/upload/UploadDAO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/CassandraFilteringProjectionModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/RuleDTO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefineDTOModules.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringRuleSetDefinedDTO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/CassandraFilteringProjection.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/filtering/FilteringIncrementalRuleChangeDTO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/tables/CassandraMailboxChangeTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/tables/CassandraEmailChangeTable.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepository.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/MailboxChangeRepositoryDAO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/EmailChangeRepositoryDAO.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraChangesConfiguration.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeModule.java
  AL    server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/change/CassandraStateFactory.java
  B     server/data/data-jmap-cassandra/src/test/resources/json/event-v2.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v2.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/increment-v4.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/increment-v3.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/event-v3.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v4.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/event-v4.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/increment-v2.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/eventEmpty.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/event.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/eventComplex.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/eventComplex-v3.json
  B     server/data/data-jmap-cassandra/src/test/resources/json/increment.json
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepositoryTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/pushsubscription/CassandraPushSubscriptionRepositoryTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraMessageFastViewProjectionTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryViewTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadServiceTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadRepositoryTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/UploadBucketNameTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraJMAPCurrentUploadUsageCalculatorTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/upload/CassandraUploadUsageRepositoryTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/CassandraEventSourcingFilteringManagementNoProjectionTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/DTOTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/filtering/CassandraEventSourcingFilteringManagementTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/identity/CassandraCustomIdentityTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraChangesConfigurationTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraMailboxChangeRepositoryTest.java
  AL    server/data/data-jmap-cassandra/src/test/java/org/apache/james/jmap/cassandra/change/CassandraEmailChangeRepositoryTest.java
  AL    server/data/data-jmap-cassandra/pom.xml
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/memory/identity/MemoryCustomIdentityDAO.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/Identity.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/PushSubscription.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/State.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/TypeName.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/model/EmailAddress.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/identity/IdentityUserDeletionTaskStep.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/identity/CustomIdentityDAO.scala
  AL    server/data/data-jmap/src/main/scala/org/apache/james/jmap/api/change/TypeStateFactory.scala
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionModule.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryView.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjection.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/upload/InMemoryUploadUsageRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/SizeUtils.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/AvoidBinaryBodyBufferingBodyFactory.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/AvoidBinaryBodyReadingBodyFactory.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/mime4j/FakeBinaryBody.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/NotAnAccessTokenException.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/InvalidAccessToken.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushSubscriptionHelpers.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/pushsubscription/PushDeleteUserDataTaskStep.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/EmailQueryView.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjection.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheck.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedProperties.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Upload.scala
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/UploadId.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/AccountId.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Preview.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/model/Size.scala
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadService.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/JMAPCurrentUploadUsageCalculator.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/RecomputeJMAPUploadCurrentQuotasService.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadUsageRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/UploadServiceDefaultImpl.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/upload/JmapUploadQuotaConfiguration.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregate.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommand.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/RuleSetDefined.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommandHandler.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilteringAggregateId.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/EventSourcingFilteringManagement.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/FilterUsernameChangeTaskStep.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChange.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FiltersDeleteUserDataTaskStep.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Version.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Rule.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/Rules.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/filtering/FilteringManagement.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/ChangeNotFoundException.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/exception/StateMismatchException.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/JmapChange.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChange.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/CanNotCalculateChangesException.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxAndEmailChange.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChange.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChanges.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChanges.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/EmailChangeRepository.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/State.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/Limit.java
  AL    server/data/data-jmap/src/main/java/org/apache/james/jmap/api/change/MailboxChangeRepository.java
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/memory/identity/IdentityUserDeletionTaskStepTest.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/memory/identity/MemoryCustomIdentityTest.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushDeleteUserDataTaskStepTest.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/pushsubscription/PushSubscriptionRepositoryContract.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/upload/UploadServiceContract.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/identity/IdentityRepositoryTest.scala
  AL    server/data/data-jmap/src/test/scala/org/apache/james/jmap/api/identity/CustomIdentityDAOContract.scala
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/pushsubscription/MemoryPushSubscriptionRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryMessageFastViewProjectionTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/projections/MemoryEmailQueryViewTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryJMAPCurrentUploadUsageCalculatorTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadServiceTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/upload/InMemoryUploadUsageRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryEmailChangeRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/memory/change/MemoryMailboxChangeRepositoryTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AccessTokenRepositoryContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AccessTokenTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/EmailQueryViewContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewPrecomputedPropertiesTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/projections/MessageFastViewProjectionHealthCheckTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/model/PreviewTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/JMAPCurrentUploadUsageCalculatorContract.scala
 !????? server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadRepositoryContract.scala
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RuleTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringAggregateIdTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/FiltersDeleteUserDataTaskStepTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/DefineRulesCommandTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/IncrementalRuleChangeTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/FilterUsernameChangeTaskStepTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/impl/InMemoryEventSourcingFilteringManagementTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/VersionTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RuleFixture.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/RulesTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/filtering/FilteringManagementContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeRepositoryContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/MailboxChangeTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/StateTest.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/EmailChangeRepositoryContract.java
  AL    server/data/data-jmap/src/test/java/org/apache/james/jmap/api/change/LimitTest.java
  AL    server/data/data-jmap/pom.xml
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryFactory.java
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStore.java
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStore.java
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfiguration.java
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/MemoryMailRepository.java
  AL    server/mailrepository/mailrepository-memory/src/main/java/org/apache/james/mailrepository/memory/SimpleMailRepositoryLoader.java
  AL    server/mailrepository/mailrepository-memory/src/test/resources/mailrepositorystore.xml
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreTest.java
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryTest.java
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MailRepositoryStoreConfigurationTest.java
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryEmptyErrorMailRepositoryHealthCheckTest.java
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryUrlStoreExtension.java
  AL    server/mailrepository/mailrepository-memory/src/test/java/org/apache/james/mailrepository/memory/MemoryMailRepositoryStoreTest.java
  AL    server/mailrepository/mailrepository-memory/pom.xml
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Protocol.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepository.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/Initializable.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryLoader.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryStore.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailKey.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrlStore.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryPath.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/EmptyErrorMailRepositoryHealthCheck.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/package-info.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryFactory.java
  AL    server/mailrepository/mailrepository-api/src/main/java/org/apache/james/mailrepository/api/MailRepositoryUrl.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryUrlStoreContract.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/MailRepositoryContract.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/ProtocolTest.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryPathTest.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailKeyTest.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/EmptyErrorMailRepositoryHealthCheckContract.java
  AL    server/mailrepository/mailrepository-api/src/test/java/org/apache/james/mailrepository/api/MailRepositoryUrlTest.java
  AL    server/mailrepository/mailrepository-api/pom.xml
  AL    server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/MailMetadata.scala
  AL    server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/BlobMailRepository.scala
  AL    server/mailrepository/mailrepository-blob/src/main/scala/org/apache/james/mailrepository/blob/BlobMailRepositoryFactory.scala
  AL    server/mailrepository/mailrepository-blob/src/test/java/org/apache/james/mailrepository/blob/BlobMailRepositoryTest.java
  AL    server/mailrepository/mailrepository-blob/pom.xml
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryModule.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAO.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsTable.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryFactory.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTableV2.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepository.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryTable.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStore.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDaoV2.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlModule.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/MailRepositoryBlobReferenceSource.java
  AL    server/mailrepository/mailrepository-cassandra/src/main/java/org/apache/james/mailrepository/cassandra/UrlsDao.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreTest.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryUrlStoreExtension.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryKeysDAOTest.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryMailDAOTest.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryWithFakeImplementationsTest.java
  AL    server/mailrepository/mailrepository-cassandra/src/test/java/org/apache/james/mailrepository/cassandra/CassandraMailRepositoryTest.java
  AL    server/mailrepository/mailrepository-cassandra/pom.xml
  AL    server/testing/src/main/java/org/apache/james/util/docker/RateLimiters.java
  AL    server/testing/src/main/java/org/apache/james/util/docker/DockerContainer.java
  AL    server/testing/src/main/java/org/apache/james/util/docker/Images.java
  AL    server/testing/src/main/java/org/apache/james/jmap/LocalHostURIBuilder.java
  AL    server/testing/src/main/java/org/apache/james/jmap/JMAPTestingConstants.java
  AL    server/testing/src/main/java/org/apache/james/jmap/HttpJmapAuthentication.java
  AL    server/testing/src/main/java/org/apache/james/jmap/AccessToken.java
  AL    server/testing/src/main/java/org/apache/james/jmap/JmapCommonRequests.java
  AL    server/testing/src/main/java/org/apache/james/utils/SMTPSendingException.java
  AL    server/testing/src/main/java/org/apache/james/utils/SMTPMessageSenderExtension.java
  AL    server/testing/src/main/java/org/apache/james/utils/TestIMAPClient.java
  AL    server/testing/src/main/java/org/apache/james/utils/SmtpSendingStep.java
  AL    server/testing/src/main/java/org/apache/james/utils/SMTPMessageSender.java
  AL    server/testing/src/main/java/org/apache/james/utils/AllMatching.java
  AL    server/testing/src/main/java/org/apache/james/utils/FakeSmtp.java
  AL    server/testing/src/main/java/org/apache/james/utils/UpdatableTickingClock.java
  AL    server/testing/src/main/java/org/apache/james/utils/DiscreteDistribution.java
  AL    server/testing/src/main/java/org/apache/james/junit/TemporaryFolderExtension.java
  AL    server/testing/src/main/java/org/apache/james/junit/categories/BasicFeature.java
  AL    server/testing/src/main/java/org/apache/james/junit/ExecutorExtension.java
  AL    server/testing/src/test/java/org/apache/james/utils/SMTPMessageSenderTest.java
  AL    server/testing/src/test/java/org/apache/james/utils/DiscreteDistributionTest.java
  AL    server/testing/src/test/java/org/apache/james/utils/TestIMAPClientTest.java
  AL    server/testing/pom.xml
  B     server/grafana-reporting/prometheus-datasource/James_JMAP_CountBoard.json
  B     server/grafana-reporting/prometheus-datasource/James_DNS_Dashboard.json
  B     server/grafana-reporting/prometheus-datasource/James_webAdmin.json
  B     server/grafana-reporting/prometheus-datasource/James_IMAP_CountBoard.json
  B     server/grafana-reporting/prometheus-datasource/James_BlobStore.json
  B     server/grafana-reporting/prometheus-datasource/James_MATCHER.json
  B     server/grafana-reporting/prometheus-datasource/James_MAILET.json
  B     server/grafana-reporting/prometheus-datasource/James_SMTP_CountBoard.json
  B     server/grafana-reporting/prometheus-datasource/James_MailQueue.json
 !????? server/grafana-reporting/prometheus-datasource/README.md
  B     server/grafana-reporting/prometheus-datasource/James_IMAP_Board.json
  B     server/grafana-reporting/prometheus-datasource/James_JMAP_Board.json
  B     server/grafana-reporting/prometheus-datasource/James_JVM.json
  B     server/grafana-reporting/prometheus-datasource/James_SMTP_Board.json
  B     server/grafana-reporting/es-datasource/IMAP_count_board-1488774815587-dashboard.json
  B     server/grafana-reporting/es-datasource/JAMES_DNS_dashboard-1491268903944-dashboard.json
  B     server/grafana-reporting/es-datasource/DeletedMessagesVault-1563771591074-dashboard.json
  B     server/grafana-reporting/es-datasource/JMAP_board-1488774804236-dashboard.json
  B     server/grafana-reporting/es-datasource/CacheBlobStore-15911761170000-dashboard.json
  B     server/grafana-reporting/es-datasource/MATCHER-1490071813409-dashboard.json
  B     server/grafana-reporting/es-datasource/SMTP_count_board-1488774761350-dashboard.json
  B     server/grafana-reporting/es-datasource/SpamAssassin-1522226824255-dashboard.json
  B     server/grafana-reporting/es-datasource/Cassandra_driver-1504068385404-dashboard.json
  B     server/grafana-reporting/es-datasource/MailQueue-1490071879988-dashboard.json
  B     server/grafana-reporting/es-datasource/Miscalleneous-1490072265151-dashboard.json
  B     server/grafana-reporting/es-datasource/MAILET-1490071694187-dashboard.json
  B     server/grafana-reporting/es-datasource/MessageFastViewProjection-1575520507952.json
  B     server/grafana-reporting/es-datasource/BlobStore-1543222647953-dashboard.json
  B     server/grafana-reporting/es-datasource/James_JVM-1504068360629-dashboard.json
  B     server/grafana-reporting/es-datasource/JMAP_count_board-1488774795514-dashboard.json
 !????? server/grafana-reporting/es-datasource/README.md
  B     server/grafana-reporting/es-datasource/SMTP_board-1488774774172-dashboard.json
  B     server/grafana-reporting/es-datasource/Tika-1522226794419-dashboard.json
  B     server/grafana-reporting/es-datasource/PreDeletionHooks-1553684324244-dashboard.json
  B     server/grafana-reporting/es-datasource/MailboxListeners rate-1552903378376.json
  B     server/grafana-reporting/es-datasource/MailboxListeners-1528958667486-dashboard.json
  B     server/grafana-reporting/es-datasource/IMAP_board-1488774825351-dashboard.json
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICal4JConfigurator.java
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/model/ICALAttributeDTO.java
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToHeader.java
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICSSanitizer.java
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICALToJsonAttribute.java
  AL    mailet/icalendar/src/main/java/org/apache/james/transport/mailets/ICalendarParser.java
 !????? mailet/icalendar/src/test/resources/ics_in_header.eml
 !????? mailet/icalendar/src/test/resources/ics/no_event.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
 !????? mailet/icalendar/src/test/resources/ics/ics_with_error.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting_2.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting.ics
 !????? mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
  AL    mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICalendarParserTest.java
  AL    mailet/icalendar/src/test/java/org/apache/james/transport/mailets/model/ICALAttributeDTOTest.java
  AL    mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToJsonAttributeTest.java
  AL    mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICALToHeadersTest.java
  AL    mailet/icalendar/src/test/java/org/apache/james/transport/mailets/ICSSanitizerTest.java
  AL    mailet/icalendar/pom.xml
  AL    mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailContext.java
  AL    mailet/test/src/main/java/org/apache/mailet/base/test/FakeMatcherConfig.java
  AL    mailet/test/src/main/java/org/apache/mailet/base/test/MailUtil.java
  AL    mailet/test/src/main/java/org/apache/mailet/base/test/FakeMailetConfig.java
  AL    mailet/test/src/main/java/org/apache/mailet/base/test/FakeMail.java
  AL    mailet/test/src/main/java/org/apache/mailet/base/MailAddressFixture.java
  AL    mailet/test/src/test/java/org/apache/mailet/base/test/FakeMailTest.java
  AL    mailet/test/pom.xml
  N     mailet/standard/LICENSE.txt
  N     mailet/standard/NOTICE.txt
  AL    mailet/standard/src/main/appended-resources/supplemental-models.xml
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeType.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeaderWithPrefix.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/GenericRegexMatcher.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/package.html
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPIsAuthNetwork.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/CompareNumericHeaderValue.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsNull.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHabeasWarrantMark.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPAuthUserIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderDomainIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/IsFromMailingList.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttributeWithValueRegex.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeTypeAnySubPart.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIsLocal.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasHeader.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/UserIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SentByMailet.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasException.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/AtMost.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SubjectStartsWith.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/CommandListservMatcher.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/TooManyLines.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/CommandForListserv.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/All.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsLocal.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SubjectIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/NESSpamCheck.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/TooManyRecipients.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HostIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/FileRegexMatcher.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttribute.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientDomainIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/FetchedFrom.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HostIsLocal.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SMTPAuthSuccessful.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/IsSingleRecipient.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderHostIsLocal.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SenderIsRegex.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/utils/MailAddressCollectionReader.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMailAttributeWithValue.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/RecipientIsRegex.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/SizeGreaterThan.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/RelayLimit.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/AttachmentFileNameIs.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasMimeTypeParameter.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/matchers/HasAttachment.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/package.html
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ToProcessor.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/Null.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/MimeDecodingMailet.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/SetErrorMessage.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/PropagateError.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/WrapText.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RecoverAttachment.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMimeHeader.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ContentReplacer.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeader.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/SetMailAttribute.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveAllMailAttributes.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/HeadersToHTTP.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeaders.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/MappingArgument.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/PatternExtractor.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/package.html
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/Counter.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/Identity.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/DumpSystemErr.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/debug/ExceptionThrowingMailet.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/MailAttributesToMimeHeaders.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/PostmasterAlias.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ContactExtractor.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/LogMessage.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/Expires.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RecipientToLowerCase.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/UnwrapText.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/AddDeliveredToHeader.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplaceConfig.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplacingPattern.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/AddHabeasWarrantMark.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/AddSubjectPrefix.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/UseHeaderRecipients.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/AddFooter.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMailAttribute.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefix.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/utils/MimeMessageModifier.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/utils/MimeMessageUtils.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ReplaceContent.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/SerialiseToHTTP.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ClassifyBounce.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/ServerTime.java
  AL    mailet/standard/src/main/java/org/apache/james/transport/mailets/OnlyText.java
  A     mailet/standard/src/test/resources/nested.zip
  AL    mailet/standard/src/test/resources/org/apache/james/mailet/standard/mailets/replaceSubject.patterns
 !????? mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
 !????? mailet/standard/src/test/resources/mime/gmail.mime
 !????? mailet/standard/src/test/resources/mime/headerFolded.mime
 !????? mailet/standard/src/test/resources/mime/space.eml
 !????? mailet/standard/src/test/resources/mime/incorrect-headers.mime
  A     mailet/standard/src/test/resources/sonde.zip
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/TooManyLinesTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/TooManyRecipientsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SentByMailetTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SizeGreaterThanTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/AttachmentFileNameIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPAuthSuccessfulTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsLocalTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/util/MailAddressCollectionReaderTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/FetchedFromTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SubjectStartsWithTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeWithValueTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/AllTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsNullTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsRegexTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/UserIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeParameterTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMimeTypeAnySubPartTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderHostIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SubjectIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientDomainIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasHeaderWithPrefixTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/RelayLimitTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HostIsLocalTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderDomainIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPAuthUserIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SMTPIsAuthNetworkTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/AbstractHasMailAttributeTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/IsSingleRecipientTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/AtMostTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderHostIsLocalTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasExceptionTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/RecipientIsLocalTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HostIsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasMailAttributeWithValueRegexTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/NESSpamCheckTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/IsFromMailingListTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/SenderIsRegexTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/matchers/HasAttachmentTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/SetMailAttributeTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/SerialiseToHTTPTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMimeHeaderByPrefixTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/PostmasterAliasTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/PatternExtractorTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/OnlyTextTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/SetMimeHeaderTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/HeadersToHTTPTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/UnwrapTextTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/MimeDecodingMailetTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/AddDeliveredToHeaderTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/RecipientToLowerCaseTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/ReplaceContentTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/AddFooterTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/ToProcessorTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/StripAttachmentTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/MappingArgumentTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMailAttributeTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/ContentReplacerTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesToMimeHeadersTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/UseHeaderRecipientsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/ExpiresTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/utils/MimeMessageUtilsTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/utils/MimeMessageModifierTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveMimeHeaderTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/NullTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/PropagateErrorTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/AddSubjectPrefixTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/LogMessageTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/SetErrorMessageTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/ContactExtractorTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/MailAttributesListToMimeHeadersTest.java
  AL    mailet/standard/src/test/java/org/apache/james/transport/mailets/RemoveAllMailAttributesTest.java
  AL    mailet/standard/pom.xml
 !????? mailet/standard/LICENSE.apache
 !????? mailet/standard/LICENSE.activation
  N     mailet/standard/RELEASE_NOTES.txt
 !????? mailet/standard/LICENSE.mail
  N     mailet/ai/LICENSE.txt
  N     mailet/ai/NOTICE.txt
  N     mailet/ai/BUILDING.txt
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/TokenProbabilityStrength.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/JDBCUtil.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysis.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/JDBCBayesianAnalyzer.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalyzer.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/TokenCounter.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/SystemContext.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/Tokenizer.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/BayesianAnalysisFeeder.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/SqlResources.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/CorpusLoaderThread.java
  AL    mailet/ai/src/main/java/org/apache/james/ai/classic/TokenCollector.java
  AL    mailet/ai/pom.xml
  AL    mailet/src/reporting-site/site-standard.xml
  AL    mailet/src/reporting-site/site/site.xml
  AL    mailet/src/reporting-site/site-crypto.xml
  AL    mailet/src/reporting-site/site-base.xml
  AL    mailet/src/reporting-site/site.xml
  AL    mailet/src/reporting-site/site-mailetdoc.xml
  AL    mailet/api/src/main/java/org/apache/mailet/HostAddress.java
  AL    mailet/api/src/main/java/org/apache/mailet/package.html
  AL    mailet/api/src/main/java/org/apache/mailet/AttributeName.java
  AL    mailet/api/src/main/java/org/apache/mailet/TemporaryLookupException.java
  AL    mailet/api/src/main/java/org/apache/mailet/ArbitrarySerializable.java
  AL    mailet/api/src/main/java/org/apache/mailet/Matcher.java
  AL    mailet/api/src/main/java/org/apache/mailet/ExcludeFromDocumentation.java
  AL    mailet/api/src/main/java/org/apache/mailet/StorageDirective.java
  AL    mailet/api/src/main/java/org/apache/mailet/Mail.java
  AL    mailet/api/src/main/java/org/apache/mailet/MailAddress.java
  AL    mailet/api/src/main/java/org/apache/mailet/MailetConfig.java
  AL    mailet/api/src/main/java/org/apache/mailet/MatcherConfig.java
  AL    mailet/api/src/main/java/org/apache/mailet/Serializer.java
  AL    mailet/api/src/main/java/org/apache/mailet/Mailet.java
  AL    mailet/api/src/main/java/org/apache/mailet/LoopPrevention.java
  AL    mailet/api/src/main/java/org/apache/mailet/MailetContext.java
  AL    mailet/api/src/main/java/org/apache/mailet/Attribute.java
  AL    mailet/api/src/main/java/org/apache/mailet/LookupException.java
  AL    mailet/api/src/main/java/org/apache/mailet/AttributeValue.java
  AL    mailet/api/src/main/java/org/apache/mailet/Experimental.java
  AL    mailet/api/src/main/java/org/apache/mailet/PerRecipientHeaders.java
  AL    mailet/api/src/main/java/org/apache/mailet/MailetException.java
  AL    mailet/api/src/main/java/org/apache/mailet/DsnParameters.java
  AL    mailet/api/src/main/java/org/apache/mailet/AttributeUtils.java
  AL    mailet/api/src/main/java/org/apache/mailet/ProcessingState.java
  AL    mailet/api/src/test/java/org/apache/mailet/AttributeValueTest.java
  AL    mailet/api/src/test/java/org/apache/mailet/AttributeTest.java
  AL    mailet/api/src/test/java/org/apache/mailet/AttributeNameTest.java
  AL    mailet/api/src/test/java/org/apache/mailet/ContractMailTest.java
  AL    mailet/api/src/test/java/org/apache/mailet/DsnParametersTest.java
  AL    mailet/api/src/test/java/org/apache/mailet/LoopPreventionTest.java
  AL    mailet/api/pom.xml
  N     mailet/api/NOTICE
  N     mailet/api/RELEASE_NOTES.txt
  N     mailet/api/LICENSE
  GEN   mailet/pom.xml
  AL    mailet/amqp/src/main/java/org/apache/james/transport/mailets/AmqpForwardAttribute.java
  AL    mailet/amqp/src/test/java/org/apache/james/transport/mailets/AmqpForwardAttributeTest.java
  AL    mailet/amqp/pom.xml
  AL    mailet/base/src/main/appended-resources/supplemental-models.xml
  AL    mailet/base/src/main/java/org/apache/mailet/base/AutomaticallySentMailDetector.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/package.html
  AL    mailet/base/src/main/java/org/apache/mailet/base/RFC2822Headers.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/GenericMatcher.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/MailetUtil.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/FlowedMessageUtils.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/GenericMailet.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/Converter7Bit.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/StringUtils.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/MailetPipelineLogging.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/GenericRecipientMatcher.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/DateFormats.java
  AL    mailet/base/src/main/java/org/apache/mailet/base/MatcherInverter.java
 !????? mailet/base/src/test/resources/eml/text-only-7bit.eml
 !????? mailet/base/src/test/resources/eml/multipart-7bit.eml
 !????? mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
 !????? mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
 !????? mailet/base/src/test/resources/eml/multipart-8bit.eml
 !????? mailet/base/src/test/resources/eml/text-only-8bit.eml
  AL    mailet/base/src/test/java/org/apache/mailet/base/MatcherInverterTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/Converter7BitTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/FlowedMessageUtilsTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/GenericMailetTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/MailetPipelineLoggingTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/StringUtilsTest.java
  AL    mailet/base/src/test/java/org/apache/mailet/base/MailetUtilTest.java
  AL    mailet/base/pom.xml
  N     mailet/base/NOTICE
  N     mailet/base/RELEASE_NOTES.txt
  N     mailet/base/LICENSE
  N     mailet/mailetdocs-maven-plugin/LICENSE.txt
  N     mailet/mailetdocs-maven-plugin/NOTICE.txt
  AL    mailet/mailetdocs-maven-plugin/src/main/appended-resources/supplemental-models.xml
  AL    mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/MailetMatcherDescriptor.java
  AL    mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/AggregateMailetdocsReport.java
  AL    mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/MailetdocsReport.java
  AL    mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/AbstractMailetdocsReport.java
  AL    mailet/mailetdocs-maven-plugin/src/main/java/org/apache/james/mailet/DefaultDescriptorsExtractor.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/MailetMatcherDescriptorTest.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/excluded/ExcludedFromDocumentationMailet.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/excluded/NotExcludedFromDocumentationMailet.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/constructor/ConstructorMailet.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/DefaultDescriptorsExtractorTest.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/experimental/NonExperimentalMailet.java
  AL    mailet/mailetdocs-maven-plugin/src/test/java/org/apache/james/mailet/experimental/ExperimentalMailet.java
  AL    mailet/mailetdocs-maven-plugin/pom.xml
  N     mailet/mailetdocs-maven-plugin/RELEASE_NOTES.txt
  N     mailet/crypto/src/main/resources/META-INF/README.txt
  AL    mailet/crypto/src/main/appended-resources/supplemental-models.xml
  AL    mailet/crypto/src/main/java/org/apache/james/transport/package.html
  AL    mailet/crypto/src/main/java/org/apache/james/transport/SMIMESignerInfo.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/matcher/package.html
  AL    mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsSMIMESigned.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsX509CertificateSubject.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/matcher/IsSMIMEEncrypted.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/KeyStoreHolder.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/KeyHolder.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/SMIMEAttributeNames.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/InitJCE.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMEDecrypt.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/Sign.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/package.html
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMESign.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/SMIMECheckSignature.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/mailets/AbstractSign.java
  AL    mailet/crypto/src/main/java/org/apache/james/transport/SMIMEKeyHolder.java
  AL    mailet/crypto/pom.xml
  N     mailet/crypto/NOTICE
  N     mailet/crypto/RELEASE_NOTES.txt
  N     mailet/crypto/README.txt
  N     mailet/crypto/LICENSE
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RegistrationQueueName.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RoutingKeyConverter.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/EventDispatcher.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistrationHandler.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheck.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/ListenerExecutor.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQEventBus.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/NamingStrategy.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/GroupRegistration.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/KeyReconnectionHandler.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/LocalListenerRegistry.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/WaitDelayGenerator.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RabbitMQJmapEventBusDeadLetterQueueHealthCheck.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistrationHandler.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/KeyRegistration.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/GroupConsumerRetry.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RegistrationBinder.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/EventBusReconnectionHandler.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/RabbitEventBusConsumerHealthCheck.java
  AL    event-bus/distributed/src/main/java/org/apache/james/events/EventBusId.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/EventBusIdTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/WaitDelayGeneratorTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQJmapEventBusDeadLetterQueueHealthCheckTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/RoutingKeyConverterTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/LocalListenerRegistryTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQMailboxEventBusDeadLetterQueueHealthCheckTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/NetworkErrorTest.java
  AL    event-bus/distributed/src/test/java/org/apache/james/events/RabbitMQEventBusDeadLetterQueueUpgradeTest.java
  AL    event-bus/distributed/pom.xml
  AL    event-bus/api/src/main/java/org/apache/james/events/EventDeadLetters.java
  AL    event-bus/api/src/main/java/org/apache/james/events/EventListener.java
  AL    event-bus/api/src/main/java/org/apache/james/events/GroupAlreadyRegistered.java
  AL    event-bus/api/src/main/java/org/apache/james/events/GroupRegistrationNotFound.java
  AL    event-bus/api/src/main/java/org/apache/james/events/Group.java
  AL    event-bus/api/src/main/java/org/apache/james/events/Event.java
  AL    event-bus/api/src/main/java/org/apache/james/events/EventBus.java
  AL    event-bus/api/src/main/java/org/apache/james/events/RegistrationKey.java
  AL    event-bus/api/src/main/java/org/apache/james/events/RetryBackoffConfiguration.java
  AL    event-bus/api/src/main/java/org/apache/james/events/EventBusName.java
  AL    event-bus/api/src/main/java/org/apache/james/events/DispatchingFailureGroup.java
  AL    event-bus/api/src/main/java/org/apache/james/events/Registration.java
  AL    event-bus/api/src/main/java/org/apache/james/events/EventSerializer.java
  AL    event-bus/api/src/main/java/org/apache/james/events/EventDeadLettersHealthCheck.java
  AL    event-bus/api/src/main/java/org/apache/james/mailbox/events/GenericGroup.java
  AL    event-bus/api/src/test/java/org/apache/james/events/RetryBackoffConfigurationTest.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventCollector.java
  AL    event-bus/api/src/test/java/org/apache/james/events/ErrorHandlingContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/KeyContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventBusContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/GroupContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/InsertionIdTest.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventBusTestFixture.java
  AL    event-bus/api/src/test/java/org/apache/james/events/DispatchingFailureGroupTest.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventDeadLettersHealthCheckContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/GroupTest.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventDeadLettersContract.java
  AL    event-bus/api/src/test/java/org/apache/james/events/EventBusConcurrentTestContract.java
  AL    event-bus/api/pom.xml
  AL    event-bus/pom.xml
  AL    event-bus/in-vm/src/main/java/org/apache/james/events/delivery/EventDelivery.java
  AL    event-bus/in-vm/src/main/java/org/apache/james/events/delivery/InVmEventDelivery.java
  AL    event-bus/in-vm/src/main/java/org/apache/james/events/InVMEventBus.java
  AL    event-bus/in-vm/src/main/java/org/apache/james/events/MemoryEventDeadLetters.java
  AL    event-bus/in-vm/src/test/java/org/apache/james/events/delivery/InVmEventDeliveryTest.java
  AL    event-bus/in-vm/src/test/java/org/apache/james/events/MemoryEventDeadLettersHealthCheckTest.java
  AL    event-bus/in-vm/src/test/java/org/apache/james/events/MemoryEventDeadLettersTest.java
  AL    event-bus/in-vm/src/test/java/org/apache/james/events/InVMEventBusTest.java
  AL    event-bus/in-vm/pom.xml
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLetters.java
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/tables/CassandraEventDeadLettersTable.java
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/tables/CassandraEventDeadLettersGroupTable.java
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersDAO.java
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersGroupDAO.java
  AL    event-bus/cassandra/src/main/java/org/apache/james/events/CassandraEventDeadLettersModule.java
  AL    event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersGroupDAOTest.java
  AL    event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersDAOTest.java
  AL    event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersHealthCheckTest.java
  AL    event-bus/cassandra/src/test/java/org/apache/james/events/CassandraEventDeadLettersTest.java
  AL    event-bus/cassandra/pom.xml
  AL    examples/custom-webadmin-route/src/main/resources/webadmin.properties
  AL    examples/custom-webadmin-route/src/main/java/org/apache/james/examples/RouteA.java
  AL    examples/custom-webadmin-route/pom.xml
 !????? examples/custom-webadmin-route/README.md
 !????? examples/metrics-graphite/docker-compose.yml
 !????? examples/metrics-graphite/james/extensions.properties
  AL    examples/metrics-graphite/src/main/java/org/apache/james/examples/GraphiteExporter.java
  AL    examples/metrics-graphite/pom.xml
 !????? examples/metrics-graphite/README.md
  B     examples/metrics-graphite/image/metrics-graphite.png
  AL    examples/custom-smtp-hooks/src/main/resources/smtpserver.xml
  AL    examples/custom-smtp-hooks/src/main/java/org/apache/james/examples/LoggingRcptHook.java
  AL    examples/custom-smtp-hooks/pom.xml
 !????? examples/custom-smtp-hooks/README.md
 !????? examples/proxy-smtp/docker-compose.yml
 !????? examples/proxy-smtp/haproxy.cfg
  AL    examples/proxy-smtp/imapserver.xml
 !????? examples/proxy-smtp/README.md
  AL    examples/proxy-smtp/smtpserver.xml
  AL    examples/custom-smtp-command/src/main/resources/smtpserver.xml
  AL    examples/custom-smtp-command/src/main/java/org/apache/james/examples/MyNoopCmdHandler.java
  AL    examples/custom-smtp-command/src/main/java/org/apache/james/examples/MyCmdHandlerLoader.java
  AL    examples/custom-smtp-command/pom.xml
 !????? examples/custom-smtp-command/README.md
  AL    examples/custom-listeners/src/main/resources/listeners.xml
  AL    examples/custom-listeners/src/main/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessages.java
  AL    examples/custom-listeners/src/test/java/org/apache/james/examples/custom/listeners/SetCustomFlagOnBigMessagesTest.java
  AL    examples/custom-listeners/pom.xml
 !????? examples/custom-listeners/README.md
 !????? examples/custom-imap/docker-compose.yml
  AL    examples/custom-imap/src/main/resources/imapserver.xml
  AL    examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingCommandParser.java
  AL    examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingProcessor.java
  AL    examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingImapPackages.java
  AL    examples/custom-imap/src/main/java/org/apache/james/examples/imap/PingResponseEncoder.java
  AL    examples/custom-imap/src/test/resources/listeners.xml
  AL    examples/custom-imap/src/test/resources/dnsservice.xml
  AL    examples/custom-imap/src/test/resources/lmtpserver.xml
  AL    examples/custom-imap/src/test/resources/mailetcontainer.xml
  AL    examples/custom-imap/src/test/resources/managesieveserver.xml
  AL    examples/custom-imap/src/test/resources/domainlist.xml
  AL    examples/custom-imap/src/test/resources/mailrepositorystore.xml
  AL    examples/custom-imap/src/test/resources/usersrepository.xml
  B     examples/custom-imap/src/test/resources/keystore
  AL    examples/custom-imap/src/test/resources/smtpserver.xml
  AL    examples/custom-imap/src/test/resources/pop3server.xml
  AL    examples/custom-imap/src/test/java/org/apache/james/examples/imap/ImapCustomPackagesTest.java
  AL    examples/custom-imap/pom.xml
 !????? examples/custom-imap/README.md
  AL    examples/custom-imap/sample-configuration/imapserver.xml
  AL    examples/custom-mailets/src/main/resources/mailetcontainer.xml
  AL    examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/IsDelayedForMoreThan.java
  AL    examples/custom-mailets/src/main/java/org/apache/james/examples/custom/mailets/SendPromotionCode.java
  AL    examples/custom-mailets/pom.xml
 !????? examples/custom-mailets/README.md
  AL    examples/custom-healthcheck/src/main/resources/healthcheck.properties
  AL    examples/custom-healthcheck/src/main/java/org/apache/james/examples/HealthCheckA.java
  AL    examples/custom-healthcheck/pom.xml
 !????? examples/custom-healthcheck/README.md
  AL    examples/pom.xml
 !????? examples/README.md
  B     examples/imap-autoconf/thunderbird_autoconf.png
  B     examples/imap-autoconf/outlook_enjoyAutoConfig.jpg
 !????? examples/imap-autoconf/content/mail/config-v1.1.xml
 !????? examples/imap-autoconf/content/Autodiscover/Autodiscover.xml
 !????? examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
 !????? examples/imap-autoconf/content/autodiscover/autodiscover.xml
 !????? examples/imap-autoconf/docker-compose.yml
 !????? examples/imap-autoconf/README.adoc
  B     examples/imap-autoconf/outlook_enterMailAddress.jpg
 !????? examples/imap-autoconf/default.conf
  B     examples/imap-autoconf/outlook_enterPassword.jpg
  AL    examples/custom-james-assembly/src/main/java/org/apache/james/examples/CustomJamesServerMain.java
  AL    examples/custom-james-assembly/pom.xml
 !????? examples/custom-james-assembly/README.md
  AL    examples/custom-james-assembly/sample-configuration/mailetcontainer.xml
  AL    examples/custom-james-assembly/sample-configuration/imapserver.xml
  AL    examples/custom-james-assembly/sample-configuration/mailrepositorystore.xml
  AL    examples/custom-james-assembly/sample-configuration/logback.xml
  AL    examples/custom-james-assembly/sample-configuration/smtpserver.xml
  B     examples/oidc/keycloak/realm-oidc.json
 !????? examples/oidc/test.sh
 !????? examples/oidc/docker-compose.yml
 !????? examples/oidc/james/imapserver.xml
  AL    examples/oidc/james/usersrepository.xml
 !????? examples/oidc/james/jmap.properties
 !????? examples/oidc/james/smtpserver.xml
  B     examples/oidc/_media/oidc-sso.png
  B     examples/oidc/_media/smtp-setting.png
 !????? examples/oidc/_media/oidc-sso.drawio
  B     examples/oidc/_media/imap-setting.png
  B     examples/oidc/_media/receive-mail.png
  B     examples/oidc/_media/send-mail.png
  B     examples/oidc/_media/login-popup.png
  B     examples/oidc/_media/IMAP-SMTP-oidc.png
 !????? examples/oidc/_media/oidc-slo.drawio
  B     examples/oidc/_media/oidc-slo.png
 !????? examples/oidc/_media/IMAP_SMTP oidc.drawio
 !????? examples/oidc/apisix/conf/apisix.yaml
 !????? examples/oidc/apisix/conf/config.yaml
 !????? examples/oidc/README.md
 !????? examples/oidc/ldap/populate.ldif
  AL    mailbox/spring/src/main/resources/META-INF/spring/mailbox-locker.xml
  AL    mailbox/spring/src/main/resources/META-INF/spring/quota.xml
  AL    mailbox/spring/src/main/resources/META-INF/spring/event-system.xml
  AL    mailbox/spring/src/main/resources/META-INF/spring/spring-mailbox.xml
  AL    mailbox/spring/src/main/resources/META-INF/spring/mailbox-no-authorizator.xml
  AL    mailbox/spring/src/main/resources/META-INF/spring/mailbox-authenticator-anonymous.xml
  AL    mailbox/spring/src/main/resources/log4j.properties
  AL    mailbox/spring/src/main/java/org/apache/james/mailbox/spring/SpringMailbox.java
  AL    mailbox/spring/src/main/java/org/apache/james/mailbox/spring/AnonymousAuthenticator.java
  AL    mailbox/spring/src/main/java/org/apache/james/mailbox/spring/NoAuthorizator.java
  AL    mailbox/spring/src/main/java/org/apache/james/mailbox/spring/MailboxInitializer.java
  AL    mailbox/spring/src/test/resources/META-INF/spring/mailbox-index-lucene-test.xml
  AL    mailbox/spring/src/test/resources/META-INF/spring/metrics.xml
  AL    mailbox/spring/src/test/resources/META-INF/spring/quota-alias.xml
  AL    mailbox/spring/src/test/resources/META-INF/persistence.xml
  AL    mailbox/spring/src/test/resources/META-INF/org/apache/james/database.properties
  AL    mailbox/spring/src/test/java/org/apache/james/mailbox/spring/SpringMailboxTest.java
 !????? mailbox/spring/src/test/README.md
  AL    mailbox/spring/src/reporting-site/site.xml
  AL    mailbox/spring/pom.xml
  AL    mailbox/plugin/quota-mailing-memory/src/test/java/org/apache/james/mailbox/quota/memory/listeners/InMemoryQuotaMailingListenersIntegrationTest.java
  AL    mailbox/plugin/quota-mailing-memory/src/test/java/org/apache/james/mailbox/quota/memory/listeners/InMemoryQuotaThresholdConfigurationChangesTest.java
  AL    mailbox/plugin/quota-mailing-memory/pom.xml
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/Offset.java
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaClause.java
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaBoundary.java
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaQuery.java
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/QuotaSearcher.java
  AL    mailbox/plugin/quota-search/src/main/java/org/apache/james/quota/search/Limit.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/OffsetTest.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearchTestSystem.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearcherContract.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaClauseTest.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaQueryTest.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaBoundaryFixture.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/QuotaSearchFixture.java
  AL    mailbox/plugin/quota-search/src/test/java/org/apache/james/quota/search/LimitTest.java
  AL    mailbox/plugin/quota-search/pom.xml
  AL    mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaEventDTOModules.java
  AL    mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/HistoryEvolutionDTO.java
  AL    mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaThresholdChangedEventDTO.java
  AL    mailbox/plugin/quota-mailing-cassandra/src/main/java/org/apache/james/mailbox/quota/cassandra/dto/QuotaDTO.java
  B     mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event2.json
  B     mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event.json
  B     mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event4.json
  B     mailbox/plugin/quota-mailing-cassandra/src/test/resources/json/event3.json
  AL    mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/listeners/CassandraQuotaMailingListenersIntegrationTest.java
  AL    mailbox/plugin/quota-mailing-cassandra/src/test/java/org/apache/james/mailbox/quota/cassandra/dto/DTOTest.java
  AL    mailbox/plugin/quota-mailing-cassandra/pom.xml
  AL    mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ClauseConverter.java
  AL    mailbox/plugin/quota-search-scanning/src/main/java/org/apache/james/quota/search/scanning/ScanningQuotaSearcher.java
  AL    mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/MemoryQuotaSearchTestSystemExtension.java
  AL    mailbox/plugin/quota-search-scanning/src/test/java/org/apache/james/quota/search/scanning/ScanningQuotaSearcherTest.java
  AL    mailbox/plugin/quota-search-scanning/pom.xml
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJson.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToOpenSearchJson.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/json/JsonMessageConstants.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaSearchIndexCreationUtil.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/events/OpenSearchQuotaMailboxListener.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaQueryConverter.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearcher.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioMappingFactory.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactory.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/QuotaRatioOpenSearchConstants.java
  AL    mailbox/plugin/quota-search-opensearch/src/main/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaConfiguration.java
  B     mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatioNoDomain.json
  B     mailbox/plugin/quota-search-opensearch/src/test/resources/quotaRatio.json
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearchTestSystemExtension.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/UserRoutingKeyFactoryTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioAsJsonTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/json/QuotaRatioToOpenSearchJsonTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaConfigurationTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/events/OpenSearchQuotaMailboxListenerTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/QuotaQueryConverterTest.java
  AL    mailbox/plugin/quota-search-opensearch/src/test/java/org/apache/james/quota/search/opensearch/OpenSearchQuotaSearcherTest.java
  AL    mailbox/plugin/quota-search-opensearch/pom.xml
 !????? mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
 !????? mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListener.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfiguration.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/events/QuotaThresholdChangedEvent.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdMailer.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdNotice.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossing.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossingHandler.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/mailing/aggregates/UserQuotaThresholds.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholdChange.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholdHistory.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/HistoryEvolution.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThresholds.java
  AL    mailbox/plugin/quota-mailing/src/main/java/org/apache/james/mailbox/quota/model/QuotaThreshold.java
 !????? mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
 !????? mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
 !????? mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
 !????? mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdListenersTestSystem.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdConfigurationChangesTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdMailingIntegrationTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/listeners/QuotaThresholdCrossingListenerTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/subscribers/QuotaThresholdNoticeTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/commands/DetectThresholdCrossingTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/aggregates/UserQuotaThresholdsTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/mailing/QuotaMailingListenerConfigurationTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/HistoryEvolutionTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdChangeTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdHistoryTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdsTest.java
  AL    mailbox/plugin/quota-mailing/src/test/java/org/apache/james/mailbox/quota/model/QuotaThresholdFixture.java
  AL    mailbox/plugin/quota-mailing/pom.xml
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageZipper.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVault.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTask.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskAdditionalInformationDTO.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVault.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BucketNameGenerator.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskDTO.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformation.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataVault.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/metadata/StorageInformation.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVaultHook.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/VaultConfiguration.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageContentNotFoundException.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Query.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/DeletedMessageField.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/FieldName.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Combinator.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/CriterionFactory.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Criterion.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/search/Operator.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageVault.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessage.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationConverter.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationDTO.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryDTO.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElementDeserializer.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElementSerializer.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/CriterionDTO.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryTranslator.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/dto/query/QueryElement.java
  AL    mailbox/plugin/deleted-messages-vault/src/main/java/org/apache/james/vault/DeletedMessageConverter.java
  B     mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_storage_information.json
  B     mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message.json
  B     mailbox/plugin/deleted-messages-vault/src/test/resources/json/storage_information.json
  B     mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_storage_information_invalid.json
  B     mailbox/plugin/deleted-messages-vault/src/test/resources/json/deleted_message_with_subject.json
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageMailboxContextTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultHookTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/memory/metadata/MemoryDeletedMessageMetadataVaultTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreDeletedMessageVaultTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BlobStoreVaultGarbageCollectionTaskSerializationTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/blob/BucketNameGeneratorTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageConverterTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultSearchContract.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageZipperTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/VaultConfigurationTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageMetadataVaultContract.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/StorageInformationTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageVaultMetadataFixture.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/metadata/DeletedMessageWithStorageInformationTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/DeletedMessageWithStorageInformationDTOTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementSerializerTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryTranslatorTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementDeserializerTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/dto/query/QueryElementTest.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageFixture.java
  AL    mailbox/plugin/deleted-messages-vault/src/test/java/org/apache/james/vault/DeletedMessageVaultContract.java
  AL    mailbox/plugin/deleted-messages-vault/pom.xml
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataSerializer.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/UserPerBucketDAO.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/StorageInformationDAO.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVault.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageMetadataModule.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageVaultDeletionCallback.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/MetadataDAO.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/main/java/org/apache/james/vault/metadata/DeletedMessageIdentifier.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/MetadataDAOTest.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/CassandraDeletedMessageMetadataVaultTest.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/DeletedMessageIdentifierTest.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/UserPerBucketDAOTest.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/src/test/java/org/apache/james/vault/metadata/StorageInformationDAOTest.java
  AL    mailbox/plugin/deleted-messages-vault-cassandra/pom.xml
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailer.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageToOpenSearchJson.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MessageUpdateJson.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePart.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartParser.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/Subjects.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/HeaderCollection.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/SerializableMessage.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/RootMimePartContainerBuilder.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/MimePartContainerBuilder.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/JsonMessageConstants.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/EMailers.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/json/IndexableMessage.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexAttachments.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexHeaders.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/IndexBody.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndex.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/events/DisabledListeningMessageSearchIndex.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxOpenSearchConstants.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/CriterionConverter.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/SortConverter.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/QueryConverter.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatter.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcher.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactory.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/OpenSearchMailboxConfiguration.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxMappingFactory.java
  AL    mailbox/opensearch/src/main/java/org/apache/james/mailbox/opensearch/MailboxIndexCreationUtil.java
 !????? mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
 !????? mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
 !????? mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
 !????? mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
  B     mailbox/opensearch/src/test/resources/eml/inlined-mixed.json
  B     mailbox/opensearch/src/test/resources/eml/alternative_simple.json
  B     mailbox/opensearch/src/test/resources/eml/alternative.json
 !????? mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
 !????? mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
 !????? mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
 !????? mailbox/opensearch/src/test/resources/eml/htmlContent.txt
 !????? mailbox/opensearch/src/test/resources/eml/alternative.eml
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/HeaderCollectionTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/FieldImpl.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailerTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/EMailersTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/SubjectsTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MessageToOpenSearchJsonTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/IndexableMessageTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/json/MimePartTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchMailboxConfigurationTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/events/OpenSearchListeningMessageSearchIndexTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchOptimizeMoveIntegrationTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/SearchQueryTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/query/DateResolutionFormatterTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/search/OpenSearchSearcherTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchIntegrationTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/MailboxIdRoutingKeyFactoryTest.java
  AL    mailbox/opensearch/src/test/java/org/apache/james/mailbox/opensearch/OpenSearchNoIndexBodyIntegrationTest.java
  AL    mailbox/opensearch/src/reporting-site/site.xml
  AL    mailbox/opensearch/pom.xml
  AL    mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAttachmentMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryAnnotationMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryModSeqProvider.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryUidProvider.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxSessionMapperFactory.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManager.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/quota/InMemoryPerUserMaxQuotaManager.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageId.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
  AL    mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryId.java
 !????? mailbox/memory/src/test/resources/test.eml
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTestSystem.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/listener/MailboxSubscriptionListenerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/task/MemoryRecomputeCurrentQuotasServiceTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMailboxMapperAclTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMessageIdMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryAnnotationMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryAttachmentMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageWithAttachmentMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/MemoryMessageMoveTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerStressTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryPerUserMaxQuotaManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/quota/InMemoryCurrentQuotaCalculatorTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageIdManagerStorageTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryCombinationManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapperTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerProvider.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/MemoryMailboxManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryMessageIdManagerSideEffectTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryQuotaMailboxMessageManagerTest.java
  AL    mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMessageManagerTestSystem.java
  AL    mailbox/memory/src/reporting-site/site.xml
  AL    mailbox/memory/pom.xml
  AL    mailbox/event/json/src/main/scala/org/apache/james/event/json/MailboxEventSerializer.scala
  AL    mailbox/event/json/src/main/scala/org/apache/james/event/json/DTOs.scala
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxDeletionSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxRenamedSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/SerializerFixture.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/ExpungedSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/MessageMoveEventSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/QuotaUsageUpdatedEventSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaRootTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageIdTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/SessionIdTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MailboxPathTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MailboxIdTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/EventIdTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/UserTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/FlagsTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageUidTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/UpdatedFlagsTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/MessageMetaDataTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaSizeTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/ACLDiffTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/ModSeqTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/dtos/QuotaCountTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/FlagsUpdatedSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxAddedSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/AddedSerializationTest.java
  AL    mailbox/event/json/src/test/java/org/apache/james/event/json/MailboxACLUpdatedEventSerializationTest.java
  AL    mailbox/event/json/pom.xml
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaTextExtractor.java
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/ContentTypeFilteringTextExtractor.java
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaHttpClientImpl.java
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/CachingTextExtractor.java
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaConfiguration.java
  AL    mailbox/tika/src/main/java/org/apache/james/mailbox/tika/TikaHttpClient.java
  B     mailbox/tika/src/test/resources/documents/writter.docx
  A     mailbox/tika/src/test/resources/documents/slides.odp
  B     mailbox/tika/src/test/resources/documents/calc.xlsx
  A     mailbox/tika/src/test/resources/documents/writter.odt
  B     mailbox/tika/src/test/resources/documents/fake.txt
  B     mailbox/tika/src/test/resources/documents/slides.pptx
 !????? mailbox/tika/src/test/resources/documents/Text.txt
  A     mailbox/tika/src/test/resources/documents/calc.ods
  B     mailbox/tika/src/test/resources/documents/PDF.pdf
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/CachingTextExtractorTest.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaExtension.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainerSingleton.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaConfigurationTest.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaContainer.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/ContentTypeFilteringTextExtractorTest.java
  AL    mailbox/tika/src/test/java/org/apache/james/mailbox/tika/TikaTextExtractorTest.java
  AL    mailbox/tika/pom.xml
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/JpaMigrator.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/exception/JpaMigrateException.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/JpaMigrateQuery.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP172JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP168JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP165JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP184JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP176JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/main/java/org/apache/james/mailbox/tools/jpa/migrator/command/IMAP180JpaMigrateCommand.java
  AL    mailbox/tools/jpa-migrator/src/test/java/org/apache/james/mailbox/tools/jpa/migrator/JpaMigratorTest.java
  AL    mailbox/tools/jpa-migrator/pom.xml
  AL    mailbox/tools/copier/src/main/java/org/apache/james/mailbox/tools/copier/MailboxCopierImpl.java
  AL    mailbox/tools/copier/src/test/java/org/apache/james/mailbox/tools/copier/MailboxCopierTest.java
  AL    mailbox/tools/copier/pom.xml
  AL    mailbox/tools/indexer/src/main/resources/META-INF/spring/mailbox-tools.xml
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskAdditionalInformationDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskAdditionalInformationDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImpl.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerPerformer.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingEvent.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/events/ImpactingEventType.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/MessageIdReIndexingTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContext.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTaskAdditionalInformationDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/RunningOptionsDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContextInformation.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexingContextInformationDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskAdditionalInformationDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/FullReindexingTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ReIndexerImpl.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/UserReindexingTask.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskDTO.java
  AL    mailbox/tools/indexer/src/main/java/org/apache/mailbox/tools/indexer/ThrowsReIndexer.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ErrorRecoveryIndexationTaskSerializationTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReIndexerImplTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMailboxReindexingTaskSerializationTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/CassandraReIndexerImplTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/ReIndexerImplTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/MessageIdReindexingTaskSerializationTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/FullReindexingTaskSerializationTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/UserReindexingTaskSerializationTest.java
  AL    mailbox/tools/indexer/src/test/java/org/apache/mailbox/tools/indexer/SingleMessageReindexingTaskSerializationTest.java
  AL    mailbox/tools/indexer/pom.xml
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasService.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSingleComponentCurrentQuotasService.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTask.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RunningOptionsDTO.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSingleQuotaComponentResult.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeSieveUploadCurrentQuotasService.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskAdditionalInformationDTO.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskDTO.java
  AL    mailbox/tools/quota-recompute/src/main/java/org/apache/james/mailbox/quota/task/RecomputeMailboxCurrentQuotasService.java
  AL    mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasTaskSerializationTest.java
  AL    mailbox/tools/quota-recompute/src/test/java/org/apache/james/mailbox/quota/task/RecomputeCurrentQuotasServiceContract.java
  AL    mailbox/tools/quota-recompute/pom.xml
  AL    mailbox/src/reporting-site/site.xml
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/RequestAware.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MessageManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSessionIdGenerator.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/acl/ACLDiff.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLChanged.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/acl/UnionMailboxACLResolver.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/acl/PositiveUserACLDiff.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/acl/MailboxACLResolver.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxPathLocker.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/DefaultMailboxes.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxAnnotationManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/Authorizator.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/Authenticator.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxEvents.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/events/MessageMoveEvent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/events/MailboxIdRegistrationKey.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/FlagsBuilder.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/SystemMailboxesProvider.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/RightManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRatio.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageResultIterator.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Cid.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ContentType.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Header.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageRange.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MultimailboxesSearchQuery.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ComposedMessageId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuotaUsageValue.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/FetchGroup.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageIdDto.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/InputStreamContent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ByteSourceContent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuotaLimitValue.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxMetaData.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MimeDescriptor.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Headers.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Mailbox.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ThreadId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMetaData.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaData.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/SearchQuery.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Quota.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageAttachmentMetadata.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxNameExpression.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/Wildcard.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/MailboxQuery.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/ExactName.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/PrefixedRegex.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/search/PrefixedWildcard.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/PartContentDescriptor.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/DeleteResult.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/UpdatedFlags.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/HeaderAndBodyByteContent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxCounters.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/CurrentQuotas.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxConstants.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Content.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaOperation.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/SerializableQuota.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxACL.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ByteContent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageMoves.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotation.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/UidValidity.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/AttachmentMetadata.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxAnnotationKey.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MimePath.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/Profiles.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/ParsedAttachment.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/QuotaRoot.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MailboxPath.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/model/MessageResult.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/copier/MailboxCopier.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/AttachmentContentLoader.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MetadataWithMailboxId.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/probe/QuotaProbe.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/probe/ACLProbe.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/probe/MailboxProbe.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootDeserializer.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/MaxQuotaManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaRootResolver.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/QuotaManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/CurrentQuotaManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/quota/UserQuotaRootResolver.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/ThreadNotFoundException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedRightException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/HasEmptyMailboxNameInHierarchyException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/InboxAlreadyCreated.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxRoleNotFoundException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/BadCredentialsException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/ForbiddenDelegationException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MessageRangeException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/AttachmentNotFoundException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/OverQuotaException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedOperationException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedSearchException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxExistsException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/DifferentDomainException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/UserDoesNotExistException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/TooLongMailboxNameException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/AnnotationException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/SubscriptionException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxSecurityException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNotFoundException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/ReadOnlyException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/UnsupportedCriteriaException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/InsufficientRightsException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/exception/MailboxNameException.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexingExecutionFailures.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/indexer/IndexingDetailInformation.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/indexer/MessageIdReIndexer.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/indexer/ReIndexer.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/Role.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxUtil.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MessageUid.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/ApplicableFlagBuilder.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/SessionProvider.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/ModSeq.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MessageIdManager.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/MailboxSession.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/extension/PreDeletionHook.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/extractor/ParsedContent.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/extractor/TextExtractor.java
  AL    mailbox/api/src/main/java/org/apache/james/mailbox/SubscriptionManager.java
 !????? mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
  B     mailbox/api/src/test/resources/shattered-2.pdf
  B     mailbox/api/src/test/resources/shattered-1.pdf
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/acl/UnionMailboxACLResolverTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/acl/PositiveUserACLDiffTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/acl/PositiveUserACLChangedTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/acl/ACLDiffTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/RoleTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/util/EventCollector.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MailboxSessionUtil.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/fixture/MailboxFixture.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/mock/DataProvisioner.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/mock/MockMail.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/events/MailboxIdRegistrationKeyTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/EventTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MetadataWithMailboxIdTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAssertingTool.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRootTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAssertingToolTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxCountersTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MultimailboxesSearchQueryTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/UidValidityTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageAttachmentMetadataTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/ContentTypeTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/ThreadIdTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaOperationTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaRatioTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/SearchQueryTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxPathTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/FetchGroupTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/ComposedMessageIdWithMetaDataTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/PartContentDescriptorTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationKeyTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentIdTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MimePathTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/TestMessageId.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/search/ExactNameTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/search/MailboxQueryTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedWildcardTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/search/PrefixedRegexTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/search/WildcardTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageIdDtoTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/TestId.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/AttachmentMetadataTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/CidTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/CurrentQuotasTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxAnnotationTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/UpdatedFlagsTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MailboxACLEntryKeyTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/Rfc4314RightsTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageMetaDataTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageRangeTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/MessageMovesTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/model/QuotaTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/ComposedMessageIdTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/SubscriptionManagerContract.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/quota/QuotaFixture.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/ApplicableFlagBuilderTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/indexer/ReindexingExecutionFailuresTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/indexer/ReindexingFailureTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MessageUidTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MailboxExceptionTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/manager/IntegrationResources.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/manager/ManagerTestProvisionner.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/manager/QuotaMessageManagerContract.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/AppendResultTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MessageMoveEventTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MailboxListenerTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/MailboxManagerStressContract.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/ModSeqTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/extension/PreDeletionHookTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/extractor/ParsedContentTest.java
  AL    mailbox/api/src/test/java/org/apache/james/mailbox/extractor/TextExtractorContract.java
  AL    mailbox/api/src/reporting-site/site.xml
  AL    mailbox/api/pom.xml
  AL    mailbox/pom.xml
 !????? mailbox/README.md
 !????? mailbox/var/store/derby/db.lck
  B     mailbox/var/store/derby/dbex.lck
 !????? mailbox/var/store/derby/service.properties
  B     mailbox/var/store/derby/log/log1.dat
  B     mailbox/var/store/derby/log/log.ctrl
 !????? mailbox/var/store/derby/log/README_DO_NOT_TOUCH_FILES.txt
  B     mailbox/var/store/derby/log/logmirror.ctrl
 !????? mailbox/var/store/derby/README_DO_NOT_TOUCH_FILES.txt
  B     mailbox/var/store/derby/seg0/c1f1.dat
  B     mailbox/var/store/derby/seg0/c101.dat
  B     mailbox/var/store/derby/seg0/c4f0.dat
  B     mailbox/var/store/derby/seg0/c651.dat
  B     mailbox/var/store/derby/seg0/c111.dat
  B     mailbox/var/store/derby/seg0/c470.dat
  B     mailbox/var/store/derby/seg0/c1e0.dat
  B     mailbox/var/store/derby/seg0/c161.dat
  B     mailbox/var/store/derby/seg0/c2f0.dat
  B     mailbox/var/store/derby/seg0/c300.dat
  B     mailbox/var/store/derby/seg0/c340.dat
  B     mailbox/var/store/derby/seg0/c5a1.dat
  B     mailbox/var/store/derby/seg0/ca1.dat
  B     mailbox/var/store/derby/seg0/c41.dat
  B     mailbox/var/store/derby/seg0/c141.dat
  B     mailbox/var/store/derby/seg0/c530.dat
  B     mailbox/var/store/derby/seg0/c121.dat
  B     mailbox/var/store/derby/seg0/cc0.dat
  B     mailbox/var/store/derby/seg0/c501.dat
  B     mailbox/var/store/derby/seg0/cd1.dat
  B     mailbox/var/store/derby/seg0/c81.dat
  B     mailbox/var/store/derby/seg0/c3a1.dat
  B     mailbox/var/store/derby/seg0/c2e1.dat
  B     mailbox/var/store/derby/seg0/c230.dat
  B     mailbox/var/store/derby/seg0/c2a1.dat
  B     mailbox/var/store/derby/seg0/c5b0.dat
  B     mailbox/var/store/derby/seg0/c1c0.dat
  B     mailbox/var/store/derby/seg0/c90.dat
  B     mailbox/var/store/derby/seg0/c3c0.dat
  B     mailbox/var/store/derby/seg0/c541.dat
  B     mailbox/var/store/derby/seg0/c661.dat
  B     mailbox/var/store/derby/seg0/c6b1.dat
  B     mailbox/var/store/derby/seg0/c371.dat
  B     mailbox/var/store/derby/seg0/ce1.dat
  B     mailbox/var/store/derby/seg0/c4b0.dat
  B     mailbox/var/store/derby/seg0/c351.dat
  B     mailbox/var/store/derby/seg0/c1d1.dat
  B     mailbox/var/store/derby/seg0/c6d1.dat
  B     mailbox/var/store/derby/seg0/c331.dat
  B     mailbox/var/store/derby/seg0/c561.dat
  B     mailbox/var/store/derby/seg0/c400.dat
  B     mailbox/var/store/derby/seg0/c51.dat
  B     mailbox/var/store/derby/seg0/c5d0.dat
  B     mailbox/var/store/derby/seg0/c311.dat
  B     mailbox/var/store/derby/seg0/c200.dat
  B     mailbox/var/store/derby/seg0/c6a1.dat
  B     mailbox/var/store/derby/seg0/c481.dat
  B     mailbox/var/store/derby/seg0/c5f0.dat
  B     mailbox/var/store/derby/seg0/c581.dat
  B     mailbox/var/store/derby/seg0/c380.dat
  B     mailbox/var/store/derby/seg0/c461.dat
  B     mailbox/var/store/derby/seg0/c391.dat
  B     mailbox/var/store/derby/seg0/c681.dat
  B     mailbox/var/store/derby/seg0/c2c1.dat
  B     mailbox/var/store/derby/seg0/c570.dat
  B     mailbox/var/store/derby/seg0/c510.dat
  B     mailbox/var/store/derby/seg0/c3f1.dat
  B     mailbox/var/store/derby/seg0/c451.dat
  B     mailbox/var/store/derby/seg0/c3e1.dat
  B     mailbox/var/store/derby/seg0/c640.dat
  B     mailbox/var/store/derby/seg0/c631.dat
  B     mailbox/var/store/derby/seg0/c281.dat
  B     mailbox/var/store/derby/seg0/c3b1.dat
  B     mailbox/var/store/derby/seg0/c31.dat
  B     mailbox/var/store/derby/seg0/c180.dat
  B     mailbox/var/store/derby/seg0/c130.dat
  B     mailbox/var/store/derby/seg0/c421.dat
  B     mailbox/var/store/derby/seg0/c1b1.dat
  B     mailbox/var/store/derby/seg0/c361.dat
  B     mailbox/var/store/derby/seg0/c3d1.dat
  B     mailbox/var/store/derby/seg0/c241.dat
  B     mailbox/var/store/derby/seg0/c211.dat
  B     mailbox/var/store/derby/seg0/c251.dat
  B     mailbox/var/store/derby/seg0/c6c1.dat
  B     mailbox/var/store/derby/seg0/c691.dat
  B     mailbox/var/store/derby/seg0/c10.dat
  B     mailbox/var/store/derby/seg0/c4a1.dat
  B     mailbox/var/store/derby/seg0/c4d0.dat
  B     mailbox/var/store/derby/seg0/c590.dat
  B     mailbox/var/store/derby/seg0/c521.dat
  B     mailbox/var/store/derby/seg0/c490.dat
  B     mailbox/var/store/derby/seg0/c2b1.dat
 !????? mailbox/var/store/derby/seg0/README_DO_NOT_TOUCH_FILES.txt
  B     mailbox/var/store/derby/seg0/c4e1.dat
  B     mailbox/var/store/derby/seg0/c20.dat
  B     mailbox/var/store/derby/seg0/c610.dat
  B     mailbox/var/store/derby/seg0/c191.dat
  B     mailbox/var/store/derby/seg0/c71.dat
  B     mailbox/var/store/derby/seg0/c2d0.dat
  B     mailbox/var/store/derby/seg0/c60.dat
  B     mailbox/var/store/derby/seg0/c5c1.dat
  B     mailbox/var/store/derby/seg0/c601.dat
  B     mailbox/var/store/derby/seg0/c171.dat
  B     mailbox/var/store/derby/seg0/c150.dat
  B     mailbox/var/store/derby/seg0/c441.dat
  B     mailbox/var/store/derby/seg0/c621.dat
  B     mailbox/var/store/derby/seg0/c290.dat
  B     mailbox/var/store/derby/seg0/c1a1.dat
  B     mailbox/var/store/derby/seg0/c221.dat
  B     mailbox/var/store/derby/seg0/c271.dat
  B     mailbox/var/store/derby/seg0/c321.dat
  B     mailbox/var/store/derby/seg0/cf0.dat
  B     mailbox/var/store/derby/seg0/c430.dat
  B     mailbox/var/store/derby/seg0/c5e1.dat
  B     mailbox/var/store/derby/seg0/c411.dat
  B     mailbox/var/store/derby/seg0/c671.dat
  B     mailbox/var/store/derby/seg0/cb1.dat
  B     mailbox/var/store/derby/seg0/c550.dat
  B     mailbox/var/store/derby/seg0/c260.dat
  B     mailbox/var/store/derby/seg0/c4c1.dat
 !????? mailbox/var/store/lucene/write.lock
  AL    mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
  AL    mailbox/jpa/src/main/resources/james-database.properties
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAId.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAnnotationMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMailboxMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/MessageUtils.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAMessageMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotation.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAUserFlag.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailbox.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAProperty.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAMailboxAnnotationId.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/EncryptDecryptHelper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessageWithAttachmentStorage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAEncryptedMailboxMessage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAStreamingMailboxMessage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/JPAAttachment.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAModSeqProvider.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/JPAUidProvider.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxSessionMapperFactory.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPATransactionalMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAAttachmentContentLoader.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaManager.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxDomainMessageCount.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxUserStorage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/JpaCurrentQuota.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxGlobalMessageCount.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxDomainStorage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxGlobalStorage.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/model/MaxUserMessageCount.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaDAO.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/quota/JpaCurrentQuotaManager.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/model/JPASubscription.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/user/JPASubscriptionMapper.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
  AL    mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageFactory.java
  AL    mailbox/jpa/src/test/resources/persistence.xml
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAttachmentMapper.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAAttachmentMapperTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMessageMapperTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/task/JPARecomputeCurrentQuotasServiceTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMessageMapper.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/MessageUtilsTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMapperProvider.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalAnnotationMapper.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/model/openjpa/JPAMailboxMessageTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaAnnotationMapperTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JPAMessageWithAttachmentMapperTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMessageMoveTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/TransactionalMailboxMapper.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/mail/JpaMailboxMapperTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerProvider.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JpaMailboxManagerStressTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPASubscriptionManagerTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPACurrentQuotaManagerTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/quota/JPAPerUserMaxQuotaTest.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxFixture.java
  AL    mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
  AL    mailbox/jpa/src/reporting-site/site.xml
  AL    mailbox/jpa/pom.xml
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchivesLoader.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/Zipper.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/LongExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/StringExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/UidExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipArchivesLoader.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/WithZipHeader.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/EntryTypeExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZippedMailAccountIterator.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ExtraFieldExtractor.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/SizeExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/InternalDateExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipEntryType.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/MessageIdExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/package-info.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/ZipEntryIterator.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/MailboxIdExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/UidValidityExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/zip/FlagsExtraField.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SerializedMessageId.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/UnknownArchiveEntry.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ZipMailArchiveRestorer.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/ArchiveService.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/DefaultMailboxBackup.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/SerializedMailboxId.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxWithAnnotations.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MessageArchiveEntry.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveRestorer.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveEntry.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxBackup.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailboxWithAnnotationsArchiveEntry.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/MailArchiveIterator.java
  AL    mailbox/backup/src/main/java/org/apache/james/mailbox/backup/Directory.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/InternalDateExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/WithZipHeaderTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DefaultMailboxBackupTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssert.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipEntryTypeExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipperTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/DirectoryTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MessageIdExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipEntryTypeContract.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxIdExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/FlagExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/MailboxMessageFixture.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchivesLoaderTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/SizeExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/UidValidityExtraFieldTest.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipArchiveEntryAssert.java
  AL    mailbox/backup/src/test/java/org/apache/james/mailbox/backup/ZipAssertTest.java
  AL    mailbox/backup/pom.xml
  B     mailbox/scanning-search/src/test/resources/pdf.pdf
  AL    mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
  AL    mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/PDFTextExtractor.java
  AL    mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/PDFTextExtractorTest.java
  AL    mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SearchThreadIdGuessingAlgorithmTest.java
  AL    mailbox/scanning-search/pom.xml
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/RandomMailboxSessionIdGenerator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreSubscriptionManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/LazyMimeDescriptor.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxSessionMapperFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxSubscriptionListener.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/event/MailboxAnnotationListener.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/event/EventFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/event/SpamEventListener.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AnnotationMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/UidProvider.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/SearchThreadIdGuessingAlgorithm.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MailboxMapperFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ThreadIdGuessingAlgorithm.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/FetchGroupConverter.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AbstractMessageMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/FlagsFilter.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/StandardNames.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MailboxIdDeserialisationException.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/MessageParser.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilder.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/FileBufferedBodyFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/Properties.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Message.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Subject.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/FlagsFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/Property.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MailboxMessage.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/MimeMessageId.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AttachmentMapperFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageMapperFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/ModSeqProvider.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/utils/MimeMessageHeadersUtil.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/AttachmentMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/NaiveThreadIdGuessingAlgorithm.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/MessageIdMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/FlagsUpdateCalculator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreAttachmentManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/BatchSizes.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxAnnotationManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/SessionProviderImpl.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoMaxQuotaManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolver.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoQuotaManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/CurrentQuotaCalculator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaComponents.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/NoQuotaUpdater.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdater.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/FixedMaxQuotaManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/StoreQuotaManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaUpdater.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/quota/QuotaChecker.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/FullByteContent.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/PartContentBuilder.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/InputStreamContent.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/streaming/CountingInputStream.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/ResultUtils.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/MessageComparators.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/CombinedComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/BaseSubjectComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/SentDateComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/HeaderDisplayComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/HeaderMailboxComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/comparator/AbstractHeaderComparator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SearchUtil.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndex.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearches.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/MessageSearchIndex.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndex.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndex.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageBatcher.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageIdManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/SystemMailboxesProviderImpl.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreRightManager.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/TransactionalMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/Mapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/transaction/NonTransactionalMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/user/model/Subscription.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapper.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/user/SubscriptionMapperFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageMovesWithMailbox.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageFactory.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageStorer.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthorizator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/PreDeletionHooks.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MoveResult.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MimeDescriptorImpl.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxExpressionBackwardCompatibility.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/FakeAuthenticator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxSessionIdGenerator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxManagerConfiguration.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/MailboxReactorUtils.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/extractor/JsoupTextExtractor.java
  AL    mailbox/store/src/main/java/org/apache/james/mailbox/store/extractor/DefaultTextExtractor.java
 !????? mailbox/store/src/test/resources/eml/pgpSignedMail.eml
 !????? mailbox/store/src/test/resources/eml/htmlMail.eml
 !????? mailbox/store/src/test/resources/eml/mail4.eml
 !????? mailbox/store/src/test/resources/eml/recursiveMail.eml
 !????? mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
 !????? mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
 !????? mailbox/store/src/test/resources/eml/calendar2.eml
 !????? mailbox/store/src/test/resources/eml/signedMessage.eml
  B     mailbox/store/src/test/resources/eml/4037_014.jpg
 !????? mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
  B     mailbox/store/src/test/resources/eml/recursiveMail.json
 !????? mailbox/store/src/test/resources/eml/mail5.eml
 !????? mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
 !????? mailbox/store/src/test/resources/eml/spamMail.eml
 !????? mailbox/store/src/test/resources/eml/mail.eml
 !????? mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
 !????? mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
  B     mailbox/store/src/test/resources/eml/mail.json
  B     mailbox/store/src/test/resources/eml/attachment.pdf
 !????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
 !????? mailbox/store/src/test/resources/eml/invalidCharset.eml
  B     mailbox/store/src/test/resources/eml/james-3901.json
 !????? mailbox/store/src/test/resources/eml/headerWithDot.eml
 !????? mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
 !????? mailbox/store/src/test/resources/eml/inlined-mixed.eml
 !????? mailbox/store/src/test/resources/eml/filenameOnly.eml
 !????? mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
 !????? mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
 !????? mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
 !????? mailbox/store/src/test/resources/eml/james-3901.eml
 !????? mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
  B     mailbox/store/src/test/resources/eml/4037_015.jpg
  B     mailbox/store/src/test/resources/eml/pgpSignedMail.json
  B     mailbox/store/src/test/resources/eml/spamMail.json
 !????? mailbox/store/src/test/resources/eml/filenameAndName.eml
 !????? mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
 !????? mailbox/store/src/test/resources/eml/mail3.eml
  B     mailbox/store/src/test/resources/eml/recursiveMailWithoutAttachments.json
 !????? mailbox/store/src/test/resources/eml/frnog.eml
 !????? mailbox/store/src/test/resources/eml/twoAttachments.eml
 !????? mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
  B     mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachmentWithoutAttachment.json
 !????? mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
 !????? mailbox/store/src/test/resources/eml/unknownDisposition.eml
 !????? mailbox/store/src/test/resources/eml/mail2.eml
  B     mailbox/store/src/test/resources/eml/nonTextual.json
 !????? mailbox/store/src/test/resources/eml/mail1.eml
  B     mailbox/store/src/test/resources/eml/invalidCharset.json
 !????? mailbox/store/src/test/resources/eml/noAttachment.eml
 !????? mailbox/store/src/test/resources/eml/charset.eml
  B     mailbox/store/src/test/resources/eml/gimp.png
  B     mailbox/store/src/test/resources/eml/spamMailNoHeaders.json
 !????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
  B     mailbox/store/src/test/resources/eml/htmlMail.json
 !????? mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
 !????? mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
 !????? mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
  A     mailbox/store/src/test/resources/eml/ديناصور.odt
 !????? mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
 !????? mailbox/store/src/test/resources/eml/calendar.eml
 !????? mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
 !????? mailbox/store/src/test/resources/eml/charset2.eml
 !????? mailbox/store/src/test/resources/eml/nonTextual.eml
  AL    mailbox/store/src/test/resources/documents/html-iso-8859-1.html
 !????? mailbox/store/src/test/resources/documents/writter.docx
  B     mailbox/store/src/test/resources/documents/simple-text-iso-8859-1.txt
 !????? mailbox/store/src/test/resources/documents/Text.txt
  AL    mailbox/store/src/test/resources/documents/html.txt
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerStorageTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxReactorUtilsTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageManagerTestSystem.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MailboxMessageResultImplTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractCombinationManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMailboxManagerAttachmentTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/CombinationManagerTestSystem.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/event/MailboxAnnotationListenerTest.java
 !????? mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageUidProviderTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMailboxAssert.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AttachmentMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageAssert.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/PropertyBuilderTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/MessageParserTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessageTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFactoryTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageWithAttachmentMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperACLTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssertTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MetadataMapAssertTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMessageIdTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/PropertyTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageIdMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MetadataMapAssert.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MapperProvider.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/FlagsFilterTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMailboxAssertTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssertTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessageTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageUidProvider.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMoveTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessageAssert.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MessageMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/SubjectTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MimeMessageIdTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AnnotationMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/ListMessagePropertiesAssert.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/MailboxMessageAssertTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/utils/ApplicableFlagCalculatorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/ThreadIdGuessingAlgorithmContract.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/PreDeletionHooksTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageIdManagerTestSystem.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/SystemMailboxesProviderImplTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBatcherTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/ResultUtilsTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/BatchSizesTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/CurrentQuotaManagerContract.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/StoreQuotaManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/GenericMaxQuotaManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/ListeningCurrentQuotaUpdaterTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/QuotaCheckerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/quota/DefaultUserQuotaRootResolverTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/PartContentBuilderComplexMultipartTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/streaming/CountingInputStreamTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/comparator/SentDateComparatorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/CombinedComparatorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsMultipartMixedTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/AbstractMessageSearchIndexTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/ListeningMessageSearchIndexContract.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/SearchUtilsRFC822Test.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/search/LazyMessageSearchIndexTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/user/SubscriptionMapperTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/PartContentBuilderMultipartAlternativeTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerQuotaTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/AbstractMessageIdManagerSideEffectTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/FlagsUpdateCalculatorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreRightManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/JVMMailboxPathLockerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreAttachmentManagerTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/extractor/JsoupTextExtractorTest.java
  AL    mailbox/store/src/test/java/org/apache/james/mailbox/store/extractor/DefaultTextExtractorTest.java
  AL    mailbox/store/src/reporting-site/site.xml
  AL    mailbox/store/pom.xml
  AL    mailbox/lucene/src/main/resources/META-INF/spring/mailbox-index-lucene.xml
  AL    mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndex.java
  AL    mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/UpperCaseFilter.java
  AL    mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/LenientImapSearchAnalyzer.java
  AL    mailbox/lucene/src/main/java/org/apache/james/mailbox/lucene/search/StrictImapSearchAnalyzer.java
  AL    mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/StrictLuceneMessageSearchIndexText.java
  AL    mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
  AL    mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
  AL    mailbox/lucene/src/reporting-site/site.xml
  AL    mailbox/lucene/pom.xml
  B     mailbox/cassandra/doc/table_structure.png
 !????? mailbox/cassandra/doc/README.md
 !????? mailbox/cassandra/doc/table_structure.drawio
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/json/MailboxACLJsonConverter.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMessageManager.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageRepresentation.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandler.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentation.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTask.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTask.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesService.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTask.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTask.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskAdditionalInformationDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RunningOptionsDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesService.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersService.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskAdditionalInformationDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskRunner.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskAdditionalInformationDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/ConflictingEntry.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskAdditionalInformationDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/task/MessageInconsistenciesEntry.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentBlobReferenceSource.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MessageBlobReferenceSource.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/ACLMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoader.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProvider.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/SetACLCommand.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLDiffDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLDTO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/AclV2DAOSubscriber.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdated.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/DeleteMailboxCommand.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UserRightsDAOSubscriber.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxACLAggregate.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/UpdateACLCommand.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/MailboxAggregateId.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/MailboxDeleteDuringUpdateException.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentsDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/ThreadTablePartitionKey.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProvider.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMetadata.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/FlagsUpdateStageResult.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraFirstUnseenDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraIdAndPath.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraACLDAOV2.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadLookupDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAO.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageId.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/ids/CassandraId.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraApplicableFlagsModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraFirstUnseenModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxCounterModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraDeletedMessageModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraUidModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraModSeqModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraSubscriptionModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAnnotationModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAclModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxRecentsModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraThreadModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraAttachmentModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxQuotaModule.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithm.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraGlobalMaxQuotaDao.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/Limits.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/FakeCassandraCurrentQuotaManager.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/QuotaCodec.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV2.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigration.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraPerUserMaxQuotaManagerMigration.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaDao.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/FakeMaxQuotaManager.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV1.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV2.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/quota/CassandraPerDomainMaxQuotaDao.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/UidSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/UnseenSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/AllSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/NotDeletedWithRangeSearchOverride.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapper.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/GhostMailbox.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListener.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxManager.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/CassandraMailboxSessionMapperFactory.java
  AL    mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/DeleteMessageListener.java
  B     mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.additionalInformation.json
  B     mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.additionalInformation.legacy.json
  B     mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.task.legacy.json
  B     mailbox/cassandra/src/test/resources/json/solveMessageInconsistencies.task.json
  B     mailbox/cassandra/src/test/resources/shattered-2.pdf
 !????? mailbox/cassandra/src/test/resources/cassandra-driver.conf
  B     mailbox/cassandra/src/test/resources/shattered-1.pdf
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/json/MailboxACLJsonConverterTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerProvider.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraTestSystemFixture.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxRecentDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraModSeqProviderTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraFirstUnseenDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxAggregateModule.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperAclTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraThreadLookupDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxPathV3DAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxInconsistenciesPOJOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesServiceTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesServiceTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/CassandraRecomputeCurrentQuotasServiceTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/MailboxMergingTaskTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMailboxInconsistenciesTaskSerializationTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersTaskSerializationTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/RecomputeMailboxCountersServiceTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/task/SolveMessageInconsistenciesTaskSerializationTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/AttachmentLoaderTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperRelaxedConsistencyTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxManagerAttachmentTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapperRelaxedConsistencyTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperContract.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUserMailboxRightsDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MessageAttachmentRepresentationByIdTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentDAOV2Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAnnotationMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMoveTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageWithAttachmentMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMapperProvider.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraDeletedMessageDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/eventsourcing/acl/ACLUpdatedDTOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperConcurrencyTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraUidProviderTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperV2Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/MailboxFixture.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraAttachmentMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxMapperGenericTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/FlagsUpdateStageResultTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/utils/GuiceUtils.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraACLMapperNoACLTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMailboxCounterDAOTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraIndexTableHandlerTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerStressTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraThreadIdGuessingAlgorithmTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTestSystem.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerStorageTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraMessageIdTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/ids/CassandraIdTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerConsistencyTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMailboxManagerTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerMigrationTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV1Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/migration/CassandraCurrentQuotaManagerMigrationTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV1Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraPerUserMaxQuotaManagerV2Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/quota/CassandraCurrentQuotaManagerV2Test.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraSubscriptionManagerTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerTestSystem.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/UnseenSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/UidSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/NotDeletedWithRangeSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/AllSearchOverrideTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraCombinationManagerTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/user/CassandraSubscriptionMapperTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerQuotaTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/TestCassandraMailboxSessionMapperFactory.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/MailboxOperationLoggingListenerTest.java
  AL    mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/CassandraMessageIdManagerSideEffectTest.java
  AL    mailbox/cassandra/src/reporting-site/site.xml
  AL    mailbox/cassandra/pom.xml
  N     mailbox/cassandra/README.txt
 !????? docs/modules/customization/nav.adoc
 !????? docs/modules/customization/pages/index.adoc
 !????? docs/modules/servers/nav.adoc
 !????? docs/modules/servers/pages/5-minute-demo.adoc
 !????? docs/modules/servers/pages/extendable.adoc
 !????? docs/modules/servers/pages/15-minute-demo.adoc
 !????? docs/modules/servers/pages/test.adoc
 !????? docs/modules/servers/pages/demo.adoc
 !????? docs/modules/servers/pages/basic/context.adoc
 !????? docs/modules/servers/pages/basic/objectives.adoc
 !????? docs/modules/servers/pages/basic/conf/index.adoc
 !????? docs/modules/servers/pages/basic/help.adoc
 !????? docs/modules/servers/pages/basic/concepts.adoc
 !????? docs/modules/servers/pages/basic/architecture.adoc
 !????? docs/modules/servers/pages/basic/index.adoc
 !????? docs/modules/servers/pages/basic/self-hosting.notes
 !????? docs/modules/servers/pages/run.adoc
 !????? docs/modules/servers/pages/index.adoc
 !????? docs/modules/concepts/nav.adoc
 !????? docs/modules/concepts/pages/configuration.adoc
 !????? docs/modules/concepts/pages/mail/index.adoc
 !????? docs/modules/concepts/pages/storage/mailbox.adoc
 !????? docs/modules/concepts/pages/storage/users.adoc
 !????? docs/modules/concepts/pages/storage/index.adoc
 !????? docs/modules/concepts/pages/messages/mime.adoc
 !????? docs/modules/concepts/pages/messages/imf.adoc
 !????? docs/modules/concepts/pages/messages/index.adoc
 !????? docs/modules/concepts/pages/protocols/jmap.adoc
 !????? docs/modules/concepts/pages/protocols/imap.adoc
 !????? docs/modules/concepts/pages/protocols/smtp.adoc
 !????? docs/modules/concepts/pages/protocols/index.adoc
 !????? docs/modules/concepts/pages/protocols/pop.adoc
 !????? docs/modules/concepts/pages/protocols/esmtp.adoc
 !????? docs/modules/concepts/pages/protocols/lmtp.adoc
 !????? docs/modules/concepts/pages/user/index.adoc
 !????? docs/modules/concepts/pages/processing/index.adoc
 !????? docs/modules/concepts/pages/glossary.adoc
 !????? docs/modules/concepts/pages/index.adoc
 !????? docs/modules/ROOT/nav.adoc
 !????? docs/modules/ROOT/pages/index.adoc
 !????? docs/modules/development/nav.adoc
 !????? docs/modules/development/pages/deployment-tests.adoc
 !????? docs/modules/development/pages/logging.adoc
 !????? docs/modules/development/pages/index.adoc
 !????? docs/modules/community/nav.adoc
 !????? docs/modules/community/pages/support.adoc
 !????? docs/modules/community/pages/website.adoc
 !????? docs/modules/community/pages/guidelines.adoc
 !????? docs/modules/community/pages/download.adoc
 !????? docs/modules/community/pages/mailing-lists.adoc
 !????? docs/modules/community/pages/release.adoc
 !????? docs/modules/community/pages/index.adoc
 !????? docs/modules/community/pages/contributing.adoc
  B     docs/modules/community/images/linagora.png
 !????? docs/antora.yml
  N     LICENSE
  AL    checkstyle-suppressions.xml
 !????? testing/base/src/main/resources/logback-test.xml
 !????? testing/base/src/main/resources/testcontainers.properties
  AL    testing/base/src/main/java/org/apache/james/junit/categories/Unstable.java
  AL    testing/base/pom.xml
  AL    Jenkinsfile
 
*****************************************************

 Printing headers for text files without a valid license header...
 
=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_session_fixation.test
=====================================================
S: 220 mydomain.tld smtp

C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS

C: AUTH LOGIN
S: 334 VXNlcm5hbWU6
C: Ym9iQG15ZG9tYWluLnRsZA==
S: 334 UGFzc3dvcmQ6
C: c2VjcmV0
S: 235 Authentication Successful


C: mail from:<bob@mydomain.tld>
C: rcpt to:<matthieu@yopmail.com>
S: 250 2.1.0 Sender <bob@mydomain.tld> OK
S: 250 2.1.5 Recipient <matthieu@yopmail.com> OK

C: starttls
S: 501 .*

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/rcpt_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<starttls@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <starttls@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content content
C: .
S: 250 2.6.0 Message received

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/authplain.test
=====================================================
S: 220 mydomain.tld smtp
C: AUTH LOGIN
S: 334 VXNlcm5hbWU6
C: Ym9iQG15ZG9tYWluLnRsZA==
S: 334 UGFzc3dvcmQ6
C: c2VjcmV0
S: 235 Authentication Successful

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content starttls content
C: .
S: 250 2.6.0 Message received

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls_with_injection.test
=====================================================
S: 220 mydomain.tld smtp

C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS

C: starttls\r\nmail from:<matthieu@yopmail.com>\r\n
S: 451 Unable to process request

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/helo.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250 8BITMIME
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: content
C: .
S: 250 2.6.0 Message received

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/data_starts_with_starttls.test
=====================================================
S: 220 mydomain.tld smtp
C: ehlo yopmail.com
C: mail from:<matthieu@yopmail.com>
C: rcpt to:<bob@mydomain.tld>
C: data
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS
S: 250 2.1.0 Sender <matthieu@yopmail.com> OK
S: 250 2.1.5 Recipient <bob@mydomain.tld> OK
S: 354 Ok Send data ending with <CRLF>.<CRLF>
C: subject: test
C:
C: starttls content
C: .
S: 250 2.6.0 Message received

=====================================================
== File: mpt/impl/smtp/core/src/main/resources/org/apache/james/smtp/scripts/starttls.test
=====================================================
S: 220 mydomain.tld smtp

C: ehlo yopmail.com
S: 250.*
S: 250-AUTH LOGIN PLAIN
S: 250-AUTH=LOGIN PLAIN
S: 250-PIPELINING
S: 250-ENHANCEDSTATUSCODES
S: 250-8BITMIME
S: 250 STARTTLS

C: starttls
S: 220 2.0.0 Ready to start TLS

=====================================================
== File: mpt/impl/imap-mailbox/core/src/main/resources/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
        </root>

        <logger name="org.apache.james" level="WARN">
                <appender-ref ref="CONSOLE" />
        </logger>


</configuration>

=====================================================
== File: mpt/impl/imap-mailbox/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
  basic.request {
    timeout = 5 seconds
  }
}

=====================================================
== File: upgrade-instructions.md
=====================================================
# Upgrade instructions

This document covers every changes an Ops needs to be aware of when running James.

The following procedures are to take as it, and the Apache Software Foundation, nor its contributors, can not be 
responsible for any damages generated by following the below procedures.

Before performing these operations, you should ensure to have the skills to conduct the operations, and you should read other
software documentation. Do not follow this guide blindly!

## Unreleased

Note: this section is in progress. It will be updated during all the development process until the release.
No changes yet.

Changes to apply between 3.8.x and 3.9.0 will be reported here.

Change list:

 - [Imap Packages](#imap-packages)
 - [Jmap uploads](#jmap-uploads)
 - [Mutualize quota table](#mutualize-quota-table)
 - [Drop Legacy Cassandra migrations](#drop-legacy-cassandra-migrations)
 - [Improve CassandraThreadIdGuessingAlgorithm](#improve-cassandrathreadidguessingalgorithm)
 - [Set up TTL on the mailbox_change and email_change tables](#set-up-ttl-on-the-mailboxchange-and-emailchange-tables)
 - [Change compaction strategy of blob_cache table](#change-compaction-strategy-of-blobcache-table)
 - [RRT forwards now rewrite senders](#rrt-forwards-now-rewrite-senders)
 - [Increase RabbitMQ consumer timeout on the task queue](#increase-rabbitmq-consumer-timeout-on-the-task-queue)
 - [JMX authentication for Spring](#jmx-authentication-for-spring)

### JMX authentication for Spring

Date: 19/12/2023

Spring distribution now requires `jmxremote.access` and `jmxremote.password` files within the `/conf` folder in order to start.

### Increase RabbitMQ consumer timeout on the task queue

Date: 11/20/2023

JIRA: https://issues.apache.org/jira/browse/JAMES-3955

Before, the RabbitMQ default acknowledgement timeout on the `taskManagerWorkQueue` was 30 minutes.
This is not enough for long-running tasks, therefore we advise to increase the acknowledgement timeout and now enforce it to 1 day by default.

rf: https://www.rabbitmq.com/consumers.html#acknowledgement-timeout

To make the per queue argument feature work, update your RabbitMQ to version 3.12 at least.

If you want the old behavior where consumer timeout defaults to 30 minutes, you can either not upgrade your RabbitMQ or set `task.queue.consumer.timeout=30minutes` in `rabbitmq.properties`.

=====================================================
== File: code-coverage-report/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.james</groupId>
        <artifactId>james-project</artifactId>
        <version>3.9.0-SNAPSHOT</version>
    </parent>

    <artifactId>code-coverage-report</artifactId>
    <name>Apache James :: Code Coverage Report</name>
    <description>Generate code coverage report for Apache James</description>
    <packaging>pom</packaging>

    <dependencies>
        <!--        Parent dependencies are in pom package type, can not directly declare as jar-->
        <!--        1. apache-james-mailbox-->
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-api</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-cassandra</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-deleted-messages-vault</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-deleted-messages-vault-cassandra</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-event-json</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-lucene</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-memory</artifactId>
        </dependency>
        <dependency>

=====================================================
== File: CHANGELOG.md
=====================================================
# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)

## [unreleased]

### Security

- [FIX] JMX password auto-detection
- [FIX] Enforce CRLF as part of SMTP DATA transaction (#1876)
- [FIX] Set up JMX auth for Spring
- [FIX] Set up JMX auth filter for Guice

### New Features

- JAMES-3942 Audit trail
- JAMES-3897 Crowdsec integration for SMTP
- JAMES-3964 Implement and test disabledCaps for SMTP
- JAMES-3962 JMAP Email/set: specific headers for body parts (#1801)
- JAMES-3960 Hints to ensure UID/ModSeq consistency in case of disaster
- JAMES-3959 Starting distributed James without OpenSearch (#1784)
- JAMES-3954 Implement RFC-9394 PARTIAL for IMAP FETCH/SEARCH
- JAMES-3944 JMAP FILTER: More features: forward, flag, discard, etc...
- JAMES-3930 ReadOnlyUsersLDAPRepository::test should allow authentication using localPart as login username
- Supporting several LDAP hosts
- JAMES 3822 SMTP FutureRelease Extension
- JAMES-2434 IsFromMailingList matcher (#1606)
- JAMES-3906 SSL hot reload for IMAP /SMTP
- JAMES-3908 Storage directive with several folder (#1575)
- JAMES-3909 Fully delete one user data webadmin endpoint

### Improvements

 - JAMES-3967 RelayLimit: add error log
 - JAMES-3967 Store mails when relay is exceeded
 - [FIX] LdapRepositoryConfiguration should interoperate with UsersRepositoryImpl (#1855)
 - JAMES-3539 PushSubscription/get should return expired subscriptions (#1845)
 - [ENHANCEMENT] Allow to trust all certificates with S3 blobstore (#1846)
 - Numerous dependency updates
 - [IMPROVEMENT] JMAP: Display message/disposition-notification in main message body
 - JAMES-3965 DKIMSign: Use fileSystem in order to resolve privateKeyFilepath
 - JAMES-3963 Full text search: AND for combining phrase terms (#1810)
 - JAMES-3963 Sort From To Cc on display name first (#1811)
 - JAMES-3955 Increase consumer timeout for TaskManagerWorkQueue
 - JAMES-3955 WARNING logs upon closing RABBITMQ channels
 - JAMES-3955 Applicative timeouts before Rabbit timeouts
 - JAMES-3958 DKIM: Be resilient when updating mails with invalid headers (#1783)
 - JAMES-3874 LMTP should handle overQuota exceptions
 - JAMES-3944 Forwards should rewrite MAIL FROM

=====================================================
== File: third-party/rspamd/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      rspamd:
          condition: service_healthy
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
      - $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
      - $PWD/sample-configuration/mailetcontainer_memory.xml:/root/conf/mailetcontainer.xml
      - $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
      - $PWD/sample-configuration/rspamd.properties:/root/conf/rspamd.properties
      - $PWD/sample-configuration/webadmin.properties:/root/conf/webadmin.properties
      - $PWD/sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"

  redis:
    image: redis:7.0.12
    command:
      - "--loglevel"
      - "debug"

  clamav:
    image: clamav/clamav:1.1

  rspamd:
    depends_on:
      clamav:
          condition: service_healthy
      redis:
          condition: service_started
    container_name: rspamd
    image: a16bitsysop/rspamd:3.5-r7-alpine3.18.2-r0
    environment:
      - REDIS=redis

=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/actions.conf
=====================================================
# Actions settings
# Please don't modify this file as your changes might be overwritten with
# the next update.
#
# You can modify 'local.d/actions.conf' to add and merge
# parameters defined inside this section
#
# You can modify 'override.d/actions.conf' to strictly override all
# parameters defined inside this section
#
# See https://rspamd.com/doc/faq.html#what-are-the-locald-and-overrided-directories
# for details
#
# See also https://rspamd.com/doc/faq.html#what-are-rspamd-actions for actions definition

actions {
    reject = 14; # Reject when reaching this score
    add_header = 6; # Add header when reaching this score
    greylist = 4; # Apply greylisting when reaching this score (will emit `soft reject action`)

    #unknown_weight = 1.0; # Enable if need to set score for all symbols implicitly
    # Each new symbol is added multiplied by gf^N, where N is the number of spammy symbols
    #grow_factor = 1.1;
    # Set rewrite subject to this value (%s is replaced by the original subject)
    #subject = "***SPAM*** %s"

    .include(try=true; priority=1; duplicate=merge) "$LOCAL_CONFDIR/local.d/actions.conf"
    .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/actions.conf"
}

=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/antivirus.conf
=====================================================
clamav {
  # Scan mime_parts seperately - otherwise the complete mail will be transfered to AV Scanner
  #attachments_only = true; # Before 1.8.1
  scan_mime_parts = true; # After 1.8.1
  # Scanning Text is suitable for some av scanner databases (e.g. Sanesecurity)
  scan_text_mime = true; # 1.8.1 +
  scan_image_mime = true; # 1.8.1 +
  # If set force this action if any virus is found (default unset: no action is forced)
#   action = "reject";
  message = '${SCANNER}: virus found: "${VIRUS}"';
  # If set true, log message is emitted for clean messages
  log_clean = false;
  # symbol to add (add it to metric if you want non-zero weight)
  symbol = CLAM_VIRUS;
  # type of scanner: "clamav", "fprot", "sophos" or "savapi"
  type = clamav;
  servers = "clamav:3310";
  patterns {
    JUST_EICAR = '^Eicar-Test-Signature$';
  }
}

=====================================================
== File: third-party/rspamd/src/test/resources/rspamd-config/statistic.conf
=====================================================
classifier "bayes" {
  tokenizer {
    name = "osb";
  }
  cache {
  }
  new_schema = true; # Always use new schema
  store_tokens = false; # Redefine if storing of tokens is desired
  signatures = false; # Store learn signatures
  per_user = true; # Enable per user classifier
  users_enabled = true;
  min_tokens = 11;
  backend = "redis";
  min_learns = 2;

  statfile {
    symbol = "BAYES_HAM";
    spam = false;
  }
  statfile {
    symbol = "BAYES_SPAM";
    spam = true;
  }

  learn_condition = 'return require("lua_bayes_learn").can_learn';

  # Autolearn sample
  # autolearn {
  #  spam_threshold = 6.0; # When to learn spam (score >= threshold)
  #  ham_threshold = -0.5; # When to learn ham (score <= threshold)
  #  check_balance = true; # Check spam and ham balance
  #  min_balance = 0.9; # Keep diff for spam/ham learns for at least this value
  #}

  .include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"
  .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}

=====================================================
== File: third-party/rspamd/src/test/resources/mail/ham/ham1.eml
=====================================================
From Steve_Burt@cursor-system.com  Thu Aug 22 12:46:39 2002
Return-Path: <Steve_Burt@cursor-system.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34
	for <zzzz@localhost>; Thu, 22 Aug 2002 07:46:38 -0400 (EDT)
Received: from phobos [127.0.0.1]
	by localhost with IMAP (fetchmail-5.9.0)
	for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST)
Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com
    [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
    g7MBkTZ05087 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 12:46:29 +0100
X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP;
    22 Aug 2002 11:46:30 -0000
X-Sender: steve.burt@cursor-system.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000
Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000
Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP;
    22 Aug 2002 11:46:29 -0000
Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27)
    by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000
Received: from exchange1.cps.local (unverified) by
    mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with
    ESMTP id <T5cde81f695ac1d100407d@mailgateway.cursor-system.com> for
    <forteana@yahoogroups.com>; Thu, 22 Aug 2002 13:14:10 +0100
Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19)
    id <PXX6AT23>; Thu, 22 Aug 2002 12:46:27 +0100
Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B4F6@exchange1.cps.local>
To: "'zzzzteana@yahoogroups.com'" <zzzzteana@yahoogroups.com>
X-Mailer: Internet Mail Service (5.5.2653.19)
X-Egroups-From: Steve Burt <steve.burt@cursor-system.com>
From: Steve Burt <Steve_Burt@cursor-system.com>
X-Yahoo-Profile: pyruse
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
    forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 12:46:18 +0100
Subject: [zzzzteana] RE: Alexander
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Martin A posted:
Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the
 limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the

=====================================================
== File: third-party/rspamd/src/test/resources/mail/attachment/inlineVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: third-party/rspamd/src/test/resources/mail/attachment/inlineNonVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

Non virus text
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: third-party/rspamd/src/test/resources/mail/spam/spam8.eml
=====================================================
From ormlh@imail.ru  Sun Jul 15 04:56:31 2001
Return-Path: <ormlh@imail.ru>
Delivered-To: yyyy@netnoteinc.com
Received: from cccp.co.kr (unknown [211.218.149.105]) by
    mail.netnoteinc.com (Postfix) with SMTP id 789D51140BA for
    <jm@netnoteinc.com>; Sun, 15 Jul 2001 03:56:28 +0000 (Eire)
Received: from imail.ru [210.14.5.95] by cccp.co.kr running [nMail 1.04
    (Windows NT/2000) SMTP Server]; Wed, 11 Jul 2001 02:41:35 +0900
Message-Id: <00000e0836ec$00006b26$0000082f@imail.ru>
To: <67@163.net>
From: ormlh@imail.ru
Subject: FW:
Date: Fri, 02 Jan 1998 04:30:44 -0400
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
X-Priority: 3
X-Msmail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0)


<HTML>
<BODY bgColor=3D#C0C0C0>

<FONT face=3D"Arial">
<FONT size=3D4>
<FONT color=3D"#800040"> Thank you for your interest!</FONT>
<FONT size=3D3>
<FONT color=3D"#800040">  </FONT>
<FONT color=3D"#000000">                         <BR>
<BR>
Judgment Courses offers an extensive Audio training<BR>
course in </FONT>
<FONT color=3D"#0000A0"> "How to Collect Money Judgments"</FONT>
<FONT color=3D"#000000">  .         </FONT>
<FONT size=3D2>
<FONT color=3D"#000000"> S6</FONT>
<FONT size=3D3>
<FONT color=3D"#000000"> <BR>
<BR>
If you are like many people, you are not even sure what a<BR>
Money Judgment is and </FONT>
<FONT color=3D"#0000A0"> why processing Money Judgments<BR>
can earn you very substantial income</FONT>
<FONT color=3D"#000000">  .<BR>
<BR>
If you ever sue a company or a person and you win then you<BR>
will have a Money Judgment against them.<BR>
<BR>
You are happy you won but you will soon find out the<BR>
shocking fact: "Its now up to you to collect on the<BR>

=====================================================
== File: third-party/rspamd/README.md
=====================================================
# James' extensions for Rspamd

This module is for developing and delivering extensions to James for the [Rspamd](https://rspamd.com/) (the spam filtering system)
and [ClamAV](https://www.clamav.net/) (the antivirus engine).

## How to run

- The Rspamd extension requires an extra configuration file `rspamd.properties` to configure Rspamd connection
Configuration parameters:
    - `rSpamdUrl` : URL defining the Rspamd's server. Eg: http://rspamd:11334
    - `rSpamdPassword` : Password for pass authentication when request to Rspamd's server. Eg: admin
    - `rspamdTimeout` : Timeout for HTTP requests called to Rspamd. Default to 15 seconds.
    - `perUserBayes` : Use per-user Bayes for mail scanning/feedback. Default to false.
  
- Declare the `extensions.properties` for this module.

```
guice.extension.module=org.apache.james.rspamd.module.RspamdModule
guice.extension.task=org.apache.james.rspamd.module.RspamdTaskExtensionModule
```

- Declare the Rspamd mailbox listeners in `listeners.xml`. Eg:

```
<listener>
    <class>org.apache.james.rspamd.RspamdListener</class>
</listener>
```

  This listener can report mails to per-user Bayes by configure `perUserBayes` in `rspamd.properties`.

- Declare the Rspamd mailet for custom mail processing. 

  You can specify the `virusProcessor` if you want to enable virus scanning for mail. Upon configurable `virusProcessor`
you can specify how James process mail virus. We provide a sample Rspamd mailet and `virusProcessor` configuration:

  You can specify the `rejectSpamProcessor`. Emails marked as `rejected` by Rspamd will be redirected to this
processor. This corresponds to emails with the highest spam score, thus delivering them to users as marked as spam 
might not even be desirable.

  The `rewriteSubject` option allows to rewritte subjects when asked by Rspamd.  

  This mailet can scan mails against per-user Bayes by configure `perUserBayes` in `rspamd.properties`. This is achieved 
through the use of Rspamd `Deliver-To` HTTP header. If true, Rspamd will be called for each recipient of the mail, which comes at a performance cost. If true, subjects are not rewritten.
If true `virusProcessor` and `rejectSpamProcessor` are honnered per user, at the cost of email copies. Default to false.

```xml
<processor state="local-delivery" enableJmx="true">
    <mailet match="All" class="org.apache.james.rspamd.RspamdScanner">
        <rewriteSubject>true</rewriteSubject>

=====================================================
== File: third-party/rspamd/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rspamd.module.RspamdModule
guice.extension.task=org.apache.james.rspamd.module.RspamdTaskExtensionModule

=====================================================
== File: third-party/rspamd/sample-configuration/antivirus.conf
=====================================================
clamav {
  # Scan mime_parts seperately - otherwise the complete mail will be transfered to AV Scanner
  #attachments_only = true; # Before 1.8.1
  scan_mime_parts = true; # After 1.8.1
  # Scanning Text is suitable for some av scanner databases (e.g. Sanesecurity)
  scan_text_mime = true; # 1.8.1 +
  scan_image_mime = true; # 1.8.1 +
  # If set force this action if any virus is found (default unset: no action is forced)
  # action = "reject";
  message = '${SCANNER}: virus found: "${VIRUS}"';
  # If set true, log message is emitted for clean messages
  log_clean = false;
  # symbol to add (add it to metric if you want non-zero weight)
  symbol = CLAM_VIRUS;
  # type of scanner: "clamav", "fprot", "sophos" or "savapi"
  type = clamav;
  servers = "clamav:3310";
  patterns {
    JUST_EICAR = '^Eicar-Test-Signature$';
  }
}

=====================================================
== File: third-party/rspamd/sample-configuration/statistic.conf
=====================================================
classifier "bayes" {
  tokenizer {
    name = "osb";
  }
  cache {
  }
  new_schema = true; # Always use new schema
  store_tokens = false; # Redefine if storing of tokens is desired
  signatures = false; # Store learn signatures
  per_user = true; # Enable per user classifier
  users_enabled = true;
  min_tokens = 11;
  backend = "redis";
  min_learns = 50; // Should not be bias by too small learning set

  statfile {
    symbol = "BAYES_HAM";
    spam = false;
  }
  statfile {
    symbol = "BAYES_SPAM";
    spam = true;
  }

  learn_condition = 'return require("lua_bayes_learn").can_learn';

  # Autolearn sample
  # autolearn {
  #  spam_threshold = 6.0; # When to learn spam (score >= threshold)
  #  ham_threshold = -0.5; # When to learn ham (score <= threshold)
  #  check_balance = true; # Check spam and ham balance
  #  min_balance = 0.9; # Keep diff for spam/ham learns for at least this value
  #}

  .include(try=true; priority=1) "$LOCAL_CONFDIR/local.d/classifier-bayes.conf"
  .include(try=true; priority=10) "$LOCAL_CONFDIR/override.d/classifier-bayes.conf"
}

=====================================================
== File: third-party/rspamd/sample-configuration/rspamd.properties
=====================================================
rspamdUrl=http://rspamd:11334
rspamdPassword=admin
# Whether to scan/learn mails using per-user Bayes. Default to false.
perUserBayes=false

=====================================================
== File: third-party/rspamd/docker-compose-distributed.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      tika:
        condition: service_started
      rabbitmq:
        condition: service_started
      s3:
        condition: service_started
      rspamd:
        condition: service_healthy
    image: apache/james:distributed-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/apache-james-rspamd-jar-with-dependencies.jar:/root/extensions-jars/james-server-rspamd.jar
      - $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
      - $PWD/sample-configuration/mailetcontainer_distributed.xml:/root/conf/mailetcontainer.xml
      - $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
      - $PWD/sample-configuration/rspamd.properties:/root/conf/rspamd.properties
      - $PWD/sample-configuration/webadmin.properties:/root/conf/webadmin.properties
      - $PWD/sample-configuration/healthcheck.properties:/root/conf/healthcheck.properties
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
    networks:
      - james

  opensearch:
    image: opensearchproject/opensearch:2.1.0
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
    networks:

=====================================================
== File: third-party/elasticsearch/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      - elasticsearch
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./target/apache-james-elasticsearch-jar-with-dependencies.jar:/root/extensions-jars/apache-james-elasticsearch.jar
      - ./conf/extensions.properties:/root/conf/extensions.properties
      - ./conf/elasticsearch.properties:/root/conf/elasticsearch.properties

  elasticsearch:
    image: elasticsearch:6.4.0
    environment:
      - discovery.type=single-node

=====================================================
== File: third-party/elasticsearch/conf/extensions.properties
=====================================================
guice.extension.module=org.apache.james.metrics.es.v7.ESMetricReporterModule
guice.extension.startable=org.apache.james.metrics.es.v7.ESMetricReporter

=====================================================
== File: third-party/elasticsearch/conf/elasticsearch.properties
=====================================================
# Reports for metrics into ElasticSearch
# Defaults to elasticsearch.masterHost : on which server to publish metrics
# WARNING: Supported ElasticSearch versions for metrics differs from the James one. Only ElasticSearch version 2 to 6 are supported. This requires a distinct ElasticSearch isntalation for metrics.
# This component is furthermore unmaintained an use is discouraged.#elasticsearch.http.host=elasticsearch
elasticsearch.masterHost=elasticsearch
elasticsearch.http.port=9200
elasticsearch.metrics.reports.enabled=true
elasticsearch.metrics.reports.period=30
elasticsearch.metrics.reports.index=james-metrics

=====================================================
== File: third-party/elasticsearch/README.md
=====================================================
# ElasticSearch metric extension for Apache James

Exports Apache James metrics directly to ElasticSearch that can later be queried 
using [Grafana](https://grafana.com/).

**WARNING**: A separate ElasticSearch server is required, as an ElasticSearch 6.3 is needed, which is not compatible with
 ElasticSearch 7.10 release line, and not compatible with **OpenSearch** currently used by Apache James.
 

To run this metric exporter register it in `extensions.properties`:

```
guice.extension.module=org.apache.james.metrics.es.v7.ESMetricReporterModule
guice.extension.startable=org.apache.james.metrics.es.v7.ESMetricReporter
```


For configuring the metric reporting on ElasticSearch edit `elasticsearch.properties` content:

| Property name | explanation |
|---|---|
| elasticsearch.http.host | Optional. Host to report metrics on. Defaults to master host. Must be specified if metric export to ElasticSearch is enabled. |
| elasticsearch.http.port | Optional. Http port to use for publishing metrics. Must be specified if metric export to ElasticSearch is enabled.|
| elasticsearch.metrics.reports.enabled | Optional. Boolean value. Enables metrics reporting. Defaults to false. |
| elasticsearch.metrics.reports.period | Optional. Seconds between metric reports. Defaults to 60 seconds. |
| elasticsearch.metrics.reports.index | Optional. Index to publish metrics on. Defaults to james-metrics.|

We provide a docker-compose of this set up. 

In order to run it...

 - 1. Compile this project: `mvn clean install -DskipTests --pl org.apache.james:apache-james-elasticsearch --am`
 
 - 2. Then start James:

```
docker-compose up
```

=====================================================
== File: third-party/clamav/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      tika:
        condition: service_started
      rabbitmq:
        condition: service_started
      s3:
        condition: service_started
      clamav:
        condition: service_started
    image: apache/james:distributed-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/apache-james-clamav-jar-with-dependencies.jar:/root/extensions-jars/james-server-clamav.jar
      - $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
    networks:
      - james

  opensearch:
    image: opensearchproject/opensearch:2.1.0
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
    networks:
      james:
        aliases:
          - elasticsearch

  cassandra:

=====================================================
== File: third-party/clamav/src/test/resources/attachment/inlineVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: third-party/clamav/src/test/resources/attachment/inlineNonVirusTextAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

Non virus text
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: third-party/clamav/README.md
=====================================================
# James' extensions for ClamAV

This module is for developing and delivering extensions to James for the [ClamAV](https://www.clamav.net/) (the antivirus engine) integration.

Currently, this module provides `ClamAVScan` mailet that talks directly with ClamAV via unix socket to scan virus for every
incoming mail. Upon having virus, mail will be redirected to `virus` processor with configurable behavior for further processing.

E.g:
```xml
    <processor state="local-delivery" enableJmx="true">
        <mailet match="All" class="org.apache.james.clamav.ClamAVScan">
            <host>clamav</host>
            <port>3310</port>
            <onMailetException>ignore</onMailetException>
        </mailet>
        <!-- If infected go to virus processor -->
        <mailet match="HasMailAttributeWithValue=org.apache.james.infected, true" class="ToProcessor">
            <processor>virus</processor>
        </mailet>
    </processor>
    
    <processor state="virus" enableJmx="false">
        <mailet match="All" class="ToRepository">
            <repositoryPath>cassandra://var/mail/virus/</repositoryPath>
        </mailet>
    </processor>
```

To run James with this ClamAV integration, please use James's jar extension mechanism.
We also provide a sample [docker-compose.yml](docker-compose.yml) on how to setup the James <-> ClamAV integration.

=====================================================
== File: third-party/crowdsec/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./sample-configuration/logback.xml:/root/conf/logback.xml
      - ./target/apache-james-crowdsec-jar-with-dependencies.jar:/root/extensions-jars/james-server-crowdsec.jar
      - ./sample-configuration/extensions.properties:/root/conf/extensions.properties
      - ./sample-configuration/smtpserver.xml:/root/conf/smtpserver.xml
      - ./sample-configuration/crowdsec.properties:/root/conf/crowdsec.properties
      - ./sample-configuration/imapserver.xml:/root/conf/imapserver.xml
      - ./sample-configuration/pop3server.xml:/root/conf/pop3server.xml
    networks:
      - james
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
  crowdsec:
    image: crowdsecurity/crowdsec:v1.5.4
    container_name: crowdsec
    restart: always
    volumes:
      - ./sample-configuration/acquis.yaml:/etc/crowdsec/acquis.yaml
      - ./sample-configuration/parsers/syslog-logs.yaml:/etc/crowdsec/parsers/s00-raw/syslog-logs.yaml
      - ./sample-configuration/parsers/james-auth.yaml:/etc/crowdsec/parsers/s01-parse/james-auth.yaml
      - ./sample-configuration/scenarios:/etc/crowdsec/scenarios
      - ./sample-configuration/collections:/etc/crowdsec/collections
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - "8080:8080"
      - "6060:6060"
    networks:
      - james
networks:
  james:

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/collections/james.yaml
=====================================================
parsers:
  - crowdsecurity/syslog-logs
  - linagora/james-auth
  - linagora/james-dictionary-attack
scenarios:
  - apache-james/bf-auth
author: linagora

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/james-dictionary-attack.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-dictionary-attack
description: "Parser for James dictionary attack"

pattern_syntax:
  DICTIONARY_ATTACK: 'Rejected message. Unknown user: %{EMAILADDRESS:rcpt}'
nodes:
  - grok:
      name: "DICTIONARY_ATTACK"
      apply_on: message
      statics:
        - meta: log_type
          value: dictionary-attack
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: user
          expression: evt.Parsed.mdc_user
        - meta: rcpt
          expression: evt.Parsed.rcpt

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/syslog-logs.yaml
=====================================================
#If it's syslog, we are going to extract progname from it
filter: "evt.Line.Labels.type == 'syslog'"
onsuccess: next_stage
pattern_syntax:
  RAW_SYSLOG_PREFIX: '^<%{NUMBER:stuff1}>%{NUMBER:stuff2} %{SYSLOGBASE2} %{DATA:program} %{NUMBER:pid}'
  RAW_SYSLOG_META: '\[meta sequenceId="%{NOTDQUOTE:seq_id}"\]'
name: crowdsecurity/syslog-logs
nodes:
  - grok:
      #this is a named regular expression. grok patterns can be kept into separate files for readability
      pattern: "^%{SYSLOGLINE}" 
      #This is the field of the `Event` to which the regexp should be applied
      apply_on: Line.Raw
  - grok:
      #a second pattern for unparsed syslog lines, as saw in opnsense
      pattern: '%{RAW_SYSLOG_PREFIX} - %{RAW_SYSLOG_META} %{GREEDYDATA:message}'
      apply_on: Line.Raw
#if the node was successfull, statics will be applied.
statics:
  - meta: machine
    expression: evt.Parsed.logsource
  - parsed: "logsource"
    value: "syslog"
# syslog date can be in two different fields (one of hte assignment will fail)
  - target: evt.StrTime
    expression: evt.Parsed.timestamp
  - target: evt.StrTime
    expression: evt.Parsed.timestamp8601
  - meta: datasource_path
    expression: evt.Line.Src
  - meta: datasource_type
    expression: evt.Line.Module
---
#if it's not syslog, the type is the progname
filter: "evt.Line.Labels.type != 'syslog'"
onsuccess: next_stage
name: crowdsecurity/non-syslog
debug: true
statics:
  - parsed: json_parsed
    expression: UnmarshalJSON(evt.Line.Raw, evt.Unmarshaled, "message")
  - parsed: program
    expression: evt.Line.Labels.type
  - parsed: timestamp
    expression: evt.Unmarshaled.message.timestamp
  - parsed: level
    expression: evt.Unmarshaled.message.level
  - parsed: thread
    expression: evt.Unmarshaled.message.thread
  - parsed: mdc_protocol

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/parsers/james-auth.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-auth
description: "Parser for James IMAP and SMTP authentication "

pattern_syntax:
  IMAP_AUTH_FAIL_BAD_CREDENTIALS: 'IMAP Authentication failed%{DATA:data}because of bad credentials.'
  IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS: 'IMAP Authentication with delegation failed%{DATA:data}because of bad credentials.'
  IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION: 'IMAP Authentication with delegation failed%{DATA:data}because of non existing delegation.'
  SMTP_AUTH_FAIL: 'SMTP Authentication%{DATA:data}failed.'
  POP3_AUTH_FAIL: 'Bad credential supplied for %{DATA:user} with remote address %{IP:source_ip}'
nodes:
  - grok:
      name: "IMAP_AUTH_FAIL_BAD_CREDENTIALS"
      apply_on: message
      statics:
        - meta: log_type
          value: imap-auth-fail
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: host
          expression: evt.Parsed.mdc_host
        - meta: user
          expression: evt.Parsed.user
  - grok:
      name: "IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS"
      apply_on: message
      statics:
        - meta: log_type
          value: imap-auth-fail
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: host
          expression: evt.Parsed.mdc_host
        - meta: user
          expression: evt.Parsed.user
  - grok:
      name: "IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION"
      apply_on: message
      statics:
        - meta: log_type

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/acquis.yaml
=====================================================
source: file
filenames:
 - /var/log/james.log
labels:
 type: james

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-bf-auth.yaml
=====================================================
type: leaky
name: apache-james/bf-auth
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'imap-auth-fail' || evt.Meta.log_type == 'smtp-auth-fail' || evt.Meta.log_type == 'pop3-auth-fail'"
leakspeed: "5m"
capacity: 2 # 3rd failed authentication would trigger the ban decision
groupby: evt.Meta.source_ip
blackhole: 0m # to enable rapidly trigger new ban decision across tests. cf https://docs.crowdsec.net/docs/scenarios/format/#blackhole
reprocess: true
labels:
 service: ssh
 type: bruteforce
 remediation: true

=====================================================
== File: third-party/crowdsec/src/test/resources/crowdsec/scenarios/james-dictionary-attack.yaml
=====================================================
type: leaky
name: linagora/james-dictionary-attack
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'dictionary-attack'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
  service: ssh
  type: bruteforce
  remediation: true

=====================================================
== File: third-party/crowdsec/src/test/resources/haproxy.cfg
=====================================================
global
  log stdout format raw local0 info

defaults
  mode tcp
  timeout client 1800s
  timeout connect 5s
  timeout server 1800s
  log global
  option tcplog
frontend imap1-frontend
  bind :143
  default_backend james-servers-imaps
frontend imaps-frontend
  bind :993
  default_backend james-servers-imaps

backend james-servers-imap
  server james1 172.17.0.1:39847 send-proxy
backend james-servers-imaps
  server james1 172.17.0.1:39347 send-proxy

=====================================================
== File: third-party/crowdsec/src/test/resources/log/james.log
=====================================================

=====================================================
== File: third-party/crowdsec/src/test/java/org/apache/james/crowdsec/CrowdsecSMTPConnectHandlerTest.java
=====================================================
package org.apache.james.crowdsec;

import java.io.IOException;
import java.net.URL;

import org.apache.james.crowdsec.client.CrowdsecClientConfiguration;
import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.protocols.smtp.utils.BaseFakeSMTPSession;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import static org.apache.james.crowdsec.CrowdsecExtension.CROWDSEC_PORT;
import static org.assertj.core.api.Assertions.assertThat;

class CrowdsecSMTPConnectHandlerTest {
    @RegisterExtension
    static CrowdsecExtension crowdsecExtension = new CrowdsecExtension();

    private CrowdsecSMTPConnectHandler connectHandler;

    @BeforeEach
    void setUpEach() throws IOException {
        int port = crowdsecExtension.getCrowdsecContainer().getMappedPort(CROWDSEC_PORT);
        var crowdsecClientConfiguration = new CrowdsecClientConfiguration(new URL("http://localhost:" + port + "/v1"), CrowdsecClientConfiguration.DEFAULT_API_KEY);
        connectHandler = new CrowdsecSMTPConnectHandler(new CrowdsecService(crowdsecClientConfiguration));
    }

    @Test
    void givenIPBannedByCrowdsecDecision() throws IOException, InterruptedException {
        crowdsecExtension.banIP("--ip", "127.0.0.1");
        SMTPSession session = new BaseFakeSMTPSession() {};

        assertThat(connectHandler.onConnect(session)).isEqualTo(Response.DISCONNECT);
    }

    @Test
    void givenIPNotBannedByCrowdsecDecision() throws IOException, InterruptedException {
        crowdsecExtension.banIP("--range", "192.182.39.2/24");

        SMTPSession session = new BaseFakeSMTPSession() {};

        assertThat(connectHandler.onConnect(session)).isEqualTo(CrowdsecSMTPConnectHandler.NOOP);
    }
}

=====================================================
== File: third-party/crowdsec/README.md
=====================================================
# James' extensions for Crowdsec

This module is for developing and delivering extensions to James for the [Crowdsec](https://www.crowdsec.net/) (IP filtering system)

## How to run

- The Crowdsec extension requires an extra configuration file `crowdsec.properties` to configure Crowdsec connection
  Configuration parameters:
    - `crowdsecUrl` : String. Required. URL defining the Crowdsec's bouncer. Eg: http://crowdsec:8080/v1
    - `apiKey` : String. Required. Api key for pass authentication when request to Crowdsec.
    - `timeout` : Duration. Optional. Default to `500ms`. Timeout questioning to CrowdSec. 
      E.g. `500ms`, `1 second`,...

- Declare the `extensions.properties` for this module.

```
guice.extension.module=org.apache.james.crowdsec.module.CrowdsecModule
```

### CrowdSec support for SMTP
- Declare the Crowdsec EhloHook in `smtpserver.xml`. Eg:

```
<handlerchain>
    <handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
    <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
    <handler class="org.apache.james.crowdsec.CrowdsecEhloHook"/>
</handlerchain>
```
or 
```
<handlerchain>
    <handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
    <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
    <handler class="org.apache.james.crowdsec.CrowdsecSMTPConnectHandler"/>
</handlerchain>
```

The EHLO hook will block banned clients with `554 Email rejected` whereas the connect handler will terminate the connection even before the SMTP greeting. 

### CrowdSec support for IMAP
- Declare the `CrowdsecImapConnectionCheck` in `imapserver.xml`. Eg:

```
<imapserver enabled="true">
        ...
        <additionalConnectionChecks>org.apache.james.crowdsec.CrowdsecImapConnectionCheck</additionalConnectionChecks>
</imapserver>
```


=====================================================
== File: third-party/crowdsec/sample-configuration/collections/james.yaml
=====================================================
parsers:
  - crowdsecurity/syslog-logs
  - linagora/james-auth
  - linagora/james-dictionary-attack
scenarios:
  - apache-james/bf-auth
author: linagora

=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/james-dictionary-attack.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-dictionary-attack
description: "Parser for James dictionary attack"

pattern_syntax:
  DICTIONARY_ATTACK: 'Rejected message. Unknown user: %{EMAILADDRESS:rcpt}'
nodes:
  - grok:
      name: "DICTIONARY_ATTACK"
      apply_on: message
      statics:
        - meta: log_type
          value: dictionary-attack
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: user
          expression: evt.Parsed.mdc_user
        - meta: rcpt
          expression: evt.Parsed.rcpt

=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/syslog-logs.yaml
=====================================================
#If it's syslog, we are going to extract progname from it
filter: "evt.Line.Labels.type == 'syslog'"
onsuccess: next_stage
pattern_syntax:
  RAW_SYSLOG_PREFIX: '^<%{NUMBER:stuff1}>%{NUMBER:stuff2} %{SYSLOGBASE2} %{DATA:program} %{NUMBER:pid}'
  RAW_SYSLOG_META: '\[meta sequenceId="%{NOTDQUOTE:seq_id}"\]'
name: crowdsecurity/syslog-logs
nodes:
  - grok:
      #this is a named regular expression. grok patterns can be kept into separate files for readability
      pattern: "^%{SYSLOGLINE}" 
      #This is the field of the `Event` to which the regexp should be applied
      apply_on: Line.Raw
  - grok:
      #a second pattern for unparsed syslog lines, as saw in opnsense
      pattern: '%{RAW_SYSLOG_PREFIX} - %{RAW_SYSLOG_META} %{GREEDYDATA:message}'
      apply_on: Line.Raw
#if the node was successfull, statics will be applied.
statics:
  - meta: machine
    expression: evt.Parsed.logsource
  - parsed: "logsource"
    value: "syslog"
# syslog date can be in two different fields (one of hte assignment will fail)
  - target: evt.StrTime
    expression: evt.Parsed.timestamp
  - target: evt.StrTime
    expression: evt.Parsed.timestamp8601
  - meta: datasource_path
    expression: evt.Line.Src
  - meta: datasource_type
    expression: evt.Line.Module
---
#if it's not syslog, the type is the progname
filter: "evt.Line.Labels.type != 'syslog'"
onsuccess: next_stage
name: crowdsecurity/non-syslog
debug: true
statics:
  - parsed: json_parsed
    expression: UnmarshalJSON(evt.Line.Raw, evt.Unmarshaled, "message")
  - parsed: program
    expression: evt.Line.Labels.type
  - parsed: timestamp
    expression: evt.Unmarshaled.message.timestamp
  - parsed: level
    expression: evt.Unmarshaled.message.level
  - parsed: thread
    expression: evt.Unmarshaled.message.thread
  - parsed: mdc_protocol

=====================================================
== File: third-party/crowdsec/sample-configuration/parsers/james-auth.yaml
=====================================================
onsuccess: next_stage
debug: true
filter: "evt.Parsed.program == 'james'"
name: linagora/james-auth
description: "Parser for James IMAP and SMTP authentication "

pattern_syntax:
  IMAP_AUTH_FAIL_BAD_CREDENTIALS: 'IMAP Authentication failed%{DATA:data}because of bad credentials.'
  IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS: 'IMAP Authentication with delegation failed%{DATA:data}because of bad credentials.'
  IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION: 'IMAP Authentication with delegation failed%{DATA:data}because of non existing delegation.'
  SMTP_AUTH_FAIL: 'SMTP Authentication%{DATA:data}failed.'
  POP3_AUTH_FAIL: 'Bad credential supplied for %{DATA:user} with remote address %{IP:source_ip}'
nodes:
  - grok:
      name: "IMAP_AUTH_FAIL_BAD_CREDENTIALS"
      apply_on: message
      statics:
        - meta: log_type
          value: imap-auth-fail
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: host
          expression: evt.Parsed.mdc_host
        - meta: user
          expression: evt.Parsed.user
  - grok:
      name: "IMAP_AUTH_FAIL_DELEGATION_BAD_CREDENTIALS"
      apply_on: message
      statics:
        - meta: log_type
          value: imap-auth-fail
        - meta: timestamp
          expression: evt.Parsed.timestamp
        - meta: level
          expression: evt.Parsed.level
        - meta: source_ip
          expression: evt.Parsed.mdc_ip
        - meta: host
          expression: evt.Parsed.mdc_host
        - meta: user
          expression: evt.Parsed.user
  - grok:
      name: "IMAP_AUTH_FAIL_NO_EXISTING_DELEGATION"
      apply_on: message
      statics:
        - meta: log_type

=====================================================
== File: third-party/crowdsec/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.crowdsec.module.CrowdsecModule

=====================================================
== File: third-party/crowdsec/sample-configuration/acquis.yaml
=====================================================
source: docker
container_name:
 - james
labels:
  type: james

=====================================================
== File: third-party/crowdsec/sample-configuration/scenarios/james-bf-auth.yaml
=====================================================
type: leaky
name: apache-james/bf-auth
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'imap-auth-fail' || evt.Meta.log_type == 'smtp-auth-fail' || evt.Meta.log_type == 'pop3-auth-fail'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
 service: ssh
 type: bruteforce
 remediation: true

=====================================================
== File: third-party/crowdsec/sample-configuration/scenarios/james-dictionary-attack.yaml
=====================================================
type: leaky
name: linagora/james-dictionary-attack
debug: true
description: "Detect login james bruteforce"
filter: "evt.Meta.log_type == 'dictionary-attack'"
leakspeed: "1m"
capacity: 5
groupby: evt.Meta.source_ip
blackhole: 1m
reprocess: true
labels:
  service: ssh
  type: bruteforce
  remediation: true

=====================================================
== File: third-party/crowdsec/sample-configuration/crowdsec.properties
=====================================================
crowdsecUrl=http://crowdsec:8080/v1
apiKey=default_api_key

=====================================================
== File: third-party/spamassassin/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      - spamassassin
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/apache-james-spamassassin-jar-with-dependencies.jar:/root/extensions-jars/james-server-spamassassin.jar
      - $PWD/sample-configuration/extensions.properties:/root/conf/extensions.properties
      - $PWD/sample-configuration/spamassassin.properties:/root/conf/spamassassin.properties
      - $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
      - $PWD/sample-configuration/listeners.xml:/root/conf/listeners.xml
      - $PWD/sample-configuration/smtpserver.xml:/root/conf/smtpserver.xml
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"

  spamassassin:
    image: instantlinux/spamassassin:4.0.0-6
    ports:
      - "783:783"

=====================================================
== File: third-party/spamassassin/src/test/resources/eml/spam.eml
=====================================================
Return-Path: <user@james.org>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (user@james.org)
To: <user@james.org>
From: user <user@james.org>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@james.org>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (user@james.org)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	<user@james.org>
Répondre à : 	user@james.org
Pour : 	user@james.org




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-forward-container"><br>
      <br>

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham1
=====================================================
From exmh-workers-admin@redhat.com  Thu Aug 22 12:36:23 2002
Return-Path: <exmh-workers-admin@spamassassin.taint.org>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id D03E543C36
	for <zzzz@localhost>; Thu, 22 Aug 2002 07:36:16 -0400 (EDT)
Received: from phobos [127.0.0.1]
	by localhost with IMAP (fetchmail-5.9.0)
	for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:36:16 +0100 (IST)
Received: from listman.spamassassin.taint.org (listman.spamassassin.taint.org [66.187.233.211]) by
    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g7MBYrZ04811 for
    <zzzz-exmh@spamassassin.taint.org>; Thu, 22 Aug 2002 12:34:53 +0100
Received: from listman.spamassassin.taint.org (localhost.localdomain [127.0.0.1]) by
    listman.redhat.com (Postfix) with ESMTP id 8386540858; Thu, 22 Aug 2002
    07:35:02 -0400 (EDT)
Delivered-To: exmh-workers@listman.spamassassin.taint.org
Received: from int-mx1.corp.spamassassin.taint.org (int-mx1.corp.spamassassin.taint.org
    [172.16.52.254]) by listman.redhat.com (Postfix) with ESMTP id 10CF8406D7
    for <exmh-workers@listman.redhat.com>; Thu, 22 Aug 2002 07:34:10 -0400
    (EDT)
Received: (from mail@localhost) by int-mx1.corp.spamassassin.taint.org (8.11.6/8.11.6)
    id g7MBY7g11259 for exmh-workers@listman.redhat.com; Thu, 22 Aug 2002
    07:34:07 -0400
Received: from mx1.spamassassin.taint.org (mx1.spamassassin.taint.org [172.16.48.31]) by
    int-mx1.corp.redhat.com (8.11.6/8.11.6) with SMTP id g7MBY7Y11255 for
    <exmh-workers@redhat.com>; Thu, 22 Aug 2002 07:34:07 -0400
Received: from ratree.psu.ac.th ([202.28.97.6]) by mx1.spamassassin.taint.org
    (8.11.6/8.11.6) with SMTP id g7MBIhl25223 for <exmh-workers@redhat.com>;
    Thu, 22 Aug 2002 07:18:55 -0400
Received: from delta.cs.mu.OZ.AU (delta.coe.psu.ac.th [172.30.0.98]) by
    ratree.psu.ac.th (8.11.6/8.11.6) with ESMTP id g7MBWel29762;
    Thu, 22 Aug 2002 18:32:40 +0700 (ICT)
Received: from munnari.OZ.AU (localhost [127.0.0.1]) by delta.cs.mu.OZ.AU
    (8.11.6/8.11.6) with ESMTP id g7MBQPW13260; Thu, 22 Aug 2002 18:26:25
    +0700 (ICT)
From: Robert Elz <kre@munnari.OZ.AU>
To: Chris Garrigues <cwg-dated-1030377287.06fa6d@DeepEddy.Com>
Cc: exmh-workers@spamassassin.taint.org
Subject: Re: New Sequences Window
In-Reply-To: <1029945287.4797.TMDA@deepeddy.vircio.com>
References: <1029945287.4797.TMDA@deepeddy.vircio.com>
    <1029882468.3116.TMDA@deepeddy.vircio.com> <9627.1029933001@munnari.OZ.AU>
    <1029943066.26919.TMDA@deepeddy.vircio.com>
    <1029944441.398.TMDA@deepeddy.vircio.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Message-Id: <13258.1030015585@munnari.OZ.AU>
X-Loop: exmh-workers@spamassassin.taint.org
Sender: exmh-workers-admin@spamassassin.taint.org
Errors-To: exmh-workers-admin@spamassassin.taint.org

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham3
=====================================================
From timc@2ubh.com  Thu Aug 22 13:52:59 2002
Return-Path: <timc@2ubh.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 0314547C66
	for <zzzz@localhost>; Thu, 22 Aug 2002 08:52:58 -0400 (EDT)
Received: from phobos [127.0.0.1]
	by localhost with IMAP (fetchmail-5.9.0)
	for zzzz@localhost (single-drop); Thu, 22 Aug 2002 13:52:59 +0100 (IST)
Received: from n16.grp.scd.yahoo.com (n16.grp.scd.yahoo.com
    [66.218.66.71]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
    g7MCrdZ07070 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 13:53:39 +0100
X-Egroups-Return: sentto-2242572-52733-1030020820-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.198] by n16.grp.scd.yahoo.com with NNFMP;
    22 Aug 2002 12:53:40 -0000
X-Sender: timc@2ubh.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 12:53:39 -0000
Received: (qmail 76099 invoked from network); 22 Aug 2002 12:53:39 -0000
Received: from unknown (66.218.66.218) by m5.grp.scd.yahoo.com with QMQP;
    22 Aug 2002 12:53:39 -0000
Received: from unknown (HELO rhenium.btinternet.com) (194.73.73.93) by
    mta3.grp.scd.yahoo.com with SMTP; 22 Aug 2002 12:53:39 -0000
Received: from host217-36-23-185.in-addr.btopenworld.com ([217.36.23.185])
    by rhenium.btinternet.com with esmtp (Exim 3.22 #8) id 17hrT0-0004gj-00
    for forteana@yahoogroups.com; Thu, 22 Aug 2002 13:53:38 +0100
X-Mailer: Microsoft Outlook Express Macintosh Edition - 4.5 (0410)
To: zzzzteana <zzzzteana@yahoogroups.com>
X-Priority: 3
Message-Id: <E17hrT0-0004gj-00@rhenium.btinternet.com>
From: "Tim Chapman" <timc@2ubh.com>
X-Yahoo-Profile: tim2ubh
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
    forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 13:52:38 +0100
Subject: [zzzzteana] Moscow bomber
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Man Threatens Explosion In Moscow 

Thursday August 22, 2002 1:40 PM
MOSCOW (AP) - Security officers on Thursday seized an unidentified man who
said he was armed with explosives and threatened to blow up his truck in
front of Russia's Federal Security Services headquarters in Moscow, NTV

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/ham/ham2
=====================================================
From Steve_Burt@cursor-system.com  Thu Aug 22 12:46:39 2002
Return-Path: <Steve_Burt@cursor-system.com>
Delivered-To: zzzz@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id BE12E43C34
	for <zzzz@localhost>; Thu, 22 Aug 2002 07:46:38 -0400 (EDT)
Received: from phobos [127.0.0.1]
	by localhost with IMAP (fetchmail-5.9.0)
	for zzzz@localhost (single-drop); Thu, 22 Aug 2002 12:46:38 +0100 (IST)
Received: from n20.grp.scd.yahoo.com (n20.grp.scd.yahoo.com
    [66.218.66.76]) by dogma.slashnull.org (8.11.6/8.11.6) with SMTP id
    g7MBkTZ05087 for <zzzz@spamassassin.taint.org>; Thu, 22 Aug 2002 12:46:29 +0100
X-Egroups-Return: sentto-2242572-52726-1030016790-zzzz=spamassassin.taint.org@returns.groups.yahoo.com
Received: from [66.218.67.196] by n20.grp.scd.yahoo.com with NNFMP;
    22 Aug 2002 11:46:30 -0000
X-Sender: steve.burt@cursor-system.com
X-Apparently-To: zzzzteana@yahoogroups.com
Received: (EGP: mail-8_1_0_1); 22 Aug 2002 11:46:29 -0000
Received: (qmail 11764 invoked from network); 22 Aug 2002 11:46:29 -0000
Received: from unknown (66.218.66.217) by m3.grp.scd.yahoo.com with QMQP;
    22 Aug 2002 11:46:29 -0000
Received: from unknown (HELO mailgateway.cursor-system.com) (62.189.7.27)
    by mta2.grp.scd.yahoo.com with SMTP; 22 Aug 2002 11:46:29 -0000
Received: from exchange1.cps.local (unverified) by
    mailgateway.cursor-system.com (Content Technologies SMTPRS 4.2.10) with
    ESMTP id <T5cde81f695ac1d100407d@mailgateway.cursor-system.com> for
    <forteana@yahoogroups.com>; Thu, 22 Aug 2002 13:14:10 +0100
Received: by exchange1.cps.local with Internet Mail Service (5.5.2653.19)
    id <PXX6AT23>; Thu, 22 Aug 2002 12:46:27 +0100
Message-Id: <5EC2AD6D2314D14FB64BDA287D25D9EF12B4F6@exchange1.cps.local>
To: "'zzzzteana@yahoogroups.com'" <zzzzteana@yahoogroups.com>
X-Mailer: Internet Mail Service (5.5.2653.19)
X-Egroups-From: Steve Burt <steve.burt@cursor-system.com>
From: Steve Burt <Steve_Burt@cursor-system.com>
X-Yahoo-Profile: pyruse
MIME-Version: 1.0
Mailing-List: list zzzzteana@yahoogroups.com; contact
    forteana-owner@yahoogroups.com
Delivered-To: mailing list zzzzteana@yahoogroups.com
Precedence: bulk
List-Unsubscribe: <mailto:zzzzteana-unsubscribe@yahoogroups.com>
Date: Thu, 22 Aug 2002 12:46:18 +0100
Subject: [zzzzteana] RE: Alexander
Reply-To: zzzzteana@yahoogroups.com
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit

Martin A posted:
Tassos Papadopoulos, the Greek sculptor behind the plan, judged that the
 limestone of Mount Kerdylio, 70 miles east of Salonika and not far from the

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam2
=====================================================
From lmrn@mailexcite.com  Mon Jun 24 17:03:24 2002
Return-Path: merchantsworld2001@juno.com
Delivery-Date: Mon May 13 04:46:13 2002
Received: from mandark.labs.netnoteinc.com ([213.105.180.140]) by
    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g4D3kCe15097 for
    <jm@jmason.org>; Mon, 13 May 2002 04:46:12 +0100
Received: from 203.129.205.5.205.129.203.in-addr.arpa ([203.129.205.5]) by
    mandark.labs.netnoteinc.com (8.11.2/8.11.2) with SMTP id g4D3k2D12605 for
    <jm@netnoteinc.com>; Mon, 13 May 2002 04:46:04 +0100
Received: from html (unverified [207.95.174.49]) by
    203.129.205.5.205.129.203.in-addr.arpa (EMWAC SMTPRS 0.83) with SMTP id
    <B0000178595@203.129.205.5.205.129.203.in-addr.arpa>; Mon, 13 May 2002
    09:04:46 +0530
Message-Id: <B0000178595@203.129.205.5.205.129.203.in-addr.arpa>
From: lmrn@mailexcite.com
To: ranmoore@cybertime.net
Subject: Real Protection, Stun Guns!  Free Shipping! Time:2:01:35 PM
Date: Mon, 28 Jul 1980 14:01:35
MIME-Version: 1.0
X-Keywords: 
Content-Type: text/html; charset="DEFAULT"

<html>
<body>
<center>
<h3>
<font color="blue">
<b>
The Need For Safety Is Real In 2002, You Might Only Get One Chance - Be Ready!
<p>
Free Shipping & Handling Within The (USA) If You Order Before May 25, 2002! 
<p>
3 Day Super Sale, Now Until May 7, 2002!  Save Up To $30.00 On Some Items!

</b>
</font>
</h3>
</center>
<p>
IT'S GETTING TO BE SPRING AGAIN, PROTECT YOURSELF AS YOU WALK,<br>
JOG AND EXERCISE OUTSIDE.  ALSO PROTECT YOUR LOVED ONES AS<br>
THEY RETURN HOME FROM COLLEGE!<br>
<p>
*     LEGAL PROTECTION FOR COLLEGE STUDENTS!<br>
*     GREAT UP'COMING OUTDOOR PROTECTION GIFTS!<br>
*     THERE IS NOTHING WORTH MORE PROTECTING THAN LIFE!<br>
*     OUR STUN DEVICES & PEPPER PRODUCTS ARE LEGAL PROTECTION!
<p>
<b>
<font color="red">

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam3
=====================================================
From amknight@mailexcite.com  Mon Jun 24 17:03:49 2002
Return-Path: merchantsworld2001@juno.com
Delivery-Date: Wed May 15 08:58:23 2002
Received: from mandark.labs.netnoteinc.com ([213.105.180.140]) by
    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g4F7wIe23864 for
    <jm@jmason.org>; Wed, 15 May 2002 08:58:18 +0100
Received: from webcust2.hightowertech.com (webcust2.hightowertech.com
    [216.41.166.100]) by mandark.labs.netnoteinc.com (8.11.2/8.11.2) with
    ESMTP id g4F7wGD24120 for <jm@netnoteinc.com>; Wed, 15 May 2002 08:58:17
    +0100
Received: from html ([206.216.197.214]) by webcust2.hightowertech.com with
    Microsoft SMTPSVC(5.5.1877.197.19); Wed, 15 May 2002 00:55:53 -0700
From: amknight@mailexcite.com
To: cbmark@cbmark.com
Subject: New Improved Fat Burners, Now With TV Fat Absorbers! Time:6:25:49 PM
Date: Wed, 30 Jul 1980 18:25:49
MIME-Version: 1.0
Message-Id: <0845b5355070f52WEBCUST2@webcust2.hightowertech.com>
X-Keywords: 
Content-Type: text/html; charset="DEFAULT"

<html>
<body>
<center>
<b>
<font color="blue">
*****Bonus Fat Absorbers As Seen On TV, Included Free With Purchase Of 2 Or More Bottle, $24.95 Value*****
</font>
<br>
<br>
***TAKE $10.00 OFF 2 & 3 MONTH SUPPLY ORDERS, $5.00 OFF 1 MONTH SUPPLY!
***AND STILL GET YOUR BONUS!  PRICE WILL BE DEDUCTED DURING PROCESSING.
<br>
<br>
***FAT ABSORBERS ARE GREAT FOR THOSE WHO WANT TO LOSE WEIGHT,  BUT CAN'T STAY ON A DIET***
<br>
<br>
***OFFER GOOD UNTIL MAY 27, 2002!  FOREIGN ORDERS INCLUDED!
<br>
<br>

<font color="blue">

LOSE 30 POUNDS  IN 30 DAYS... GUARANTEED!!!
<br>
<br>

All Natural Weight-Loss Program, Speeds Up The Metabolism Safely
Rated #1 In Both Categories of SAFETY & EFFECTIVENESS In<br>
(THE United States Today)

=====================================================
== File: third-party/spamassassin/src/test/resources/spamassassin_db/spam/spam1
=====================================================
From ilug-admin@linux.ie  Tue Aug  6 11:51:02 2002
Return-Path: <ilug-admin@linux.ie>
Delivered-To: yyyy@localhost.netnoteinc.com
Received: from localhost (localhost [127.0.0.1])
	by phobos.labs.netnoteinc.com (Postfix) with ESMTP id 9E1F5441DD
	for <jm@localhost>; Tue,  6 Aug 2002 06:48:09 -0400 (EDT)
Received: from phobos [127.0.0.1]
	by localhost with IMAP (fetchmail-5.9.0)
	for jm@localhost (single-drop); Tue, 06 Aug 2002 11:48:09 +0100 (IST)
Received: from lugh.tuatha.org (root@lugh.tuatha.org [194.125.145.45]) by
    dogma.slashnull.org (8.11.6/8.11.6) with ESMTP id g72LqWv13294 for
    <jm-ilug@jmason.org>; Fri, 2 Aug 2002 22:52:32 +0100
Received: from lugh (root@localhost [127.0.0.1]) by lugh.tuatha.org
    (8.9.3/8.9.3) with ESMTP id WAA31224; Fri, 2 Aug 2002 22:50:17 +0100
Received: from bettyjagessar.com (w142.z064000057.nyc-ny.dsl.cnc.net
    [64.0.57.142]) by lugh.tuatha.org (8.9.3/8.9.3) with ESMTP id WAA31201 for
    <ilug@linux.ie>; Fri, 2 Aug 2002 22:50:11 +0100
X-Authentication-Warning: lugh.tuatha.org: Host w142.z064000057.nyc-ny.dsl.cnc.net
    [64.0.57.142] claimed to be bettyjagessar.com
Received: from 64.0.57.142 [202.63.165.34] by bettyjagessar.com
    (SMTPD32-7.06 EVAL) id A42A7FC01F2; Fri, 02 Aug 2002 02:18:18 -0400
Message-Id: <1028311679.886@0.57.142>
Date: Fri, 02 Aug 2002 23:37:59 0530
To: ilug@linux.ie
From: "Start Now" <startnow2002@hotmail.com>
MIME-Version: 1.0
Content-Type: text/plain; charset="US-ASCII"; format=flowed
Subject: [ILUG] STOP THE MLM INSANITY
Sender: ilug-admin@linux.ie
Errors-To: ilug-admin@linux.ie
X-Mailman-Version: 1.1
Precedence: bulk
List-Id: Irish Linux Users' Group <ilug.linux.ie>
X-Beenthere: ilug@linux.ie

Greetings!

You are receiving this letter because you have expressed an interest in 
receiving information about online business opportunities. If this is 
erroneous then please accept my most sincere apology. This is a one-time 
mailing, so no removal is necessary.

If you've been burned, betrayed, and back-stabbed by multi-level marketing, 
MLM, then please read this letter. It could be the most important one that 
has ever landed in your Inbox.

MULTI-LEVEL MARKETING IS A HUGE MISTAKE FOR MOST PEOPLE

MLM has failed to deliver on its promises for the past 50 years. The pursuit 
of the "MLM Dream" has cost hundreds of thousands of people their friends, 

=====================================================
== File: third-party/spamassassin/sample-configuration/extensions.properties
=====================================================
guice.extension.module=org.apache.james.spamassassin.SpamAssassinModule

=====================================================
== File: third-party/spamassassin/sample-configuration/spamassassin.properties
=====================================================
spamassassin.host=localhost
spamassassin.port=783

=====================================================
== File: third-party/linshare/src/test/resources/docker-compose.yml
=====================================================
# Docker compose file for a full-featured Linshare architecture
version: '3.7'

services:
    database:
        restart: on-failure
        image: linagora/linshare-database:2.2
        environment:
            - PGDATA=/var/lib/postgresql/data/pgdata
            - POSTGRES_USER=linshare
            - POSTGRES_PASSWORD=linshare

    backend:
        restart: on-failure
        image: linagora/linshare-backend:2.2
        links:
            - database:linshare_database
            - mongodb:linshare_mongodb
            - smtp:linshare_smtp
        depends_on:
            - database
            - mongodb
            - smtp
        volumes:
            - ./conf/catalina.properties:/usr/local/tomcat/conf/catalina.properties
            - ./conf/log4j.properties:/etc/linshare/log4j.properties
            - ./ssl/id_rsa:/etc/linshare/id_rsa
            - ./ssl/id_rsa.pub:/etc/linshare/id_rsa.pub
        healthcheck:
            test: ["CMD", "curl", "-s", "-f", "http://localhost:8080/linshare/"]
            interval: 30s
            timeout: 10s
            retries: 3
            start_period: 40s
        environment:
            - SMTP_HOST=linshare_smtp
            - SMTP_PORT=25
            - POSTGRES_HOST=linshare_database
            - POSTGRES_PORT=5432
            - POSTGRES_USER=linshare
            - POSTGRES_PASSWORD=linshare
            - MONGODB_HOST=linshare_mongodb
            - MONGODB_PORT=27017
            - THUMBNAIL_ENABLE=false

    mongodb:
        restart: on-failure
        image: mongo:3.2
        command: mongod --smallfiles


=====================================================
== File: third-party/linshare/src/test/resources/backend/Dockerfile
=====================================================
FROM linagora/linshare-backend:2.3.2

COPY conf/catalina.properties /usr/local/tomcat/conf/catalina.properties
COPY conf/log4j.properties /etc/linshare/log4j.properties
COPY conf/id_rsa /etc/linshare/id_rsa
COPY conf/id_rsa.pub /etc/linshare/id_rsa.pub

=====================================================
== File: third-party/linshare/src/test/resources/backend/conf/log4j.properties
=====================================================
# Default to info level output; this is very handy if you eventually use Hibernate as well.
log4j.rootCategory=INFO, CONSOLE

# In order to use an external configuration file for log4j, use this key for JAVA_OPS
# JAVA_OPTS="${JAVA_OPTS} -Dlog4j.configuration=file:/etc/linshare/log4j.properties"

# Define all the appenders
log4j.appender.LINSHARE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LINSHARE.File=${catalina.home}/logs/linshare
#log4j.appender.LINSHARE.File=${jetty.home}/logs/linshare
log4j.appender.LINSHARE.Append=true
log4j.appender.LINSHARE.Encoding=UTF-8
# Roll-over the log once per day
log4j.appender.LINSHARE.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LINSHARE.layout = org.apache.log4j.PatternLayout
#log4j.appender.LINSHARE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
log4j.appender.LINSHARE.layout.ConversionPattern=[%p]:%t:%d{yyyyMMdd.HHmmss}:%c:%M:%m%n


# CONSOLE is set to be a ConsoleAppender.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
# CONSOLE uses PatternLayout.
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%p]:%t:%d{yyyyMMdd.HHmmss}:%c:%M:%m%n


# Service category names are the name of the defining module class and then the service id.
# we could set the two new logger to warn to avoid a lot of information in production mode. 
log4j.category.org.linagora.linshare.services.AppModule.TimingFilter=info
log4j.category.org.linagora.linshare.view.tapestry.services.AppModule.TimingFilter=info


# Outputs a list of pages, components and mixins at startup.
log4j.category.org.apache.tapestry5.services.TapestryModule.ComponentClassResolver=info

# Outputs startup statistics; time to setup and initialize the registry, and a list of
# available services.
log4j.category.org.apache.tapestry5.TapestryFilter=info

# Disable info message "[INFO]:AbstractContextSource:afterPropertiesSet:Property 'userDn' not set - anonymous context will be used for read-write operations"
log4j.category.org.springframework.ldap.core.support.AbstractContextSource=warn

# Turning on debug mode for a page or component will show all of the code changes that occur when the
# class is loaded.  Turning on debug mode for a page will enable detailed output about
# the contruction of the page, including the runtime code modifications that occur. Verbose
# mode is rarely used, as it outputs voluminous details about the rendering of the page.

# log4j.category.org.linagora.linshare.pages.Index=info

# Turn on some verbose debugging about everything in the application. This is nice initially,

=====================================================
== File: third-party/linshare/src/test/resources/backend/conf/id_rsa.pub
=====================================================
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXyZzpBOVJ3AWpVTMs+viH1anDyo5D4yFTR/M0ioocVnnPA/5MSLmKoCiPy1KQEblJ5AUw3Nij8Gi13YmQ47qsZoho1nNNleD2SNn1jG1mgz4tfR8mblOz1staADetFMrU0OGkIqRSgch96WqM4JW4IGSYvuz1TBGYB1n1gjiPDoc4tPXvZCE6PhnbWIPUXckArLiCzQfu8ZBkFjFYTc2pQaXHSlvq/s3mqHgOQgq6Wj5AkPMAdB6I6AKbRlxlS7uRxVT4ZsKA/KOTSXoxwgbnn8by3rvYqutzkeJGq9IjGqw5i341HQcGjnWZdWK1L60DIUwaEaTZn1L+YKY14o09 duc@duc-HP-ProBook-450-G4

=====================================================
== File: third-party/linshare/src/test/resources/backend/conf/id_rsa.pri
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA18mc6QTlSdwFqVUzLPr4h9Wpw8qOQ+MhU0fzNIqKHFZ5zwP+
TEi5iqAoj8tSkBG5SeQFMNzYo/Botd2JkOO6rGaIaNZzTZXg9kjZ9YxtZoM+LX0f
Jm5Ts9bLWgA3rRTK1NDhpCKkUoHIfelqjOCVuCBkmL7s9UwRmAdZ9YI4jw6HOLT1
72QhOj4Z21iD1F3JAKy4gs0H7vGQZBYxWE3NqUGlx0pb6v7N5qh4DkIKulo+QJDz
AHQeiOgCm0ZcZUu7kcVU+GbCgPyjk0l6McIG55/G8t672Krrc5HiRqvSIxqsOYt+
NR0HBo51mXVitS+tAyFMGhGk2Z9S/mCmNeKNPQIDAQABAoIBAA9Va0n/qA9sjBZx
UHakyt5UJ4EbNqrKTAbv+O9F3PSQjI1SWlKvZEfeg6NcLlzAdaszgc7sEpTrs3Ug
7fKWzCAOFSll+8GKofa+TIavWOLM9rEi0ADaHCaOX9rgYxRwgs1GnpIcSBL41/di
i8jA+MKhwqQ8BPiVVDa6ZwEUJNK9cxPlenwSZOl12/aAPW6DATftdL7xv+fjw9Bz
BexEPHklbphHGwoTxvQfiCmTN96CGn1/W99xABKTH70tprAFgOZ78klQjXYwtxVW
rQiXmvgOTEhbrqBMxpRIzFgP+ryrEgcn02jbaq8Aa4BNbD96PJsMIo0psuTHSsnZ
Tcqe2MECgYEA+nVL50qSGlXSvPNTrnjYJHt6mkifke5clmLgX4HegjQqi2+wBjlR
QM1M+1neqB53ueJrlxS8+fZR00SyaUg7ANub5jkqiK5YsVUJk9CvlhUfDlXEW1Ce
quYvuYWr2LX7K8sh+mXDCwttDms/aaJASSvTExMV/GeWFeJpsBs8QJECgYEA3I/t
S+gAbGByUirMKXoP2sfIl3inApU93SIXgpvFnRF87GcC30bE95VYZJ8X8MdsYmro
UiWbWq/8P7PzxYFukbQw+etUs0SV6eJ2FLR7n9dTWfj2Juw86HxERoA57L9Qt6os
d0tEBWm5+ZVlRdGoavi+ADnRRbD3ugzz2QdR1+0CgYEAhxBmRG6UZ5tMsBTQVdBZ
TyM/tJ/hXYMbbwYXVanlYnXbU6KBXHngdX/BOfL2/dagXh/aQXkvh+Trr3DmfZw0
JXxIkFjXtSnALrFbHtl1Nwxg2Qwrfcr2JddIeVW6nH1W3AEJa80g533b6+CuK7sR
y+PUSf8K5ji+WULmF9A4J+ECgYBEurzROHxZSTyWiiuQiS7DmBnTyY8RaPwcGnGF
C5FqvnZVHExy0xSxqeIfiMvnBd2qVXILlxhwDALovuSpmQmhcasJVeHQ8wBcH2t4
TD1xs6GPmdrqihb4wzBrX62tLniyot60VcneffGr6nfiZ9C5dMWQQHQL6XdojHy4
FmXUiQKBgBk1nTlnmeS2CRbKakc1IqVqGeyZDbEpYG7pc79T1/5Hdw/TOfH36W7H
5OapRlEgny+snw8UmkeWghg3+QgfMDY+d6iXaBcTr0tGlqEinff81EyJfuWNCUQJ
a5XfnKtGwsEEOLyD3qEK2QABKvML1BgzGOJFENDeQ8euHMIy9SF4
-----END RSA PRIVATE KEY-----

=====================================================
== File: event-sourcing/event-sourcing-core/event-sourcing-core.iml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<module version="4">
  <component name="AdditionalModuleElements">
    <content url="file://$MODULE_DIR$" dumb="true">
      <sourceFolder url="file://$MODULE_DIR$/src/main/scala" isTestSource="false" />
    </content>
  </component>
</module>

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/nginx-conf/reverse_elasticsearch.conf
=====================================================
server {
    listen 9200 ssl;
    ssl_certificate /etc/ssl/certs/default.crt;
    ssl_certificate_key /etc/ssl/private/default.key;
    server_name reverse_elasticsearch;
    auth_basic "Restricted Area";
    auth_basic_user_file /etc/nginx/conf.d/passwd;

    location / {
        proxy_pass http://elasticsearch:9200;
    }
}

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/nginx-conf/passwd
=====================================================
# the default credential: elasticsearch:secret
elasticsearch:$apr1$m5FvKpw7$EZ9UEUCilHyKTIqQ57nWG1

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/NginxDockerfile
=====================================================
FROM nginx:1.25

COPY conf/nginx-conf/ /etc/nginx/conf.d/
COPY conf/default.crt /etc/ssl/certs/default.crt
COPY conf/default.key /etc/ssl/private/default.key

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/README.md
=====================================================
## Resources explanation

### nginx-conf

Contains nginx configuration files:
 - reverse_elasticsearch.conf: allow nginx to be the proxy connecting to OpenSearch
 - passwd: Nginx credentials file store, each record follows the format: `username:encrypted-password`

TODO This set up is inherited from ElasticSearch where the security plugin was proprietary and this was our only way to 
test things like SSL, auth. Now that we use OpenSearch we could instead rely on OpenSearch native features.

### default.crt & default.key

public (.crt) and private (.key) of the self signed SSL certification. It will be loaded by nginx

### server.jks

Once you use a http client connect to nginx by `https` protocol, 
the default behavior of the client is rejecting the connection because 
self signed SSL certification provided by nginx is not recognized by the 
client. To deal with this problem, there are two ways to configure the client:

 - Not recommended in production, ignore SSL Validation
 - Configure the client to use local TrustStore file containing the .crt, 
 then it should trust nginx.
 
The `server.jks` is generated by the command
```
keytool -import -v -trustcacerts -file default.crt -keystore server.jks -keypass mypass -storepass mypass
```

With: 
 - password: `mypass`

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/default.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwyDNIXe5OeNI/Bf2LUUSF2koINYB9Z2D9qsxYjXB02NrPmPA
DRjiE9c3XgCsiQdkJv008lltTNyvJ5O/ARtnzOpDn6CGIZ8aH08VzP5ECs5jak+c
gc5dVloEhbGTOUVq10mh02FuTG36CY+LnEWXAOo8yKOcA4jiAtzFA8buZbJGmgPx
hTOYw0VMmvXEUBVdwlT4Uk8/3OE4VGQZecO6mnzP1Fh7D5vf1UaBrrMcUYg/6Igx
UmcSZbb9NDUoTnZvkHjlt8bGUXuTTTeQh5pmwdtoiyF00wjP7DhvPLBc1fIB9lxx
EZ+to1e5K/SMA9I76cX3LIChyfPdBc6yZIbPbwIDAQABAoIBAQC+DHmeyjQPDK8u
UcxE5UwsnxAlgysfZY59Ntn/dKpW0DNI7fDFEOJJPsm/ddqWECvcyavDC5SoUx0J
6B4V3vJnpBe/JqLdpk/UBLwQD+qHt+MeTXH6/9rq2vwilwT0uAbKrv29mtzJ9ied
HkF1MFZV3s7bAHdY/f5bmVkOR7g0NQ6QLuXYiLDSHpu/7dMVBNS9qMNL292cZbpi
KJZUvyrK6jSOh9Dt3fmWVdjRp5nGd/Z0r32A8UdoWiQ3cXe9uwXVxz8+ZGkP4t44
Ob+YcgHUEz6iI2o7nqWpNtPI+hBWH1YK/Szlay3rTZSKvkNG1Sdwm1UhoJqNFucC
7ZWkH8GxAoGBAOSpP9lrB0sXCGwhD3xbAYCZsTgomSQ13X6/daKdN9fxpegK7v5r
baojBoSvIKiKezHzMiL5IiEhESXEvXQigFNORdf9mFs9Z9ec4I/96dQNYM4d1QtM
nz3dABt62po8ROCA4Y26ar+OmcJ2kv0RPuJCDGkrY1Is7SNTtGi+HW55AoGBANp1
MJi3VHS9oEF8dslgLkZMZWPgcwJK2Y3wYIkatmxuVkWYdRFPqWWwlXUU17KH7eqm
iEONLNyI7g/duFFTbz52MkeMpX6xarXddYkS2HMDUqSTgt3T+ULHVhTtlEEBXg6m
5cx/eg8niJ6VH+vFtRcYrActLg751mjNgz8fmBMnAoGBAMwj4fHsIIXEWWuXlGi0
IsI59EKr1BTE1isLKS11aN6sSS7BXB7dr/k97drVMrXldBjjArbAbtze1Z0/aNhe
2OwGrEopiDSkvKl8z+sdh/0duHgroADHdj9Xp3nhE3qxJdi8lyHd9OFxoQpAq/es
xtRenQ/jgXdizo9EcoM0f7gZAoGARw6ZSQNQyEwpxUM7zBKp2pnc3NjT7+nyy7Vl
YRM8RRa6nxaQ9ZmIyxfd9WBbLKoEHDAg4IAaGH29mZGP83wFEjcV8anw5r3ErPUk
1vo3R2nMRtXoWkkpqav29wW0FFTiiDeHRbYtOKKuUI7G/ESpu6J9yjPK6HohYKOA
Tlbzez8CgYAFhpoeHO2X06pEsFeI6rMtc0rS0EHuVuqfjjyEMOyQZ8BsCWzDZBDW
N9rxd0yz80H1Q33dwzrkiVu15e+JMNb5I80Ou0t+LQVYpvhtM89yKoLFk2HqL+eH
wQJ/Fszj8fwdwx+k2DEve8MVHSx/w9CpwM7B2yGxcUFKi/JSM1rQEw==
-----END RSA PRIVATE KEY-----

=====================================================
== File: backends-common/opensearch/src/test/resources/auth-es/default.crt
=====================================================
-----BEGIN CERTIFICATE-----
MIIDBjCCAe4CCQDbp5K1cKRJgjANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
cyBQdHkgTHRkMB4XDTE4MDcwMjEyNDkxMloXDTE5MDcwMjEyNDkxMlowRTELMAkG
A1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGEludGVybmV0
IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
AMMgzSF3uTnjSPwX9i1FEhdpKCDWAfWdg/arMWI1wdNjaz5jwA0Y4hPXN14ArIkH
ZCb9NPJZbUzcryeTvwEbZ8zqQ5+ghiGfGh9PFcz+RArOY2pPnIHOXVZaBIWxkzlF
atdJodNhbkxt+gmPi5xFlwDqPMijnAOI4gLcxQPG7mWyRpoD8YUzmMNFTJr1xFAV
XcJU+FJPP9zhOFRkGXnDupp8z9RYew+b39VGga6zHFGIP+iIMVJnEmW2/TQ1KE52
b5B45bfGxlF7k003kIeaZsHbaIshdNMIz+w4bzywXNXyAfZccRGfraNXuSv0jAPS
O+nF9yyAocnz3QXOsmSGz28CAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAFRDXedF9
hjuEmLjETBwhh5Zgg102GDJp58ZBkLE1IaT4mrbK90mhpzxsaxbuqOdu3PXJV4tc
SEocxj5hk5ivVZiWk/j8YJmB8ZOUKdeOxc1tfratlonJ85AY+6m02+FhjUnWobmg
HVBepFTJt1iaTgOpVf8YpbYW+L6+kWV9C2CtT3WUhxtllKjokbF+YVN7LnDlbynM
80+aGm+rdg+TUusg+T/2FeVlDyBgbqagBcCQCQacWD2+zzL28XB3PwRE6oU/tKuu
rbCsGZE0WH8Pc7p6J/alRr+foQiu7KKJKJ8pO1qdy716DlmPIDN23iZROIu1GKKl
ZIKfyefPUcwHyw==
-----END CERTIFICATE-----

=====================================================
== File: backends-common/rabbitmq/src/test/resources/empty-store
=====================================================

=====================================================
== File: backends-common/redis/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.james</groupId>
        <artifactId>james-backends-common</artifactId>
        <version>3.9.0-SNAPSHOT</version>
    </parent>

    <artifactId>apache-james-backends-redis</artifactId>
    <name>Apache James :: Backends Common :: Redis</name>

    <dependencies>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-core</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-guice-common</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-testing</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.google.inject</groupId>
            <artifactId>guice</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>eu.timepit</groupId>
            <artifactId>refined_${scala.base}</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </dependency>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-scala-extensions_${scala.base}</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>

=====================================================
== File: backends-common/README.adoc
=====================================================
= backends-common

This project intends to share implementation details for commonly used back-ends accross james
projects.

For instance, as we are implementing a cassandra storage backend for James, we need to :

 - Use tools to help to work with Cassandra in james-mailbox project
 - We need to access test helpers in james-mpt project
 - We need the same tools than those introduce in james-mailbox in James server data.

=====================================================
== File: backends-common/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
  basic.request {
    timeout = 5 seconds
  }
}

=====================================================
== File: backends-common/cassandra/src/test/resources/configuration-reader-test/cassandra.properties
=====================================================
mailbox.max.retry.acl=1
mailbox.max.retry.modseq=2
mailbox.max.retry.uid=3
mailbox.max.retry.message.flags.update=4
mailbox.max.retry.message.id.flags.update=5
fetch.advance.row.count=6
chunk.size.expunge=8
mailbox.blob.part.size=9
attachment.v2.migration.read.timeout=10
message.attachmentids.read.timeout=11
cassandra.consistency_level.regular=LOCAL_QUORUM
cassandra.consistency_level.lightweight_transaction=LOCAL_SERIAL

=====================================================
== File: README.adoc
=====================================================
Apache James Project
====================

:latest_james_version: 3.8.0

image:https://img.shields.io/badge/Join%20us-Mailing%20lists-purple.svg[link="https://james.apache.org/mail.html"]
link:https://gitter.im/apache/james-project[image:https://badges.gitter.im/apache/james-project.svg[Join the chat at link:https://gitter.im/apache/james-project]]
image:https://img.shields.io/badge/CI-Jenkins-blue.svg[link="https://ci-builds.apache.org/job/james/job/ApacheJames/"]
image:https://img.shields.io/badge/Documentation-green.svg[link="https://james.apache.org/documentation.html"]
image:https://img.shields.io/badge/Downloads-{latest_james_version}-yellow.svg[link="https://james.apache.org/download.cgi"]
image:https://img.shields.io/badge/Images-docker-blue.svg[link="https://hub.docker.com/r/apache/james"]
image:https://img.shields.io/badge/License-ApacheV2-orange.svg[link="https://www.apache.org/licenses/"]
image:https://img.shields.io/badge/Latests-news-red.svg[link="https://james.apache.org/index.html#posts"]

image::james-logo.png[link="https://james.apache.org"]

*James* stands for *Java Apache Mail Enterprise Server!*

It has a modular architecture based on a rich set of *modern* and *efficient* components which provides at the end
*complete, stable, secure and extendable Mail Servers running on the JVM*.

Create your *own personal solution* for emails treatment by assembling the components you need thanks to the Inversion
of Control mail platform offered and  go further customizing filtering and routing rules using *James Mailet Container*.

Supported protocols are: IMAP, SMTP, link:https://jmap.io[JMAP], POP3 and more...

The link:https://james.staged.apache.org/james-distributed-app/{latest_james_version}/index.html[*Distributed server*] focuses on delivering an easy-to-operate scalable mail server based on modern technologies
(Cassandra, S3, OpenSearch and RabbitMQ).

Read more on https://james.apache.org/[our website].

== How to contribute?

.Read more...
[%collapsible]
====
James is a project that lives from the contributions of its community! Anyone can contribute!

Read https://james.apache.org/index.html#third[how to contribute].

We more than welcome *articles* and *blog posts* about James. Contact us by https://james.apache.org/mail.html[email]
or on https://gitter.im/apache/james-project[Gitter] to share your experiences.

*Documentation* is an easy way to get started, and more than wanted! Check out the https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20documentation%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~documentation] label on JIRA.

And to get started with *code contributions*, search out the
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20newbie%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~newbie],
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20easyfix%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~easyfix],
https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20feature%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~feature] labels on JIRA.


=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1985.txt
=====================================================





Network Working Group                                       J. De Winter
Request for Comments: 1985                     Wildbear Consulting, Inc.
Category: Standards Track                                    August 1996


                         SMTP Service Extension
                   for Remote Message Queue Starting

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This memo defines an extension to the SMTP service whereby an SMTP
   client and server may interact to give the server an opportunity to
   start the processing of its queues for messages to go to a given
   host.  This extension is meant to be used in startup conditions as
   well as for mail nodes that have transient connections to their
   service providers.

1.  Introduction

   The TURN command was a valid attempt to address the problem of having
   to start the processing for the mail queue on a remote machine.
   However, the TURN command presents a large security loophole.  As
   there is no verification of the remote host name, the TURN command
   could be used by a rogue system to download the mail for a site other
   than itself.

   Therefore, this memo introduces the ETRN command.  This command uses
   the mechanism defined in [4] to define extensions to the SMTP service
   whereby a client ("sender-SMTP") may request that the server
   ("receiver-SMTP") start the processing of its mail queues for
   messages that are waiting at the server for the client machine.  If
   any messages are at the server for the client, then the server should
   create a new SMTP session and send the messages at that time.





=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2554.txt
=====================================================






Network Working Group                                           J. Myers
Request for Comments: 2554                       Netscape Communications
Category: Standards Track                                     March 1999


                         SMTP Service Extension
                           for Authentication

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1999).  All Rights Reserved.


1. Introduction

   This document defines an SMTP service extension [ESMTP] whereby an
   SMTP client may indicate an authentication mechanism to the server,
   perform an authentication protocol exchange, and optionally negotiate
   a security layer for subsequent protocol interactions.  This
   extension is a profile of the Simple Authentication and Security
   Layer [SASL].


2. Conventions Used in this Document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

   The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
   in this document are to be interpreted as defined in "Key words for
   use in RFCs to Indicate Requirement Levels" [KEYWORDS].


3. The Authentication service extension



=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1652.txt
=====================================================





Network Working Group                               J. Klensin, WG Chair
Request for Comments: 1652                                           MCI
Obsoletes: 1426                                         N. Freed, Editor
Category: Standards Track                                       Innosoft
                                                                 M. Rose
                                            Dover Beach Consulting, Inc.
                                                            E. Stefferud
                                     Network Management Associates, Inc.
                                                              D. Crocker
                                                  Silicon Graphics, Inc.
                                                               July 1994


             SMTP Service Extension for 8bit-MIMEtransport

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This memo defines an extension to the SMTP service whereby an SMTP
   content body consisting of text containing octets outside of the US-
   ASCII octet range (hex 00-7F) may be relayed using SMTP.

1.  Introduction

   Although SMTP is widely and robustly deployed, various extensions
   have been requested by parts of the Internet community. In
   particular, a significant portion of the Internet community wishes to
   exchange messages in which the content body consists of a MIME
   message [3] containing arbitrary octet-aligned material. This memo
   uses the mechanism described in [5] to define an extension to the
   SMTP service whereby such contents may be exchanged. Note that this
   extension does NOT eliminate the possibility of an SMTP server
   limiting line length; servers are free to implement this extension
   but nevertheless set a line length limit no lower than 1000 octets.
   Given that this restriction still applies, this extension does NOT
   provide a means for transferring unencoded binary via SMTP.



=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1830.txt
=====================================================





Network Working Group                                       G. Vaudreuil
Request for Comments: 1830                        Octel Network Services
Category: Experimental                                       August 1995


                        SMTP Service Extensions
                       for Transmission of Large
                        and Binary MIME Messages

Status of this Memo

   This memo defines an Experimental Protocol for the Internet
   community.  This memo does not specify an Internet standard of any
   kind.  Discussion and suggestions for improvement are requested.
   Distribution of this memo is unlimited.

1. Abstract

   This memo defines two extensions to the SMTP service.  The first
   service enables a SMTP client and server to negotiate the use of an
   alternate DATA command "BDAT" for efficiently sending large MIME
   messages.  The second extension takes advantage of the BDAT command
   to permit the negotiated sending of unencoded binary data.

2. Introduction

   The MIME extensions to the Internet message protocol provides for the
   transmission of many kinds of data which were previously unsupported
   in Internet mail.  Anticipating the need to more efficiently
   transport the new media made possible with MIME, the SMTP protocol
   has been extended to provide transport for new message types.  RFC
   1426 defines one such extension for the transmission of unencoded 8
   bit MIME messages [8BIT].  This service extension permits the
   receiver SMTP to declare support for 8 bit body parts and the sender
   to request 8 bit transmission of a particular message.

   One expected result of the use of MIME is that the Internet mail
   system will be expected to carry very large mail messages.  In such
   transactions, there is a need to eliminate the requirement that the
   message be scanned for "CR LF . CR LF" sequences upon sending and
   receiving to detect the end of message.

   Independent of the need to send large messages, Internet mail is
   increasingly multi-media there is a need to avoid the overhead of
   base64 and quoted-printable encoding of binary objects sent using the

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2142.txt
=====================================================





Network Working Group                                        D. Crocker
Request for Comments: 2142                     Internet Mail Consortium
Cateogry: Standards Track                                      May 1997


                             MAILBOX NAMES FOR
                   COMMON SERVICES, ROLES AND FUNCTIONS

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

ABSTRACT

   This specification enumerates and describes Internet mail addresses
   (mailbox name @ host reference) to be used when contacting personnel
   at an organization.  Mailbox names are provided for both operations
   and business functions.  Additional mailbox names and aliases are not
   prohibited, but organizations which support email exchanges with the
   Internet are encouraged to support AT LEAST each mailbox name for
   which the associated function exists within the organization.

1.  RATIONALE AND SCOPE

   Various Internet documents have specified mailbox names to be used
   when reaching the operators of the new service; for example, [RFC822
   6.3, C.6] requires the presence of a <POSTMASTER@domain> mailbox name
   on all hosts that have an SMTP server.  Other protocols have defacto
   standards for well known mailbox names, such as <USENET@domain> for
   NNTP (see [RFC977]), and <WEBMASTER@domain> for HTTP (see [HTTP]).
   Defacto standards also exist for well known mailbox names which have
   nothing to do with a particular protocol, e.g., <ABUSE@domain> and
   <TROUBLE@domain>.

   The purpose of this memo is to aggregate and specify the basic set of
   mailbox names which organizations need to support.  Most
   organizations do not need to support the full set of mailbox names
   defined here, since not every organization will implement the all of
   the associated services.  However, if a given service is offerred,
   then the associated mailbox name(es) must be supported, resulting in
   delivery to a recipient appropriate for the referenced service or

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2034.txt
=====================================================





Network Working Group                                       N. Freed
Request for Comments: RFC 2034                              Innosoft
Category: Standards Track                               October 1996


                       SMTP Service Extension for
                     Returning Enhanced Error Codes

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Abstract

   This memo defines an extension to the SMTP service [RFC-821, RFC-
   1869] whereby an SMTP server augments its responses with the enhanced
   mail system status codes defined in RFC 1893.  These codes can then
   be used to provide more informative explanations of error conditions,
   especially in the context of the delivery status notifications format
   defined in RFC 1894.

2.  Introduction

   Although SMTP is widely and robustly deployed, various extensions
   have been requested by parts of the Internet community. In
   particular, in the modern, international, and multilingual Internet a
   need exists to assign codes to specific error conditions that can be
   translated into different languages. RFC 1893 defines such a set of
   status codes and RFC 1894 defines a mechanism to send such coded
   material to users. However, in many cases the agent creating the RFC
   1894 delivery status notification is doing so in response to errors
   it received from a remote SMTP server.

   As such, remote servers need a mechanism for embedding enhanced
   status codes in their responses as well as a way to indicate to a
   client when they are in fact doing this. This memo uses the SMTP
   extension mechanism described in RFC 1869 to define such a mechanism.





=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1891.txt
=====================================================





Network Working Group                                           K. Moore
Request for Comments: 1891                       University of Tennessee
Category: Standards Track                                   January 1996


                         SMTP Service Extension
                   for Delivery Status Notifications

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1. Abstract

   This memo defines an extension to the SMTP service, which allows an
   SMTP client to specify (a) that delivery status notifications (DSNs)
   should be generated under certain conditions, (b) whether such
   notifications should return the contents of the message, and (c)
   additional information, to be returned with a DSN, that allows the
   sender to identify both the recipient(s) for which the DSN was
   issued, and the transaction in which the original message was sent.

   Any questions, comments, and reports of defects or ambiguities in
   this specification may be sent to the mailing list for the NOTARY
   working group of the IETF, using the address
   <notifications@cs.utk.edu>.  Requests to subscribe to the mailing
   list should be addressed to <notifications-request@cs.utk.edu>.
   Implementors of this specification are encouraged to subscribe to the
   mailing list, so that they will quickly be informed of any problems
   which might hinder interoperability.

   NOTE: This document is a Proposed Standard.  If and when this
   protocol is submitted for Draft Standard status, any normative text
   (phrases containing SHOULD, SHOULD NOT, MUST, MUST NOT, or MAY) in
   this document will be re-evaluated in light of implementation
   experience, and are thus subject to change.

2. Introduction

   The SMTP protocol [1] requires that an SMTP server provide
   notification of delivery failure, if it determines that a message

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc0974.txt
=====================================================

Network Working Group                                    Craig Partridge
Request for Comments: 974                 CSNET CIC BBN Laboratories Inc
                                                            January 1986

                   MAIL ROUTING AND THE DOMAIN SYSTEM


Status of this Memo

   This RFC presents a description of how mail systems on the Internet
   are expected to route messages based on information from the domain
   system described in RFCs 882, 883 and 973.  Distribution of this memo
   is unlimited.

Introduction

   The purpose of this memo is to explain how mailers are to decide how
   to route a message addressed to a given Internet domain name.  This
   involves a discussion of how mailers interpret MX RRs, which are used
   for message routing.  Note that this memo makes no statement about
   how mailers are to deal with MB and MG RRs, which are used for
   interpreting mailbox names.

   Under RFC-882 and RFC-883 certain assumptions about mail addresses
   have been changed.  Up to now, one could usually assume that if a
   message was addressed to a mailbox, for example, at LOKI.BBN.COM,
   that one could just open an SMTP connection to LOKI.BBN.COM and pass
   the message along.  This system broke down in certain situations,
   such as for certain UUCP and CSNET hosts which were not directly
   attached to the Internet, but these hosts could be handled as special
   cases in configuration files (for example, most mailers were set up
   to automatically forward mail addressed to a CSNET host to
   CSNET-RELAY.ARPA).

   Under domains, one cannot simply open a connection to LOKI.BBN.COM,
   but must instead ask the domain system where messages to LOKI.BBN.COM
   are to be delivered. And the domain system may direct a mailer to
   deliver messages to an entirely different host, such as SH.CS.NET.
   Or, in a more complicated case, the mailer may learn that it has a
   choice of routes to LOKI.BBN.COM.  This memo is essentially a set of
   guidelines on how mailers should behave in this more complex world.

   Readers are expected to be familiar with RFCs 882, 883, and the
   updates to them (e.g., RFC-973).






=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2821.txt
=====================================================





Network Working Group                                 J. Klensin, Editor
Request for Comments: 2821                             AT&T Laboratories
Obsoletes: 821, 974, 1869                                     April 2001
Updates: 1123
Category: Standards Track


                     Simple Mail Transfer Protocol

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

Abstract

   This document is a self-contained specification of the basic protocol
   for the Internet electronic mail transport.  It consolidates, updates
   and clarifies, but doesn't add new or change existing functionality
   of the following:

   -  the original SMTP (Simple Mail Transfer Protocol) specification of
      RFC 821 [30],

   -  domain name system requirements and implications for mail
      transport from RFC 1035 [22] and RFC 974 [27],

   -  the clarifications and applicability statements in RFC 1123 [2],
      and

   -  material drawn from the SMTP Extension mechanisms [19].

   It obsoletes RFC 821, RFC 974, and updates RFC 1123 (replaces the
   mail transport materials of RFC 1123).  However, RFC 821 specifies
   some features that were not in significant use in the Internet by the
   mid-1990s and (in appendices) some additional transport models.
   Those sections are omitted here in the interest of clarity and
   brevity; readers needing them should refer to RFC 821.

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1870.txt
=====================================================





Network Working Group                               J. Klensin, WG Chair
Request For Comments: 1870                                           MCI
STD: 10                                                 N. Freed, Editor
Obsoletes: 1653                             Innosoft International, Inc.
Category: Standards Track                                       K. Moore
                                                 University of Tennessee
                                                           November 1995


                         SMTP Service Extension
                      for Message Size Declaration

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Abstract

   This memo defines an extension to the SMTP service whereby an SMTP
   client and server may interact to give the server an opportunity to
   decline to accept a message (perhaps temporarily) based on the
   client's estimate of the message size.

2.  Introduction

   The MIME extensions to the Internet message protocol provide for the
   transmission of many kinds of data which were previously unsupported
   in Internet mail.  One expected result of the use of MIME is that
   SMTP will be expected to carry a much wider range of message sizes
   than was previously the case.  This has an impact on the amount of
   resources (e.g. disk space) required by a system acting as a server.

   This memo uses the mechanism defined in [5] to define extensions to
   the SMTP service whereby a client ("sender-SMTP") may declare the
   size of a particular message to a server ("receiver-SMTP"), after
   which the server may indicate to the client that it is or is not
   willing to accept the message based on the declared message size and
   whereby a server ("receiver-SMTP") may declare the maximum message
   size it is willing to accept to a client ("sender-SMTP").



=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc2197.txt
=====================================================





Network Working Group                                       N. Freed
Request for Comments: 2197                                  Innosoft
Obsoletes: 1854                                       September 1997
Category: Standards Track


                         SMTP Service Extension
                         for Command Pipelining

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Abstract

   This memo defines an extension to the SMTP service whereby a server
   can indicate the extent of its ability to accept multiple commands in
   a single TCP send operation. Using a single TCP send operation for
   multiple commands can improve SMTP performance significantly.

   The present document is an updated version of RFC 1854 [3].  Only
   textual and editorial changes have been made; the protocol has not
   changed in any way.

2.  Introduction

   Although SMTP is widely and robustly deployed, certain extensions may
   nevertheless prove useful. In particular, many parts of the Internet
   make use of high latency network links.  SMTP's intrinsic one
   command-one response structure is significantly penalized by high
   latency links, often to the point where the factors contributing to
   overall connection time are dominated by the time spent waiting for
   responses to individual commands (turnaround time).

   In the best of all worlds it would be possible to simply deploy SMTP
   client software that makes use of command pipelining: batching up
   multiple commands into single TCP send operations. Unfortunately, the
   original SMTP specification [1] did not explicitly state that SMTP
   servers must support this.  As a result a non-trivial number of
   Internet SMTP servers cannot adequately handle command pipelining.
   Flaws known to exist in deployed servers include:

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc0821.txt
=====================================================
                                                                        

   RFC 821
                                    
                                    
                                    
                                    
                                    
                     SIMPLE MAIL TRANSFER PROTOCOL
                                    
                                    
                                    
                           Jonathan B. Postel





























                              August 1982
                                    
                                    
                                    
                     Information Sciences Institute
                   University of Southern California
                           4676 Admiralty Way
                   Marina del Rey, California  90291

=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1869.txt
=====================================================





Network Working Group                               J. Klensin, WG Chair
Request For Comments: 1869                                           MCI
STD: 10                                                 N. Freed, Editor
Obsoletes: 1651                             Innosoft International, Inc.
Category: Standards Track                                        M. Rose
                                            Dover Beach Consulting, Inc.
                                                            E. Stefferud
                                     Network Management Associates, Inc.
                                                              D. Crocker
                                                  Brandenburg Consulting
                                                           November 1995


                        SMTP Service Extensions

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.  Abstract

   This memo defines a framework for extending the SMTP service by
   defining a means whereby a server SMTP can inform a client SMTP as to
   the service extensions it supports.  Extensions to the SMTP service
   are registered with the IANA. This framework does not require
   modification of existing SMTP clients or servers unless the features
   of the service extensions are to be requested or provided.

2.  Introduction

   The Simple Mail Transfer Protocol (SMTP) [1] has provided a stable,
   effective basis for the relay function of message transfer agents.
   Although a decade old, SMTP has proven remarkably resilient.
   Nevertheless, the need for a number of protocol extensions has become
   evident. Rather than describing these extensions as separate and
   haphazard entities, this document enhances SMTP in a straightforward
   fashion that provides a framework in which all future extensions can
   be built in a single consistent way.

3.  Framework for SMTP Extensions


=====================================================
== File: src/site/resources/server/rfclist/smtp/rfc1893.txt
=====================================================





Network Working Group                                        G. Vaudreuil
Request for Comments: 1893                         Octel Network Services
Category: Standards Track                                    January 1996


                   Enhanced Mail System Status Codes

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.   Overview

   There currently is not a standard mechanism for the reporting of mail
   system errors except for the limited set offered by SMTP and the
   system specific text descriptions sent in mail messages.  There is a
   pressing need for a rich machine readable status code for use in
   delivery status notifications [DSN].  This document proposes a new
   set of status codes for this purpose.

   SMTP [SMTP] error codes have historically been used for reporting
   mail system errors.  Because of limitations in the SMTP code design,
   these are not suitable for use in delivery status notifications.
   SMTP provides about 12 useful codes for delivery reports.  The
   majority of the codes are protocol specific response codes such as
   the 354 response to the SMTP data command.  Each of the 12 useful
   codes are each overloaded to indicate several error conditions each.
   SMTP suffers some scars from history, most notably the unfortunate
   damage to the reply code extension mechanism by uncontrolled use.
   This proposal facilitates future extensibility by requiring the
   client to interpret unknown error codes according to the theory of
   codes while requiring servers to register new response codes.

   The SMTP theory of reply codes partitioned in the number space such a
   manner that the remaining available codes will not provide the space
   needed.  The most critical example is the existence of only 5
   remaining codes for mail system errors.  The mail system
   classification includes both host and mailbox error conditions.  The
   remaining third digit space would be completely consumed as needed to
   indicate MIME and media conversion errors and security system errors.


=====================================================
== File: src/site/resources/server/rfclist/lmtp/rfc2033.txt
=====================================================






Network Working Group                                           J. Myers
Request for Comments: 2033                               Carnegie Mellon
Category: Informational                                     October 1996


                      Local Mail Transfer Protocol

Status of this Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.

1.  Abstract

   SMTP [SMTP] [HOST-REQ] and its service extensions [ESMTP] provide a
   mechanism for transferring mail reliably and efficiently.  The design
   of the SMTP protocol effectively requires the server to manage a mail
   delivery queue.

   In some limited circumstances, outside the area of mail exchange
   between independent hosts on public networks, it is desirable to
   implement a system where a mail receiver does not manage a queue.
   This document describes the LMTP protocol for transporting mail into
   such systems.

   Although LMTP is an alternative protocol to ESMTP, it uses (with a
   few changes) the syntax and semantics of ESMTP.  This design permits
   LMTP to utilize the extensions defined for ESMTP.  LMTP should be
   used only by specific prior arrangement and configuration, and it
   MUST NOT be used on TCP port 25.

Table of Contents

   1.   Abstract ................................................    1
   2.   Conventions Used in this Document .......................    2
   3.   Introduction and Overview ...............................    2
   4.   The LMTP protocol .......................................    3
   4.1. The LHLO, HELO and EHLO commands ........................    4
   4.2. The DATA command ........................................    4
   4.3. The BDAT command ........................................    5
   5.   Implementation requirements .............................    6
   6.   Acknowledgments .........................................    6
   7.   References ..............................................    7

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2087.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 2087                               Carnegie Mellon
Category: Standards Track                                   January 1997


                         IMAP4 QUOTA extension

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.   Abstract

   The QUOTA extension of the Internet Message Access Protocol [IMAP4]
   permits administrative limits on resource usage (quotas) to be
   manipulated through the IMAP protocol.

Table of Contents

   1.   Abstract........................................... 1
   2.   Conventions Used in this Document.................. 1
   3.   Introduction and Overview.......................... 2
   4.   Commands........................................... 2
   4.1. SETQUOTA Command................................... 2
   4.2. GETQUOTA Command................................... 2
   4.3. GETQUOTAROOT Command............................... 3
   5.   Responses.......................................... 3
   5.1. QUOTA Response..................................... 3
   5.2. QUOTAROOT Response................................. 4
   6.   Formal syntax...................................... 4
   7.   References......................................... 5
   8.   Security Considerations............................ 5
   9.   Author's Address................................... 5


2.   Conventions Used in this Document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.



=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2221.txt
=====================================================





Network Working Group                                           M. Gahrns
Request for Comments: 2221                                      Microsoft
Category: Standards Track                                    October 1997


                         IMAP4 Login Referrals

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

1. Abstract

   When dealing with large amounts of users and many IMAP4 [RFC-2060]
   servers, it is often necessary to move users from one IMAP4 server to
   another.  For example, hardware failures or organizational changes
   may dictate such a move.

   Login referrals allow clients to transparently connect to an
   alternate IMAP4 server, if their home IMAP4 server has changed.

   A referral mechanism can provide efficiencies over the alternative
   'proxy method', in which the local IMAP4 server contacts the remote
   server on behalf of the client, and then transfers the data from the
   remote server to itself, and then on to the client.  The referral
   mechanism's direct client connection to the remote server is often a
   more efficient use of bandwidth, and does not require the local
   server to impersonate the client when authenticating to the remote
   server.

2. Conventions used in this document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

   A home server, is an IMAP4 server that contains the user's inbox.


=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2193.txt
=====================================================





Network Working Group                                        M. Gahrns
Request for Comments: 2193                                   Microsoft
Category: Standards Track                               September 1997


                        IMAP4 Mailbox Referrals

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1. Abstract

   When dealing with large amounts of users, messages and geographically
   dispersed IMAP4 [RFC-2060] servers, it is often desirable to
   distribute messages amongst different servers within an organization.
   For example an administrator may choose to store user's personal
   mailboxes on a local IMAP4 server, while storing shared mailboxes
   remotely on another server.  This type of configuration is common
   when it is uneconomical to store all data centrally due to limited
   bandwidth or disk resources.

   Mailbox referrals allow clients to seamlessly access mailboxes that
   are distributed across several IMAP4 servers.

   A referral mechanism can provide efficiencies over the alternative
   "proxy method", in which the local IMAP4 server contacts the remote
   server on behalf of the client, and then transfers the data from the
   remote server to itself, and then on to the client.  The referral
   mechanism's direct client connection to the remote server is often a
   more efficient use of bandwidth, and does not require the local
   server to impersonate the client when authenticating to the remote
   server.

2. Conventions used in this document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

   A home server, is an IMAP4 server that contains the user's inbox.


=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2192.txt
=====================================================





Network Working Group                                          C. Newman
Request for Comments: 2192                                      Innosoft
Category: Standards Track                                 September 1997


                            IMAP URL Scheme


Status of this memo

     This document specifies an Internet standards track protocol for
     the Internet community, and requests discussion and suggestions for
     improvements.  Please refer to the current edition of the "Internet
     Official Protocol Standards" (STD 1) for the standardization state
     and status of this protocol.  Distribution of this memo is
     unlimited.


Abstract

     IMAP [IMAP4] is a rich protocol for accessing remote message
     stores.  It provides an ideal mechanism for accessing public
     mailing list archives as well as private and shared message stores.
     This document defines a URL scheme for referencing objects on an
     IMAP server.


1. Conventions used in this document

     The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
     in this document are to be interpreted as defined in "Key words for
     use in RFCs to Indicate Requirement Levels" [KEYWORDS].


2. IMAP scheme

     The IMAP URL scheme is used to designate IMAP servers, mailboxes,
     messages, MIME bodies [MIME], and search programs on Internet hosts
     accessible using the IMAP protocol.

     The IMAP URL follows the common Internet scheme syntax as defined
     in RFC 1738 [BASIC-URL] except that clear text passwords are not
     permitted.  If :<port> is omitted, the port defaults to 143.



=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2088.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 2088                               Carnegie Mellon
Cateogry: Standards Track                                   January 1997


                    IMAP4 non-synchronizing literals

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.   Abstract

   The Internet Message Access Protocol [IMAP4] contains the "literal"
   syntactic construct for communicating strings.  When sending a
   literal from client to server, IMAP4 requires the client to wait for
   the server to send a command continuation request between sending the
   octet count and the string data.  This document specifies an
   alternate form of literal which does not require this network round
   trip.

2.   Conventions Used in this Document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

3.   Specification

   The non-synchronizing literal is added an alternate form of literal,
   and may appear in communication from client to server instead of the
   IMAP4 form of literal.  The IMAP4 form of literal, used in
   communication from client to server, is referred to as a
   synchronizing literal.

   Non-synchronizing literals may be used with any IMAP4 server
   implementation which returns "LITERAL+" as one of the supported
   capabilities to the CAPABILITY command.  If the server does not
   advertise the LITERAL+ capability, the client must use synchronizing
   literals instead.

   The non-synchronizing literal is distinguished from the original

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2060.txt
=====================================================





Network Working Group                                        M. Crispin
Request for Comments: 2060                     University of Washington
Obsoletes: 1730                                           December 1996
Category: Standards Track


            INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   The Internet Message Access Protocol, Version 4rev1 (IMAP4rev1)
   allows a client to access and manipulate electronic mail messages on
   a server.  IMAP4rev1 permits manipulation of remote message folders,
   called "mailboxes", in a way that is functionally equivalent to local
   mailboxes.  IMAP4rev1 also provides the capability for an offline
   client to resynchronize with the server (see also [IMAP-DISC]).

   IMAP4rev1 includes operations for creating, deleting, and renaming
   mailboxes; checking for new messages; permanently removing messages;
   setting and clearing flags; [RFC-822] and [MIME-IMB] parsing;
   searching; and selective fetching of message attributes, texts, and
   portions thereof.  Messages in IMAP4rev1 are accessed by the use of
   numbers.  These numbers are either message sequence numbers or unique
   identifiers.

   IMAP4rev1 supports a single server.  A mechanism for accessing
   configuration information to support multiple IMAP4rev1 servers is
   discussed in [ACAP].

   IMAP4rev1 does not specify a means of posting mail; this function is
   handled by a mail transfer protocol such as [SMTP].

   IMAP4rev1 is designed to be upwards compatible from the [IMAP2] and
   unpublished IMAP2bis protocols.  In the course of the evolution of
   IMAP4rev1, some aspects in the earlier protocol have become obsolete.
   Obsolete commands, responses, and data formats which an IMAP4rev1
   implementation may encounter when used with an earlier implementation

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2086.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 2086                               Carnegie Mellon
Category: Standards Track                                   January 1997


                          IMAP4 ACL extension

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.   Abstract

   The ACL extension of the Internet Message Access Protocol [IMAP4]
   permits access control lists to be manipulated through the IMAP
   protocol.

Table of Contents

   1.   Abstract............................................... 1
   2.   Conventions Used in this Document...................... 1
   3.   Introduction and Overview.............................. 2
   4.   Commands............................................... 3
   4.1. SETACL................................................. 3
   4.2. DELETEACL.............................................. 4
   4.3. GETACL................................................. 4
   4.4. LISTRIGHTS............................................. 4
   4.5. MYRIGHTS............................................... 5
   5.   Responses.............................................. 5
   5.1. ACL.................................................... 5
   5.2. LISTRIGHTS............................................. 6
   5.3. MYRIGHTS............................................... 6
   6.   Formal Syntax.......................................... 6
   7.   References............................................. 7
   8.   Security Considerations................................ 7
   9.   Author's Address....................................... 8

2.   Conventions Used in this Document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2342.txt
=====================================================





Network Working Group                                         M. Gahrns
Request for Comments: 2342                                    Microsoft
Category: Standards Track                                     C. Newman
                                                               Innosoft
                                                               May 1998


                            IMAP4 Namespace

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1998).  All Rights Reserved.

1. Abstract

   IMAP4 [RFC-2060] does not define a default server namespace. As a
   result, two common namespace models have evolved:

   The "Personal Mailbox" model, in which the default namespace that is
   presented consists of only the user's personal mailboxes. To access
   shared mailboxes, the user must use an escape mechanism to reach
   another namespace.

   The "Complete Hierarchy" model, in which the default namespace that
   is presented includes the user's personal mailboxes along with any
   other mailboxes they have access to.

   These two models, create difficulties for certain client operations.
   This document defines a NAMESPACE command that allows a client to
   discover the prefixes of namespaces used by a server for personal
   mailboxes, other users' mailboxes, and shared mailboxes.  This allows
   a client to avoid much of the manual user configuration that is now
   necessary when mixing and matching IMAP4 clients and servers.

2. Conventions used in this document

   In examples, "C:" and "S:" indicate lines sent by the client and

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2595.txt
=====================================================






Network Working Group                                          C. Newman
Request for Comments: 2595                                      Innosoft
Category: Standards Track                                      June 1999


                   Using TLS with IMAP, POP3 and ACAP


Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1999).  All Rights Reserved.

1. Motivation

   The TLS protocol (formerly known as SSL) provides a way to secure an
   application protocol from tampering and eavesdropping.  The option of
   using such security is desirable for IMAP, POP and ACAP due to common
   connection eavesdropping and hijacking attacks [AUTH].  Although
   advanced SASL authentication mechanisms can provide a lightweight
   version of this service, TLS is complimentary to simple
   authentication-only SASL mechanisms or deployed clear-text password
   login commands.

   Many sites have a high investment in authentication infrastructure
   (e.g., a large database of a one-way-function applied to user
   passwords), so a privacy layer which is not tightly bound to user
   authentication can protect against network eavesdropping attacks
   without requiring a new authentication infrastructure and/or forcing
   all users to change their password.  Recognizing that such sites will
   desire simple password authentication in combination with TLS
   encryption, this specification defines the PLAIN SASL mechanism for
   use with protocols which lack a simple password authentication
   command such as ACAP and SMTP.  (Note there is a separate RFC for the
   STARTTLS command in SMTP [SMTPTLS].)

   There is a strong desire in the IETF to eliminate the transmission of

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2195.txt
=====================================================





Network Working Group                                       J. Klensin
Request for Comments: 2195                                    R. Catoe
Category: Standards Track                                 P. Krumviede
Obsoletes: 2095                                                    MCI
                                                        September 1997


       IMAP/POP AUTHorize Extension for Simple Challenge/Response

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   While IMAP4 supports a number of strong authentication mechanisms as
   described in RFC 1731, it lacks any mechanism that neither passes
   cleartext, reusable passwords across the network nor requires either
   a significant security infrastructure or that the mail server update
   a mail-system-wide user authentication file on each mail access.
   This specification provides a simple challenge-response
   authentication protocol that is suitable for use with IMAP4.  Since
   it utilizes Keyed-MD5 digests and does not require that the secret be
   stored in the clear on the server, it may also constitute an
   improvement on APOP for POP3 use as specified in RFC 1734.

1. Introduction

   Existing Proposed Standards specify an AUTHENTICATE mechanism for the
   IMAP4 protocol [IMAP, IMAP-AUTH] and a parallel AUTH mechanism for
   the POP3 protocol [POP3-AUTH].  The AUTHENTICATE mechanism is
   intended to be extensible; the four methods specified in [IMAP-AUTH]
   are all fairly powerful and require some security infrastructure to
   support.  The base POP3 specification [POP3] also contains a
   lightweight challenge-response mechanism called APOP.  APOP is
   associated with most of the risks associated with such protocols: in
   particular, it requires that both the client and server machines have
   access to the shared secret in cleartext form. CRAM offers a method
   for avoiding such cleartext storage while retaining the algorithmic
   simplicity of APOP in using only MD5, though in a "keyed" method.


=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2180.txt
=====================================================






Network Working Group                                          M. Gahrns
Request for Comments: 2180                                     Microsoft
Category: Informational                                        July 1997


                 IMAP4 Multi-Accessed Mailbox Practice

Status of this Memo

   This memo provides information for the Internet community.  This memo
   does not specify an Internet standard of any kind.  Distribution of
   this memo is unlimited.

1. Abstract

   IMAP4[RFC-2060] is rich client/server protocol that allows a client
   to access and manipulate electronic mail messages on a server.
   Within the protocol framework, it is possible to have differing
   results for particular client/server interactions. If a protocol does
   not allow for this, it is often unduly restrictive.

   For example, when multiple clients are accessing a mailbox and one
   attempts to delete the mailbox, an IMAP4 server may choose to
   implement a solution based upon server architectural constraints or
   individual preference.

   With this flexibility comes greater client responsibility.  It is not
   sufficient for a client to be written based upon the behavior of a
   particular IMAP server.  Rather the client must be based upon the
   behavior allowed by the protocol.

   By documenting common IMAP4 server practice for the case of
   simultaneous client access to a mailbox, we hope to ensure the widest
   amount of inter-operation between IMAP4 clients and servers.

   The behavior described in this document reflects the practice of some
   existing servers or behavior that the consensus of the IMAP mailing
   list has deemed to be reasonable.  The behavior described within this
   document is believed to be [RFC-2060] compliant. However, this
   document is not meant to define IMAP4 compliance, nor is it an
   exhaustive list of valid IMAP4 behavior. [RFC-2060] must always be
   consulted to determine IMAP4 compliance, especially for server
   behavior not described within this document.


=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc5256.txt
=====================================================






Network Working Group                                         M. Crispin
Request for Comments: 5256                             Panda Programming
Category: Standards Track                                   K. Murchison
                                              Carnegie Mellon University
                                                               June 2008


     Internet Message Access Protocol - SORT and THREAD Extensions

Status of This Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   This document describes the base-level server-based sorting and
   threading extensions to the IMAP protocol.  These extensions provide
   substantial performance improvements for IMAP clients that offer
   sorted and threaded views.

1.  Introduction

   The SORT and THREAD extensions to the [IMAP] protocol provide a means
   of server-based sorting and threading of messages, without requiring
   that the client download the necessary data to do so itself.  This is
   particularly useful for online clients as described in [IMAP-MODELS].

   A server that supports the base-level SORT extension indicates this
   with a capability name which starts with "SORT".  Future, upwards-
   compatible extensions to the SORT extension will all start with
   "SORT", indicating support for this base level.

   A server that supports the THREAD extension indicates this with one
   or more capability names consisting of "THREAD=" followed by a
   supported threading algorithm name as described in this document.
   This provides for future upwards-compatible extensions.

   A server that implements the SORT and/or THREAD extensions MUST
   collate strings in accordance with the requirements of I18NLEVEL=1,
   as described in [IMAP-I18N], and SHOULD implement and advertise the

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2177.txt
=====================================================





Network Working Group                                           B. Leiba
Request for Comments: 2177               IBM T.J. Watson Research Center
Category: Standards Track                                      June 1997


                           IMAP4 IDLE command

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

1.   Abstract

   The Internet Message Access Protocol [IMAP4] requires a client to
   poll the server for changes to the selected mailbox (new mail,
   deletions).  It's often more desirable to have the server transmit
   updates to the client in real time.  This allows a user to see new
   mail immediately.  It also helps some real-time applications based on
   IMAP, which might otherwise need to poll extremely often (such as
   every few seconds).  (While the spec actually does allow a server to
   push EXISTS responses aysynchronously, a client can't expect this
   behaviour and must poll.)

   This document specifies the syntax of an IDLE command, which will
   allow a client to tell the server that it's ready to accept such
   real-time updates.

2.   Conventions Used in this Document

   In examples, "C:" and "S:" indicate lines sent by the client and
   server respectively.

   The key words "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", and "MAY"
   in this document are to be interpreted as described in RFC 2060
   [IMAP4].

3.   Specification

   IDLE Command

   Arguments:  none

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2683.txt
=====================================================






Network Working Group                                           B. Leiba
Request for Comments: 2683               IBM T.J. Watson Research Center
Category: Informational                                   September 1999


                  IMAP4 Implementation Recommendations

Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1999).  All Rights Reserved.

1. Abstract

   The IMAP4 specification [RFC-2060] describes a rich protocol for use
   in building clients and servers for storage, retrieval, and
   manipulation of electronic mail.  Because the protocol is so rich and
   has so many implementation choices, there are often trade-offs that
   must be made and issues that must be considered when designing such
   clients and servers.  This document attempts to outline these issues
   and to make recommendations in order to make the end products as
   interoperable as possible.

2. Conventions used in this document

   In examples, "C:" indicates lines sent by a client that is connected
   to a server.  "S:" indicates lines sent by the server to the client.

   The words "must", "must not", "should", "should not", and "may" are
   used with specific meaning in this document; since their meaning is
   somewhat different from that specified in RFC 2119, we do not put
   them in all caps here.  Their meaning is as follows:

   must --       This word means that the action described is necessary
                 to ensure interoperability.  The recommendation should
                 not be ignored.
   must not --   This phrase means that the action described will be
                 almost certain to hurt interoperability.  The
                 recommendation should not be ignored.

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc2359.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 2359                       Netscape Communications
Category: Standards Track                                      June 1998


                        IMAP4 UIDPLUS extension

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1998).  All Rights Reserved.

IESG NOTE

   The IMAP extension described here assumes a particular means of using
   IMAP to support disconnected operation.  However, this means of
   supporting disconnected operation is not yet documented.  Also, there
   are multiple theories about how best to do disconnected operation in
   IMAP, and as yet, there is no consensus on which one should be
   adopted as a standard.

   This document is being approved as a Proposed Standard because it
   does not appear to have technical flaws in itelf.  However, approval
   of this document as a Proposed Standard should not be considered an
   IETF endorsement of any particular means of doing disconnected
   operation in IMAP.

Table of Contents

   1.   Abstract ..............................................    2
   2.   Conventions Used in this Document .....................    2
   3.   Introduction and Overview .............................    2
   4.   Features ..............................................    2
   4.1. UID EXPUNGE Command ...................................    2
   4.2. APPENDUID response code ...............................    3
   4.3. COPYUID response code .................................    4
   5.   Formal Syntax .........................................    4
   6.   References ............................................    4

=====================================================
== File: src/site/resources/server/rfclist/imap4/rfc1731.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 1731                               Carnegie Mellon
Category: Standards Track                                  December 1994


                    IMAP4 Authentication Mechanisms

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.


1. Introduction

   The Internet Message Access Protocol, Version 4 [IMAP4] contains the
   AUTHENTICATE command, for identifying and authenticating a user to an
   IMAP4 server and for optionally negotiating a protection mechanism
   for subsequent protocol interactions.  This document describes
   several authentication mechanisms for use by the IMAP4 AUTHENTICATE
   command.


2. Kerberos version 4 authentication mechanism

   The authentication type associated with Kerberos version 4 is
   "KERBEROS_V4".

   The data encoded in the first ready response contains a random 32-bit
   number in network byte order.  The client should respond with a
   Kerberos ticket and an authenticator for the principal
   "imap.hostname@realm", where "hostname" is the first component of the
   host name of the server with all letters in lower case and where
   "realm" is the Kerberos realm of the server.  The encrypted checksum
   field included within the Kerberos authenticator should contain the
   server provided 32-bit number in network byte order.

   Upon decrypting and verifying the ticket and authenticator, the
   server should verify that the contained checksum field equals the
   original server provided random 32-bit number.  Should the
   verification be successful, the server must add one to the checksum
   and construct 8 octets of data, with the first four octets containing

=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1725.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 1725                               Carnegie Mellon
Obsoletes: 1460                                                  M. Rose
Category: Standards Track                   Dover Beach Consulting, Inc.
                                                           November 1994


                    Post Office Protocol - Version 3

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Overview

   This memo is a revision to RFC 1460, a Draft Standard.  It makes the
   following changes from that document:

      - removed text regarding "split-UA model", which didn't add
        anything to the understanding of POP

      - clarified syntax of commands, keywords, and arguments

      - clarified behavior on broken connection

      - explicitly permitted an inactivity autologout timer

      - clarified the requirements of the "exclusive-access lock"

      - removed implementation-specific wording regarding the parsing of
        the maildrop

      - allowed servers to close the connection after a failed
        authentication command

      - removed the LAST command

      - fixed typo in example of TOP command

      - clarified that the second argument to the TOP command is non-
        negative

=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1939.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 1939                               Carnegie Mellon
STD: 53                                                          M. Rose
Obsoletes: 1725                             Dover Beach Consulting, Inc.
Category: Standards Track                                       May 1996


                    Post Office Protocol - Version 3

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Table of Contents

   1. Introduction ................................................    2
   2. A Short Digression ..........................................    2
   3. Basic Operation .............................................    3
   4. The AUTHORIZATION State .....................................    4
      QUIT Command ................................................    5
   5. The TRANSACTION State .......................................    5
      STAT Command ................................................    6
      LIST Command ................................................    6
      RETR Command ................................................    8
      DELE Command ................................................    8
      NOOP Command ................................................    9
      RSET Command ................................................    9
   6. The UPDATE State ............................................   10
      QUIT Command ................................................   10
   7. Optional POP3 Commands ......................................   11
      TOP Command .................................................   11
      UIDL Command ................................................   12
      USER Command ................................................   13
      PASS Command ................................................   14
      APOP Command ................................................   15
   8. Scaling and Operational Considerations ......................   16
   9. POP3 Command Summary ........................................   18
   10. Example POP3 Session .......................................   19
   11. Message Format .............................................   19
   12. References .................................................   20
   13. Security Considerations ....................................   20

=====================================================
== File: src/site/resources/server/rfclist/pop3/rfc1734.txt
=====================================================





Network Working Group                                           J. Myers
Request for Comments: 1734                               Carnegie Mellon
Category: Standards Track                                  December 1994


                      POP3 AUTHentication command

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.


1. Introduction

   This document describes the optional AUTH command, for indicating an
   authentication mechanism to the server, performing an authentication
   protocol exchange, and optionally negotiating a protection mechanism
   for subsequent protocol interactions.  The authentication and
   protection mechanisms used by the POP3 AUTH command are those used by
   IMAP4.


2. The AUTH command

   AUTH mechanism

         Arguments:
             a string identifying an IMAP4 authentication mechanism,
             such as defined by [IMAP4-AUTH].  Any use of the string
             "imap" used in a server authentication identity in the
             definition of an authentication mechanism is replaced with
             the string "pop".

         Restrictions:
             may only be given in the AUTHORIZATION state

         Discussion:
             The AUTH command indicates an authentication mechanism to
             the server.  If the server supports the requested
             authentication mechanism, it performs an authentication
             protocol exchange to authenticate and identify the user.

=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2830.txt
=====================================================






Network Working Group                                          J. Hodges
Request for Comments: 2830                                    Oblix Inc.
Category: Standards Track                                      R. Morgan
                                                      Univ of Washington
                                                                 M. Wahl
                                                  Sun Microsystems, Inc.
                                                                May 2000


              Lightweight Directory Access Protocol (v3):
                 Extension for Transport Layer Security

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2000).  All Rights Reserved.

Abstract

   This document defines the "Start Transport Layer Security (TLS)
   Operation" for LDAP [LDAPv3, TLS]. This operation provides for TLS
   establishment in an LDAP association and is defined in terms of an
   LDAP extended request.

1.  Conventions Used in this Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [ReqsKeywords].

2.  The Start TLS Request

   This section describes the Start TLS extended request and extended
   response themselves: how to form the request, the form of the
   response, and enumerates the various result codes the client MUST be
   prepared to handle.


=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2255.txt
=====================================================






Network Working Group                                         T. Howes
Request for Comments: 2255                                    M. Smith
Category: Standards Track                Netscape Communications Corp.
                                                         December 1997


                          The LDAP URL Format

1. Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG NOTE

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and

   c. to avoid delaying the advancement and deployment of other Internet
      standards-track protocols which require the ability to query, but
      not update, LDAPv3 directory servers.


=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2252.txt
=====================================================






Network Working Group                                            M. Wahl
Request for Comments: 2252                           Critical Angle Inc.
Category: Standards Track                                    A. Coulbeck
                                                              Isode Inc.
                                                                T. Howes
                                           Netscape Communications Corp.
                                                                S. Kille
                                                           Isode Limited
                                                           December 1997


              Lightweight Directory Access Protocol (v3):
                      Attribute Syntax Definitions

1. Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG Note

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some

=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc3377.txt
=====================================================






Network Working Group                                          J. Hodges
Request for Comments: 3377                         Sun Microsystems Inc.
Category: Standards Track                                      R. Morgan
                                                University of Washington
                                                          September 2002


              Lightweight Directory Access Protocol (v3):
                        Technical Specification

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2002).  All Rights Reserved.

Abstract

   This document specifies the set of RFCs comprising the Lightweight
   Directory Access Protocol Version 3 (LDAPv3), and addresses the "IESG
   Note" attached to RFCs 2251 through 2256.

1.  Background and Motivation

   The specification for the Lightweight Directory Access Protocol
   version 3 (LDAPv3) nominally comprises eight RFCs which were issued
   in two distinct subsets at separate times -- RFCs 2251 through 2256
   first, then RFCs 2829 and 2830 following later.

   RFC 2251 through 2256 do not mandate the implementation of any
   satisfactory authentication mechanisms and hence were published with
   an "IESG Note" discouraging implementation and deployment of LDAPv3
   clients or servers implementing update functionality until a Proposed
   Standard for mandatory authentication in LDAPv3 is published.

   RFC 2829 was subsequently published in answer to the IESG Note.

   The purpose of this document is to explicitly specify the set of RFCs

=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2256.txt
=====================================================






Network Working Group                                            M. Wahl
Request for Comments: 2256                           Critical Angle Inc.
Category: Standards Track                                  December 1997


       A Summary of the X.500(96) User Schema for use with LDAPv3

1. Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG Note

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and

   c. to avoid delaying the advancement and deployment of other Internet
      standards-track protocols which require the ability to query, but
      not update, LDAPv3 directory servers.

   Readers are hereby warned that until mandatory authentication

=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2253.txt
=====================================================






Network Working Group                                            M. Wahl
Request for Comments: 2253                           Critical Angle Inc.
Obsoletes: 1779                                                 S. Kille
Category: Standards Track                                     Isode Ltd.
                                                                T. Howes
                                           Netscape Communications Corp.
                                                           December 1997


              Lightweight Directory Access Protocol (v3):
           UTF-8 String Representation of Distinguished Names

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG Note

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and


=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2829.txt
=====================================================






Network Working Group                                            M. Wahl
Request for Comments: 2829                        Sun Microsystems, Inc.
Category: Standards Track                                  H. Alvestrand
                                                             EDB Maxware
                                                               J. Hodges
                                                             Oblix, Inc.
                                                               R. Morgan
                                                University of Washington
                                                                May 2000


                    Authentication Methods for LDAP

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2000).  All Rights Reserved.

Abstract

   This document specifies particular combinations of security
   mechanisms which are required and recommended in LDAP [1]
   implementations.

1. Introduction

   LDAP version 3 is a powerful access protocol for directories.

   It offers means of searching, fetching and manipulating directory
   content, and ways to access a rich set of security functions.

   In order to function for the best of the Internet, it is vital that
   these security functions be interoperable; therefore there has to be
   a minimum subset of security functions that is common to all
   implementations that claim LDAPv3 conformance.

   Basic threats to an LDAP directory service include:

=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2254.txt
=====================================================






Network Working Group                                          T. Howes
Request for Comments: 2254                Netscape Communications Corp.
Category: Standards Track                                 December 1997


            The String Representation of LDAP Search Filters

1. Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG Note

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and

   c. to avoid delaying the advancement and deployment of other Internet
      standards-track protocols which require the ability to query, but
      not update, LDAPv3 directory servers.



=====================================================
== File: src/site/resources/server/rfclist/ldap/rfc2251.txt
=====================================================






Network Working Group                                            M. Wahl
Request for Comments: 2251                           Critical Angle Inc.
Category: Standards Track                                       T. Howes
                                           Netscape Communications Corp.
                                                                S. Kille
                                                           Isode Limited
                                                           December 1997


               Lightweight Directory Access Protocol (v3)

1. Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (1997).  All Rights Reserved.

IESG Note

   This document describes a directory access protocol that provides
   both read and update access.  Update access requires secure
   authentication, but this document does not mandate implementation of
   any satisfactory authentication mechanisms.

   In accordance with RFC 2026, section 4.4.1, this specification is
   being approved by IESG as a Proposed Standard despite this
   limitation, for the following reasons:

   a. to encourage implementation and interoperability testing of
      these protocols (with or without update access) before they
      are deployed, and

   b. to encourage deployment and use of these protocols in read-only
      applications.  (e.g. applications where LDAPv3 is used as
      a query language for directories which are updated by some
      secure mechanism other than LDAP), and

   c. to avoid delaying the advancement and deployment of other Internet

=====================================================
== File: src/site/resources/server/rfclist/basic/rfc0822.txt
=====================================================
 




     RFC #  822

     Obsoletes:  RFC #733  (NIC #41952)












                        STANDARD FOR THE FORMAT OF

                        ARPA INTERNET TEXT MESSAGES






                              August 13, 1982






                                Revised by

                             David H. Crocker


                      Dept. of Electrical Engineering
                 University of Delaware, Newark, DE  19711
                      Network:  DCrocker @ UDel-Relay







=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2046.txt
=====================================================





Network Working Group                                          N. Freed
Request for Comments: 2046                                     Innosoft
Obsoletes: 1521, 1522, 1590                               N. Borenstein
Category: Standards Track                                 First Virtual
                                                          November 1996


                 Multipurpose Internet Mail Extensions
                            (MIME) Part Two:
                              Media Types

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   STD 11, RFC 822 defines a message representation protocol specifying
   considerable detail about US-ASCII message headers, but which leaves
   the message content, or message body, as flat US-ASCII text.  This
   set of documents, collectively called the Multipurpose Internet Mail
   Extensions, or MIME, redefines the format of messages to allow for

    (1)   textual message bodies in character sets other than
          US-ASCII,

    (2)   an extensible set of different formats for non-textual
          message bodies,

    (3)   multi-part message bodies, and

    (4)   textual header information in character sets other than
          US-ASCII.

   These documents are based on earlier work documented in RFC 934, STD
   11, and RFC 1049, but extends and revises them.  Because RFC 822 said
   so little about message bodies, these documents are largely
   orthogonal to (rather than a revision of) RFC 822.

   The initial document in this set, RFC 2045, specifies the various
   headers used to describe the structure of MIME messages. This second

=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2822.txt
=====================================================





Network Working Group                                 P. Resnick, Editor
Request for Comments: 2822                         QUALCOMM Incorporated
Obsoletes: 822                                                April 2001
Category: Standards Track


                        Internet Message Format

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Copyright Notice

   Copyright (C) The Internet Society (2001).  All Rights Reserved.

Abstract

   This standard specifies a syntax for text messages that are sent
   between computer users, within the framework of "electronic mail"
   messages.  This standard supersedes the one specified in Request For
   Comments (RFC) 822, "Standard for the Format of ARPA Internet Text
   Messages", updating it to reflect current practice and incorporating
   incremental changes that were specified in other RFCs.

Table of Contents

   1. Introduction ............................................... 3
   1.1. Scope .................................................... 3
   1.2. Notational conventions ................................... 4
   1.2.1. Requirements notation .................................. 4
   1.2.2. Syntactic notation ..................................... 4
   1.3. Structure of this document ............................... 4
   2. Lexical Analysis of Messages ............................... 5
   2.1. General Description ...................................... 5
   2.1.1. Line Length Limits ..................................... 6
   2.2. Header Fields ............................................ 7
   2.2.1. Unstructured Header Field Bodies ....................... 7
   2.2.2. Structured Header Field Bodies ......................... 7
   2.2.3. Long Header Fields ..................................... 7
   2.3. Body ..................................................... 8

=====================================================
== File: src/site/resources/server/rfclist/basic/rfc1123.txt
=====================================================





Network Working Group                    Internet Engineering Task Force
Request for Comments: 1123                             R. Braden, Editor
                                                            October 1989


       Requirements for Internet Hosts -- Application and Support

Status of This Memo

   This RFC is an official specification for the Internet community.  It
   incorporates by reference, amends, corrects, and supplements the
   primary protocol standards documents relating to hosts.  Distribution
   of this document is unlimited.

Summary

   This RFC is one of a pair that defines and discusses the requirements
   for Internet host software.  This RFC covers the application and
   support protocols; its companion RFC-1122 covers the communication
   protocol layers: link layer, IP layer, and transport layer.



                           Table of Contents




   1.  INTRODUCTION ...............................................    5
      1.1  The Internet Architecture ..............................    6
      1.2  General Considerations .................................    6
         1.2.1  Continuing Internet Evolution .....................    6
         1.2.2  Robustness Principle ..............................    7
         1.2.3  Error Logging .....................................    8
         1.2.4  Configuration .....................................    8
      1.3  Reading this Document ..................................   10
         1.3.1  Organization ......................................   10
         1.3.2  Requirements ......................................   10
         1.3.3  Terminology .......................................   11
      1.4  Acknowledgments ........................................   12

   2.  GENERAL ISSUES .............................................   13
      2.1  Host Names and Numbers .................................   13
      2.2  Using Domain Name Service ..............................   13
      2.3  Applications on Multihomed hosts .......................   14

=====================================================
== File: src/site/resources/server/rfclist/basic/rfc2045.txt
=====================================================





Network Working Group                                          N. Freed
Request for Comments: 2045                                     Innosoft
Obsoletes: 1521, 1522, 1590                               N. Borenstein
Category: Standards Track                                 First Virtual
                                                          November 1996


                 Multipurpose Internet Mail Extensions
                            (MIME) Part One:
                   Format of Internet Message Bodies

Status of this Memo

   This document specifies an Internet standards track protocol for the
   Internet community, and requests discussion and suggestions for
   improvements.  Please refer to the current edition of the "Internet
   Official Protocol Standards" (STD 1) for the standardization state
   and status of this protocol.  Distribution of this memo is unlimited.

Abstract

   STD 11, RFC 822, defines a message representation protocol specifying
   considerable detail about US-ASCII message headers, and leaves the
   message content, or message body, as flat US-ASCII text.  This set of
   documents, collectively called the Multipurpose Internet Mail
   Extensions, or MIME, redefines the format of messages to allow for

    (1)   textual message bodies in character sets other than
          US-ASCII,

    (2)   an extensible set of different formats for non-textual
          message bodies,

    (3)   multi-part message bodies, and

    (4)   textual header information in character sets other than
          US-ASCII.

   These documents are based on earlier work documented in RFC 934, STD
   11, and RFC 1049, but extends and revises them.  Because RFC 822 said
   so little about message bodies, these documents are largely
   orthogonal to (rather than a revision of) RFC 822.

   This initial document specifies the various headers used to describe
   the structure of MIME messages. The second document, RFC 2046,

=====================================================
== File: src/site/markdown/server/manage-guice-distributed-james.md
=====================================================
# Managing Guice distributed James

This guide aims to be an entry-point to the James documentation for user managing a distributed Guice James server.

It includes:

 - Simple architecture explanations
 - Propose some diagnostics for some common issues
 - Present procedures that can be set up to address these issues

In order to not duplicate information, existing documentation will be linked.

Please note that this product is under active development, should be considered experimental and thus targets 
advanced users.

## Table of content

 - [Overall architecture](#Overall_architecture)
 - [Basic Monitoring](#Basic_Monitoring)
 - [Cassandra table level configuration](#Cassandra_table_level_configuration)
 - [Deleted Messages Vault](#Deleted_Messages_Vault)
 - [OpenSearch Indexing](#Opensearch_Indexing)
 - [Mailbox Event Bus](#Mailbox_Event_Bus)
 - [Mail Processing](#Mail_Processing)
 - [Mail Queue](#Mail_Queue)
 - [Setting Cassandra user permissions](#Setting_Cassandra_user_permissions)
 - [Solving cassandra inconsistencies](#Solving_cassandra_inconsistencies)
 - [Updating Cassandra schema version](#Updating_Cassandra_schema_version)

## Overall architecture

Guice distributed James server intends to provide a horizontally scalable email server.

In order to achieve this goal, this product leverages the following technologies:

 - **Cassandra** for meta-data storage
 - **ObjectStorage** (S3) for binary content storage
 - **OpenSearch** for search
 - **RabbitMQ** for messaging

A [docker-compose](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docker-compose.yml) file is 
available to allow you to quickly deploy locally this product.

## Basic Monitoring

A toolbox is available to help an administrator diagnose issues:
 - [Structured logging into Kibana](#Structured_logging_into_Kibana)
 - [Metrics graphs into Grafana](#Metrics_graphs_into_Grafana)
 - [WebAdmin HealthChecks](#Webadmin_Healthchecks)


=====================================================
== File: src/site/markdown/server/manage-cli.md
=====================================================
Manage James via the Command Line
=================================

With any wiring, James is packed with a command line client.

To use it enter, for Spring distrubution:

```
./bin/james-cli.sh -h 127.0.0.1 -p 9999 COMMAND
```

And for Guice distributions:

```
java -jar /root/james-cli.jar -h 127.0.0.1 -p 9999 COMMAND
```

Guice in docker embeds a script helper:

```
docker exec -ti james james-cli COMMAND
```

The following document will explain you which are the available options for **COMMAND**.

Note: the command line before **COMMAND** will be documente as *{cli}*.

## Navigation menu

 - [Manage Domains](#Manage_Domains)
 - [Managing users](#Managing_users)
 - [Managing mailboxes](#Managing_mailboxes)
 - [Adding a message in a mailbox](#Adding_a_message_in_a_mailbox)
 - [Managing mappings](#Managing_mappings)
 - [Manage quotas](#Manage_quotas)
 - [Re-indexing](#Re-indexing)
 - [Sieve scripts quota](#Sieve_scripts_quota)
 - [Switching of mailbox implementation](#Switching_of_mailbox_implementation)

## Manage Domains

Domains represent the domain names handled by your server.

You can add a domain:

```
{cli} AddDomain domain.tld
```

You can remove a domain:

=====================================================
== File: src/site/markdown/server/install/guice-cassandra-rabbitmq-s3.md
=====================================================
# Guice-Cassandra-Rabbitmq-S3 installation guide

## Building

### Requirements

 - Java 11 SDK
 - Docker ∕ OpenSearch 2.1.0, RabbitMQ Management 3.8.18, compatible S3 ObjectStorage and Cassandra 4.0
 - Maven 3

### Building the artifacts

An usual compilation using maven will produce two artifacts into server/apps/distributed-app/target directory:

 * james-server-distributed-app.jar
 * james-server-distributed-app.lib

You can for example run in the base of [this git repository](https://github.com/apache/james-project):

```
mvn clean install
```

## Running

### Requirements

 * Cassandra 4.0
 * OpenSearch 2.1.0
 * RabbitMQ-Management 3.8.18
 * Zenko Cloudserver or AWS S3 compatible API

### James Launch

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from
[server/apps/distributed-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/distributed-app/sample-configuration). You might need to adapt it to your needs.

You also need to generate a keystore in your conf folder with the following command:

```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```

You need to have a Cassandra, OpenSearch, S3 and RabbitMQ instance running. You can either install the servers or launch them via docker:

```bash
$ docker run -d -p 9042:9042 --name=cassandra cassandra:4.1.3

=====================================================
== File: src/site/markdown/server/install/guice-cassandra.md
=====================================================
# Guice-Cassandra installation guide

## Building

### Requirements

 - Java 11 SDK
 - Docker ∕ OpenSearch 2.1.0 and Cassandra 4.0
 - Maven 3

*WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)

### Building the artifacts

An usual compilation using maven will produce two artifacts into server/container/guice/cassandra-guice/target directory:

 * james-server-cassandra-guice.jar
 * james-server-cassandra-guice.lib

You can for example run in the base of [this git repository](https://github.com/apache/james-project):

```
mvn clean install
```

## Running

### Requirements

 * Cassandra 4.0
 * OpenSearch 2.1.0

### James Launch

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from
[server/apps/cassandra-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/cassandra-app/sample-configuration). You might need to adapt it to your needs.

You also need to generate a keystore in your conf folder with the following command:

```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```

You need to have a Cassandra and an OpenSearch instance running. You can either install the servers or launch them via docker:

```bash

=====================================================
== File: src/site/markdown/server/install/guice-jpa.md
=====================================================
# Guice-JPA installation guide

## Building

### Requirements

 - Java 11 SDK
 - Maven 3 (optional)

### Download the artifacts

Download james-jpa-guice-3.8.1.zip from [the download page](http://james.apache.org/download.cgi#Apache_James_Server) and deflate it.

### (alternative) Building the artifacts

An usual compilation using maven of this [Git repository content](https://github.com/apache/james-project) will produce
two artifacts into server/container/guice/jpa-guice/target directory:

 - james-server-jpa-guice.jar
 - james-server-jpa-guice.lib

You can for example run in the base of this git repository:

```
mvn clean install
```

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called **conf**. You can get a sample
directory for configuration from [server/apps/jpa-app/sample-configuration](https://github.com/apache/james-project/tree/master/server/apps/jpa-app/sample-configuration). You might need to adapt it to your needs.


## Running

### James Launch

Edit the configuration to match your needs.

You also need to generate a keystore in your conf folder with the following command:

```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```

Once everything is set up, you just have to run the jar with:

```bash
$ java -javaagent:james-server-jpa-guice.lib/openjpa-3.2.0.jar \
    -Dlogback.configurationFile=conf/logback.xml \

=====================================================
== File: src/site/markdown/server/install/guice-jpa-smtp.md
=====================================================
# Guice-JPA-SMTP installation guide

## Building

### Requirements

 - Java 11 SDK
 - Docker
 - Maven (optional)

### Download the artifacts

Download james-jpa-smtp-guice-3.8.1.zip from [the download page](http://james.apache.org/download.cgi#Apache_James_Server) and deflate it.

### (alternative) Building the artifacts

An usual compilation using maven of this [Git repository content](https://github.com/apache/james-project) will produce
two artifacts into server/container/guice/jpa-smtp/target directory :

 - james-server-jpa-smtp-${version}.jar
 - james-server-jpa-smtp-${version}.lib

 To run james, you have to create a directory containing required configuration files names **conf**.

 A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-smtp-app/sample-configuration) is provided with some default value you may need to replace.


## Running

### James Launch

Edit the configuration to match your needs.

You also need to generate a keystore with the following command :

```bash
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
```

Once everything is set up, you just have to run the jar with :

```bash
$ java -javaagent:james-server-jpa-smtp-app.lib/openjpa-3.2.0.jar \
  -Dworking.directory=. \
  -Djdk.tls.ephemeralDHKeySize=2048 \
  -Dlogback.configurationFile=conf/logback.xml \
  -jar james-server-jpa-smtp-app.jar
```

=====================================================
== File: src/site/markdown/server/manage-webadmin.md
=====================================================
Web administration for JAMES
============================

The web administration supports for now the CRUD operations on the domains, the users, their mailboxes and their quotas,
 managing mail repositories, performing cassandra migrations, and much more, as described in the following sections.

**WARNING**: This API allow authentication only via the use of JWT. If not configured with JWT, an administrator should ensure an attacker can not use this API.

By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James, for example: Swagger documentation & James health checks.

Please also note **webadmin** is only enabled with **Guice**. You can not use it when using James with **Spring**, as the required injections are not implemented.

In case of any error, the system will return an error message which is json format like this:

```
{
    statusCode: <error_code>,
    type: <error_type>,
    message: <the_error_message>
    cause: <the_detail_message_from_throwable>
}
```

Also be aware that, in case things go wrong, all endpoints might return a 500 internal error (with a JSON body formatted
as exposed above). To avoid information duplication, this is ommited on endpoint specific documentation.

Finally, please note that in case of a malformed URL the 400 bad request response will contain an HTML body.

## Navigation menu

 - [HealthCheck](#HealthCheck)
 - [Administrating domains](#Administrating_domains)
 - [Administrating users](#Administrating_users)
 - [Administrating mailboxes](#Administrating_mailboxes)
 - [Administrating messages](#Administrating_Messages)
 - [Administrating user mailboxes](#Administrating_user_mailboxes)
 - [Administrating quotas by users](#Administrating_quotas_by_users)
 - [Administrating quotas by domains](#Administrating_quotas_by_domains)
 - [Administrating global quotas](#Administrating_global_quotas)
 - [Cassandra Schema upgrades](#Cassandra_Schema_upgrades)
 - [Correcting ghost mailbox](#Correcting_ghost_mailbox)
 - [Creating address aliases](#Creating_address_aliases)
 - [Creating domain mappings](#Creating_domain_mappings)
 - [Creating address forwards](#Creating_address_forwards)
 - [Creating address group](#Creating_address_group)
 - [Creating regex mapping](#Creating_regex_mapping)
 - [Address Mappings](#Address_Mappings)
 - [User Mappings](#User_Mappings)
 - [Administrating mail repositories](#Administrating_mail_repositories)
 - [Administrating mail queues](#Administrating_mail_queues)

=====================================================
== File: src/site/markdown/mailet/release-notes.md
=====================================================
#Release Notes

Apache JamesProject Team (2012/12/28)

##Release Notes

2.5.0 Release 2.5.0 marks a new milestone in Apache Mailet life. All Apache James mailet related sub-projects
  (Api, Base, Crypto, Standard) have been merged as a multi-module maven project.
  They share the same version number, a common naming scheme and will be released together.Apart from bug fixing, one
  notable release characteristic is that 2.5.0 jars are OSGi bundles.

##Earlier Releases

For information regarding the **Release notes** of earlier releases, please visit
<a href="release-notes-old.html">Old releases</a> page.

=====================================================
== File: src/site/markdown/mailet/quickstart.md
=====================================================
Mailets for developers
======================

## Artifact names

All binary (and source) artifacts are available via [Maven Central](http://repo.maven.apache.org/maven2).

The project **groupId** is *org.apache.james* and the artifact names are:

* **apache-mailet-api** - for the Mailet API
* **apache-mailet-base** - for base Mailets
* **apache-mailet-standard** - for Standard Mailets
* **apache-mailet-crypto** - for Crypto Mailets
* **mailetdocs-maven-plugin** if you wish to extract documentation from sources

Just include something like this in your *pom.xml*

~~~
<dependencies>
    <dependency>
        <groupId>org.apache.james</groupId>
        <artifactId>apache-mailet-api</artifactId>
        <version>3.8.1</version>
    </dependency>
    <!-- other dependencies -->
</dependencies>
~~~

### Write your own mailets

To learn how to write your own mailets please have a look at
<a href="https://github.com/apache/james-project/blob/master/mailet/base/src/main/java/org/apache/mailet/base/GenericMatcher.java">Generic Matcher</a> and
<a href="https://github.com/apache/james-project/blob/master/mailet/base/src/main/java/org/apache/mailet/base/GenericMailet.java">Generic Mailet</a>.

Another good learning source are the unit tests from
<a href="https://github.com/apache/james-project/tree/master/mailet/standard/src/main/java/org/apache/james/transport">Standard Mailets</a>


=====================================================
== File: src/homepage/about.md
=====================================================
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)

You can find the source code for the Jekyll new theme at:
{% include icon-github.html username="jekyll" %} /
[minima](https://github.com/jekyll/minima)

You can find the source code for Jekyll at
{% include icon-github.html username="jekyll" %} /
[jekyll](https://github.com/jekyll/jekyll)


## How to post new articles on Jekyll


#### The Posts Folder

As explained on the [directory structure](https://jekyllrb.com/docs/structure/) page, the _posts folder is where your blog posts will live:

```
.
├── _drafts
├── _includes
├── _layouts
├── _posts
|   ├── 2007-10-29-why-every-programmer-should-play-nethack.md
|   └── 2009-04-26-barcamp-boston-4-roundup.md
├── _data
├── _site
├── .jekyll-metadata
└── index.html
```

The files extension is Markdown.


#### Front Matter


The front matter is where Jekyll starts to get really cool. Any file that contains a YAML front matter block will be processed by Jekyll as a special file. The front matter must be the first thing in the file and must take the form of valid YAML set between triple-dashed lines. Here is a basic example:

```
---
layout: post
title:  "Welcome to Jekyll"
date:   2016-08-29 16:13:22 +0200
tags: 
---
```

* ```Layout``` attribute must be always Post to load the good HTM-CSS template of the page

=====================================================
== File: src/homepage/Gemfile.lock
=====================================================
GEM
  remote: https://rubygems.org/
  specs:
    addressable (2.8.0)
      public_suffix (>= 2.0.2, < 5.0)
    colorator (1.1.0)
    concurrent-ruby (1.2.3)
    em-websocket (0.5.1)
      eventmachine (>= 0.12.9)
      http_parser.rb (~> 0.6.0)
    eventmachine (1.2.7)
    ffi (1.16.3)
    forwardable-extended (2.6.0)
    google-protobuf (3.25.3-x86_64-linux)
    http_parser.rb (0.6.0)
    i18n (1.14.1)
      concurrent-ruby (~> 1.0)
    jekyll (4.3.3)
      addressable (~> 2.4)
      colorator (~> 1.0)
      em-websocket (~> 0.5)
      i18n (~> 1.0)
      jekyll-sass-converter (>= 2.0, < 4.0)
      jekyll-watch (~> 2.0)
      kramdown (~> 2.3, >= 2.3.1)
      kramdown-parser-gfm (~> 1.0)
      liquid (~> 4.0)
      mercenary (>= 0.3.6, < 0.5)
      pathutil (~> 0.9)
      rouge (>= 3.0, < 5.0)
      safe_yaml (~> 1.0)
      terminal-table (>= 1.8, < 4.0)
      webrick (~> 1.7)
    jekyll-feed (0.17.0)
      jekyll (>= 3.7, < 5.0)
    jekyll-sass-converter (3.0.0)
      sass-embedded (~> 1.54)
    jekyll-seo-tag (2.8.0)
      jekyll (>= 3.8, < 5.0)
    jekyll-watch (2.2.1)
      listen (~> 3.0)
    kramdown (2.4.0)
      rexml
    kramdown-parser-gfm (1.1.0)
      kramdown (~> 2.0)
    liquid (4.0.4)
    listen (3.7.0)
      rb-inotify (~> 0.9, >= 0.9.10)
    mercenary (0.3.6)
    minima (2.5.1)

=====================================================
== File: src/homepage/images/james-alt.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
	<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
		l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
		c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
		c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
		c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
		c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
		c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
		c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
	<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
		c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
		c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
		c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
		c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
		C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
		c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
		c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
		C16.586,22.84,14.938,21.717,13.25,20.418z"/>
	<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
		c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
		c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
		c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
		c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
		c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
		c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
		c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
		c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
		c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
		c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>

=====================================================
== File: src/homepage/images/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 viewBox="-223 283 164 228" style="enable-background:new -223 283 164 228;" xml:space="preserve">
<style type="text/css">
	.st0{display:none;}
	.st1{display:inline;}
	.st2{fill:#FFFFFF;}
	.st3{fill:#E74A24;}
	.st4{fill:none;}
	.st5{fill:url(#SVGID_1_);}
	.st6{fill:#E4262A;}
	.st7{font-family:'Poppins-Regular';}
	.st8{font-size:28px;}
</style>
<g id="Calque_2" class="st0">
	<rect x="-233.5" y="269.3" class="st1" width="186" height="258"/>
</g>
<g id="Calque_1">
	<g>
		<circle class="st2" cx="-141.1" cy="342.3" r="59.3"/>
		<path class="st3" d="M-100.2,317.9c-3.2-2.1-6.5-3.9-9.9-4.7c-3.4-0.9-7-0.7-10.2,0.7l-0.6,0.3l-0.3,0.1l-0.2,0.1l-0.1,0l0,0l0,0
			c0,0-0.1,0,0,0l0,0c-0.4,0.3-0.9,0.5-1.3,0.7c-0.9,0.5-1.8,0.9-2.7,1.2c-1.9,0.6-3.8,1.1-5.9,0.9c-1-0.1-2-0.5-2.9-1.1
			c-0.9-0.6-1.5-1.4-2-2.3c-0.9-1.8-1.2-3.7-1.3-5.6c0.3,1.9,0.9,3.7,1.9,5.2c0.5,0.7,1.2,1.4,1.9,1.8c0.8,0.4,1.6,0.6,2.5,0.7
			c1.7,0.1,3.5-0.4,5.2-1.2c0.8-0.4,1.6-0.8,2.4-1.2c0.4-0.2,0.8-0.5,1.1-0.7l0.7-0.4c0.2-0.1,0.4-0.3,0.7-0.4
			c1.8-1,3.8-1.6,5.8-1.7c2-0.1,4.1,0.1,6,0.8c1.9,0.6,3.7,1.6,5.2,2.8C-102.6,314.9-101.2,316.3-100.2,317.9z"/>
		<path class="st4" d="M-172.3,334c-0.3,0.2,8.2,10.4,20.9,20c3.7,2.9,7.4,5.3,10.7,7.4c0.3-0.4,0.5-0.8,0.7-1.1
			c-3.2-2.1-6.8-4.6-10.5-7.4C-163.1,343.3-171.9,333.7-172.3,334z"/>
		
			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.0298" y1="783.6619" x2="46.1336" y2="783.6619" gradientTransform="matrix(-0.1008 -0.9949 -0.9949 0.1008 623.7179 292.7814)">
			<stop  offset="0" style="stop-color:#FBC315"/>
			<stop  offset="0.4969" style="stop-color:#E74A24"/>
			<stop  offset="1" style="stop-color:#E4262A"/>
		</linearGradient>
		<path class="st5" d="M-152.8,353.1c-12.7-9.6-21.2-19.7-20.9-20c0.3-0.3,9.2,9.3,21.8,18.8c3.7,2.8,7.3,5.3,10.5,7.4
			c0-0.1,0.1-0.1,0.1-0.2c0.5-1,0.9-2.1,1.2-3.2c-2.3-4.5-7.9-10.8-14.4-16.5c-1.5-1.3-3-2.4-4.5-3.4c-0.3,2.7-1,4.6-1,4.6
			c0,0-0.7-2.6-0.7-5.7c-1-0.6-2.1-1.2-3.1-1.7c0,3.1-0.9,5.4-0.9,5.4c0,0-1.8-3.1-2-6.8c0,0,0,0,0-0.1c-6.1-2.8-11.3-4.2-11.3-4.2
			c-0.1-0.1,0.4,13,10.1,23c0.3,0,0.7,0,1,0c3.5,0,6.5,1.3,6.5,1.3c0,0-1.8,1.1-4.6,1.5c1,0.8,2,1.5,3,2.1c2.5-0.9,4.7-1.2,4.7-1.2
			c0,0-1.1,1.1-3,2.2c6.7,3.7,12.8,5.6,16.7,5.8c0.5-0.6,1-1.2,1.4-1.8C-145.4,358.4-149,356-152.8,353.1z"/>
		<path class="st6" d="M-107.5,317.7c-2.4,0.2-4.9,0.6-7.3,1.3c-4.8,1.4-9.5,3.8-13.4,7.5c-2,1.8-3.6,4-5,6.3
			c-1.4,2.3-2.5,4.8-3.2,7.4c-0.7,2.6-1.2,5.2-1.3,7.8c0,0.6-0.1,1.3-0.1,2l0,0.9l0,0.8c0,1-0.1,2-0.3,3c-0.1,0.7-0.3,1.5-0.5,2.2
			c-0.3,1.1-0.7,2.2-1.2,3.2c0,0.1-0.1,0.1-0.1,0.2c-0.2,0.4-0.5,0.8-0.7,1.1c-0.4,0.6-0.9,1.2-1.4,1.8c-0.4,0.4-0.8,0.8-1.2,1.2
			c-2.9,2.5-6.9,4.3-11.1,5.4c-4.3,1.1-8.9,1.7-13.5,2.1c-4.7,0.3-9.4,0.4-14.2,0.2c4.5,1.8,9.2,2.9,14,3.7
			c4.8,0.7,9.8,0.9,14.8,0.3c2.5-0.3,5.1-0.9,7.6-1.8c2.5-0.9,5-2.1,7.2-3.8c2.3-1.7,4.2-3.9,5.7-6.4c0.7-1.3,1.3-2.6,1.8-3.9
			c0.5-1.3,0.8-2.7,1-4.1c0.2-1.4,0.4-2.7,0.4-4.1c0-0.3,0-0.7,0-1l0-0.9c0-0.5,0-1,0-1.6c0.1-2.1,0.4-4.2,0.8-6.2
			c0.9-4,2.7-7.8,5.3-11c2.6-3.2,6.1-6,10.1-8.2c4-2.2,8.3-3.9,13-5.2C-102.6,317.5-105,317.5-107.5,317.7z"/>
	</g>
	<g>
		<path class="st2" d="M-217.7,479.8c-1.9,0-3.4-0.2-4.7-0.7v-5.7c1.6,0.4,3,0.6,4.2,0.6c3.7,0,5.6-2.4,5.6-7.1v-40.3h6.8v40.1
			c0,4.3-1,7.5-3,9.8C-210.8,478.7-213.8,479.8-217.7,479.8z"/>

=====================================================
== File: src/homepage/_posts/2007-09-16-jspf-0.9.5.markdown
=====================================================
---
layout: post
title:  "jSPF-0.9.5 released"
date:   2007-09-16 16:13:22 +0200
categories: james update
---

We are proud to announce the [availability][availability] of APACHE jSPF-0.9.5. This release brings initial support for
asynchronous processing and is fully RFC4408 compliant.

[availability]: /download.cgi



=====================================================
== File: src/homepage/_posts/2019-03-26-james-3.3.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.3.0"
date:   2019-03-26  09:09:47 +0100
categories: james update
---

The Apache James developers are pleased to announce James server 3.3.0 release.

Here are some points we worked on:

### Added

- Metrics for BlobStore
- New Guice product using Cassandra RabbitMQ ElasticSearch, OpenStack Swift and optional LDAP dependency (experimental)
- JPA SMTP dockerFile contributed by [matzepan](https://github.com/matzepan)
- Listing healthchecks, thanks to [Madhu Bhat](https://github.com/kratostaine)
- Configuring the ElasticSearch clusterName
- Logging and Metrics now supports Elasticsearch 6 (previously only Elasticsearch 2 was supported)
- Implementation of the RabbitMQ EventBus
- DeadLetter APIs and memory implementation for storing events that failed delivery
- RecipientRewriteTable Aliases and associated WebAdmin routes

### Fixed

- MAILBOX-350 Potential invalid UID <-> MSN mapping upon IMAP COPY
- Possibility to better zoom in Grafana boards
- default ElasticSearch shards & replica configured values
- Move & copy batch sizes are now loaded from configuration

### Changed

- WebAdmin ReIndexing API had been reworked
- MailboxListener and mailbox event system were reworked. Custom listeners will need to be adapted. Please see Upgrade instuctions.
- Docker images are now using a JRE instead of a JDK
- Replacement of the old mailbox event system with the EventBus

### Removed

- Drop HBase and JCR components (mailbox and server/data).

### Third party softwares

 - Tika prior 1.20 is subject to multiple CVEs. We recommend the upgrade

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2022-01-26-james-3.6.2.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.6.2"
date:   2022-01-26  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.6.2 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

## Announcements

[More announcements to follow this release]

## Release changelog

This is a maintenance release addressing the following issues:

 - JAMES-3646 Rely on strong typing for file paths operations
 - Upgrade Log4J to 2.17.1 (CVE-2021-44832 + CVE-2021-45105)
 - Upgrade Logback to 1.2.9 (CVE-2021-42550)

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2011-12-07-protocols-1.6.0-RC1.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.6.0-RC1 released"
date:   2011-10-07 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.0-RC1 of Apache James Protocols library.

=====================================================
== File: src/homepage/_posts/2009-07-17-jMPT-0.1.markdown
=====================================================
---
layout: post
title:  "Apache MPT 0.1 released"
date:   2009-07-17 16:13:22 +0200
categories: james update
---

The Apache James project is pleased to announced that the first release of
[Apache MPT][MPT] - a functional testing
library particularly suitable for line protocols based on ASCII - is now
[available][available] . These protocols are common in mail but the library may be useful more widely.

See the [release notes][notes] for more details.

[notes]: http://james.apache.org/mpt/0.1/release-notes.html
[available]: /download.cgi#Apache_MPT
[MPT]: http://james.apache.org/mpt

=====================================================
== File: src/homepage/_posts/2023-06-20-fail2ban.markdown
=====================================================
---
layout: post
title:  "Guest post: James and fail2ban"
date:   2023-05-17  01:16:30 +0200
categories: james update
---

Credits: Paul Gunter

[Original][Original] version.

# Repel brute force attacks with Linux firewall (iptables) and fail2ban

## Introduction

Servers on the Internet are constantly under attack. Mail servers are also attacked to gain control of
a server that can be used to send bulk spam emails. This often leads to these servers ending up on
various black lists and can no longer be used as mail servers. A safe basic configuration of James is
required at this point.

Nevertheless, attacks can mean that the server can practically no longer be operated. These are often
DoS or DDoS attacks (Denial-of-Service or Distributed Denial-of-Service), which smaller servers
in particular are difficult to defend against. However, basic protection via the firewall is relatively
easy to reach.

But even after that, attacks can be seen, especially those that try to spy out access data. These
attacks can be detected by monitoring the log files. So the attack patterns are known and can be
repelled with fail2ban.

All examples refer to a Linux operating system, Windows is not covered. The examples are shown
using Ubuntu and can be transferred to other Linux variants. “iptables” is used as the firewall front
end.

## Setting

The following assumes a small mail server on which only an SSH service can be accessed from
outside in addition to Apache James. In the example, the SSH service uses the standard port 22,
James uses the standard ports 25 (smtp), 110 (pop3) and/or 143 (imap).

The examples refer to Apache James 3.8.0 (Spring App).

The operating system is Ubuntu 22.04.

The configuration should be carried out beforehand on a test system and not during operation. One
thing to note about James is that changes to log4j2's configuration usually take effect immediately.

## (D)DoS - Attacks

An attempt is made to load the server with so many requests that it no longer works. In the case of
DDos, this is carried out in parallel by a large number of servers, which also means a corresponding

=====================================================
== File: src/homepage/_posts/2007-04-05-JAMES-2.3.1-RC1.markdown
=====================================================
---
layout: post
title:  "James Server 2.3.1 RC1 released"
date:   2007-04-05 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the first release candidate
of James Server 2.3.1. This release is maintenance release. See the [changelog][changelog] for more detail.

[availability]: http://downloads.apache.org/james/server/rc
[changelog]: http://issues.apache.org/jira/browse/James?report=com.atlassian.jira.plugin.system.project:changelog-panel


=====================================================
== File: src/homepage/_posts/2022-08-26-james-3.7.1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.1"
date:   2022-08-26  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.1 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

As this is a minor maintenance release.

This release addresses CVE-2022-28220 `STARTTLS command injection in Apache JAMES`.

It also includes various bugfixes.

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#361---2022-08-26
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2006-09-03-JSPF-0.9-b3.markdown
=====================================================
---
layout: post
title:  "jSPF 0.9 b3 Released"
date:   2006-09-03 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the third beta of jspf 0.9.
This version has start to use the official spf testsuite to fix all rfc issues.

[availability]: http://downloads.apache.org/james/jspf/

=====================================================
== File: src/homepage/_posts/2022-10-28-jspf-1.0.2.markdown
=====================================================
---
layout: post
title:  "Apache James JSPF 1.0.3"
date:   2022-12-30  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 1.0.3 release of the JSPF library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

This release fixes error management for DSNJava asynchronous capabilities

The Apache James PMC would like to thanks all contributors who made this release possible!

[tracker]: https://issues.apache.org/jira/projects/JSPF/issues
[download]: https://james.apache.org/download.cgi#Apache_jSPF

=====================================================
== File: src/homepage/_posts/2011-02-06-protocols-1.5.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.5"
date:   2011-02-06 16:13:22 +0200
categories: james update
---

The Apache James Project is happy to announce the release of version 1.5 of the Apache James Protocols.

[Read the release notes][notes]

[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12311060&amp;version=12316655




=====================================================
== File: src/homepage/_posts/2009-05-16-Mailet-crypto-0.1.markdown
=====================================================
---
layout: post
title:  "Apache Crypto Mailets 1.0 released"
date:   2009-05-16 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce the first independent release of
[Apache Cryptographic Mailets][crypto] (previous versions
were released as part of the [Apache James Server][server]).

This package contains mailets which encode, decode, sign and verify mail plus cryptology utilities.

[server]: http://james.apache.org/server
[crypto]: http://james.apache.org/mailet/crypto

=====================================================
== File: src/homepage/_posts/2012-01-07-mime4j-0.7.2.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4j 0.7.2 released"
date:   2012-01-07 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 0.7.2 of Apache James Mime4j library.

=====================================================
== File: src/homepage/_posts/2024-03-05-mime4j-0.8.11.markdown
=====================================================
---
layout: post
title:  "Apache James MIME4J 0.8.11"
date:   2024-03-05  03:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8.11 release of the MIME4J library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

This release fixes a minor regression of the 0.8.10 release regarding invalid encoding in email headers.

The Apache James PMC would like to thanks all contributors who made this release possible!

[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2007-04-15-JAMES-2.3.1.markdown
=====================================================
---
layout: post
title:  "James Server 2.3.1 Final Released"
date:   2007-04-15 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the final release of James Server 2.3.1. More information
 on what has been fixed since the 2.3.0 release can be found in the [changelog][changelog] .


[availability]: download.cgi
[changelog]: /server/2.3.1/changelog.html

=====================================================
== File: src/homepage/_posts/2010-06-02-mailet-base-1.1.markdown
=====================================================
---
layout: post
title:  "Apache Mailet Base 1.1 released"
date:   2010-06-02 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce a new  [Apache Mailet Base][base] release
which fixes a NullPointerException when using MatcherInverter.

[base]: http://james.apache.org/mailet/api

=====================================================
== File: src/homepage/_posts/2016-01-08-module-merge.markdown
=====================================================
---
layout: post
title:  "James modules merge into james-project"
date:   2016-01-08 16:13:22 +0200
categories: james update
---

Some of James modules were merged into [james-project][git].

This change was done in order to speed up our development phase before the 3.0 release and as long as important changes are needed on the API.

The modules merged are: james-server, apache-james-mailbox, apache-mailet, apache-james-mpt, protocols.

[git]: https://git-wip-us.apache.org/repos/asf?p=james-project.git;a=tree

=====================================================
== File: src/homepage/_posts/2016-02-08-moving-to-git.markdown
=====================================================
---
layout: post
title:  "Moving to GIT!"
date:   2016-02-09 16:13:22 +0200
categories: james update
---

All James projects has been migrated from SVN to GIT.

Here are the links to your favorite projects:

  - [james-project][james-project]
  - [james-jdkim][james-jdkim]
  - [james-jsieve][james-jsieve]
  - [james-jspf] [james-jspf]
  - [james-mime4j][james-mime4j]
  - [james-postage][james-postage]

[james-project]: https://git-wip-us.apache.org/repos/asf?p=james-project.git
[james-jdkim]: https://git-wip-us.apache.org/repos/asf?p=james-jdkim.git
[james-jsieve]: https://git-wip-us.apache.org/repos/asf?p=james-jsieve.git
[james-jspf]: https://git-wip-us.apache.org/repos/asf?p=james-jspf.git
[james-mime4j]: https://git-wip-us.apache.org/repos/asf?p=james-mime4j.git
[james-postage]: https://git-wip-us.apache.org/repos/asf?p=james-postage.git

=====================================================
== File: src/homepage/_posts/2022-03-01-james-3.7.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.0"
date:   2022-03-21  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.0 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

As of Apache James version 3.7.0 we removed support for maildir storage format. Users relying on maildir are encouraged 
to switch to other backends. Maildir can still be used as part of the 3.6.x release train.

## Most noticeable changes

The Apache James PMC is pleased to announce the additions of the following components/features in Apache James 3.7.0:

 - Multiple bug fixes. We hopefully significantly improved James overall stability.
 - Multiple performance enhancements. This new release ships a blazing fast server!
 - Multiple additions had been made to our [JMAP][JMAP] implementation including:
   - Implementation of RFC-9007 for composing MDN messages with JMAP
   - Support for JMAP integration with Web Push (RFC-8030), including encryption
   - Multiple additional JMAP methods: Email/import, Identity/set, etc...
   - Periodical cleanup of JMAP uploads
 - Ease TLS configuration by accepting PEM keys. This makes it easier to use Let's encrypt and certbot.
 - Task to delete unreferenced blobs when blob deduplication is enabled on top of the Distributed James server.
 - Use of PBKDF2 as a strong password-hashing algorithm
 - Allow disabling SMTP/IMAP plain auth for increased security
 - Addition of a James product dedicated to mail processing relying on Apache Pulsar for its mail queue (experimental)
 - Support for IMAP SASL OAUTH authentication mechanism. Used successfully with OIDC!
 - Extension for rate limiting upon email processing (memory and redis backend)

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[JMAP]: https://jmap.io
[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#362---2022-01-26
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2016-10-19-james-3.0.markdown
=====================================================
---
layout: post
title:  "New logo"
date:   2016-10-19 16:13:22 +0200
categories: james update
---

We choosed a new logo!

![New James logo](/images/james-logo.png)

=====================================================
== File: src/homepage/_posts/2017-06-23-jsieve-0.7.markdown
=====================================================
---
layout: post
title:  "Apache James JSieve 0.7"
date:   2017-06-23 11:30:00 +0700
categories: james update
---

James JSieve 0.7 has been released.

The library is available as a maven artifact, for instance for jsieve core:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>apache-jsieve-core</artifactId>
    <version>0.7</version>
</dependency>
```

This release solves issues with folded encoded header matching.

It also adds an additional DiscardAction to make discarding emails explicit for the calling code.

=====================================================
== File: src/homepage/_posts/2018-05-07-mime4j-0.8.2.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.2"
date:   2018-05-07 11:30:00 +0700
categories: james update
---

James Mime4J 0.8.2 has been released.

This release solves the following bugs:

 - MIME4J-267 MIME4J DOM parsing errors on specific formats
 - MIME4J-273 Correcting encoder splitting point

The following feature were added:

 - MIME4J-269 Introduce a safe to use, PERMISSIVE configuration
 - MIME4J-268 DefaultMessageWriter: expose a convenient *asBytes* method
 - MIME4J-271 Make possible to define a Content-Type parameter
 - MIME4J-272 Implicit DOM builder call

The library is available as a maven artifact, for instance for mime4j core:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>apache-mime4j-core</artifactId>
    <version>0.8.2</version>
</dependency>
```

You can also download the release artifacts [here].

[here]: https://downloads.apache.org/james/mime4j/0.8.2/

=====================================================
== File: src/homepage/_posts/2012-04-08-James-3.0-beta4.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0-beta4 released"
date:   2012-04-08 16:13:22 +0200
categories: james update
---

The Apache James project is happy to announce the release of version 3.0-beta4 of its modular mail server.

We thank all Users for their feedback and tests and we encourage anyone to [download][download] and discover this Milestone 3 release.

If you're interested in contributing to the James project, please subscribe to the James [mailing lists][mail].

[download]: http://james.apache.org/download.cgi#Apache_James_Server
[mail]: http://james.apache.org/mail.html

=====================================================
== File: src/homepage/_posts/2007-01-03-Mailet-api.markdown
=====================================================
---
layout: post
title:  "Mailet API to become a sub-project"
date:   2007-01-03 16:13:22 +0200
categories: james update
---

The James commiters have voted to promote the Mailet API to its own James sub-project.

This move will provide a clearer division between development of the API and development of James server, and we hope
this will encourage more participation from external projects.

The effort will start small, by releasing the current version, and move on to look at the enhancements we've been
discussing over on [the mailet api list][list] where we will extend a warm welcome to anyone
who has something to contribute.

Eventually we hope to extend the scope of the sub-project to include things like a Reference Implementation independent
of James Server and suitable for embedding, an SDK, and possibly a TCK.

[list]: http://james.apache.org/mail.html

=====================================================
== File: src/homepage/_posts/2007-05-15-mailet-api-lives.markdown
=====================================================
---
layout: post
title:  "Mailet API sub-project lives"
date:   2007-05-15 16:13:22 +0200
categories: james update
---

Following a decision taken by the James PMC a few months ago, the Apache Mailet API project is now independent of James
Server and has its own [webpage][webpage] and its own source repository.

[webpage]: /mailet/index.html

=====================================================
== File: src/homepage/_posts/2009-06-16-jsieve-03.markdown
=====================================================
---
layout: post
title:  "Apache JSieve 0.3 released"
date:   2009-06-16 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce that the third release of
[Apache JSieve][JSieve] - an implementation of the
[Sieve][Sieve] mail filtering language -
is now available for [download][download]. This is the first modular release and includes a
 filtering [mailet][mailet].

See the [release notes][notes] for more details.

[JSieve]: http://james.apache.org/jsieve
[mailet]: http://james.apache.org/mailet.
[download]: /download.cgi#Apache_JSieve
[notes]: http://james.apache.org/jsieve/0.3/release-notes.html
[Sieve]: http://www.ietf.org/rfc/rfc3028.txt

=====================================================
== File: src/homepage/_posts/2016-11-19-james-3.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0-beta5"
date:   2016-11-19 16:13:22 +0200
categories: james update
---

James server 3.0.0-beta5 has been released.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2019-08-30-latest-image-changes.markdown
=====================================================
---
layout: post
title:  "Apache James `latest` Docker images changes"
date:   2019-08-30  09:09:47 +0100
categories: james update
---

We have decided to change the `latest` Docker images behaviour.

Until nowadays, such images were built on the `master` branch for each products (`linagora/james-memory`, `linagora/james-cassandra-rabbitmq-ldap-project`, ...).  
This is not the way `latest` docker image should be, this [blog post](https://blog.container-solutions.com/docker-latest-confusion) is explaining this kind of misunderstood.  

So we decided to follow the global Docker users behaviour which is to clone the _latest stable release_ as the Docker `latest` images.

For those of you who are willing to use a Docker image on top of the master branch, you can use the newly created `branch-master` tag,  
which is published on each merge on the master branch. 

NB: you should not use the `latest` image in a production deployment, otherwise you are at risk of jumping from one major release to another unexpectedly.

Thanks for reading,
Antoine

=====================================================
== File: src/homepage/_posts/2015-10-08-james-2.3.1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 2.3.2.1 released"
date:   2015-10-08 16:13:22 +0200
categories: james update
---

Guice injection is now available in a new [Java project][guice]. Feel free to try it!

[guice]: https://github.com/apache/james-project/tree/trunk/server/container/cassandra-guice/

=====================================================
== File: src/homepage/_posts/2011-01-06-imap-mailbox-0.2.markdown
=====================================================
---
layout: post
title:  "Apache James IMAP 0.2 and Mailbox 0.2"
date:   2011-01-06 16:13:22 +0200
categories: james update
---

The Apache James Project is happy to announce the release of version 0.2 of the Apache James IMAP and Mailbox components
with following features:

 - Numerous IMAP bug fixes (better client support, memory improvement, NIO and IO support...).
 - Support for IMAP IDLE (RFC 2177, server transmit updates to the client in real time).
 - Support for IMAP User Flags.
 - Support for IMAP WITHIN Extensions (RFC 5032).
 - Mailbox Tooling to copy from a persistence implementation to another implementation.
 - ... See also the complete release notes for [IMAP 0.2][IMAP] and [Mailbox 0.2][Mailbox].


[IMAP]: http://s.apache.org/n8
[Mailbox]: http://s.apache.org/SNu

=====================================================
== File: src/homepage/_posts/2011-11-07-jspf-1.0.0.markdown
=====================================================
---
layout: post
title:  "Apache James jSPF 1.0.0 released"
date:   2011-10-07 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.0.0 of Apache James jSPF (Sender Policy Framework) library.

=====================================================
== File: src/homepage/_posts/2021-12-02-james-3.6.1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.6.1"
date:   2021-12-02  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.6.1 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

## Announcements

This release fixes the following vulnerability issues, that are present prior to 3.6.1:

 - *CVE-2021-38542*: Apache James vulnerable to STARTTLS command injection (IMAP and POP3)
 - *CVE-2021-40110*: Apache James IMAP vulnerable to a ReDoS
 - *CVE-2021-40111*: Apache James IMAP parsing Denial Of Service
 - *CVE-2021-40525*: Apache James: Sieve file storage vulnerable to path traversal attacks
 
We recommend users to upgrade to this version.

## Release changelog

Here are some points we worked on:
### Fixed
- JAMES-3676 Avoid S3 connection leaks
- JAMES-3477 Mail::duplicate did lead to file leak in various places
- JAMES-3646 Sanitize some File based components  
   - Prevent directory traversal on top of maildir mailbox (#659)
   - FileMailRepository shoud reject URL outside of James root
   - SieveFileRepository should validate underlying files belong to its root
- JAMES-1862 Generalize STARTTLS sanitizing fix
- JAMES-1862 Prevent Session fixation via STARTTLS
- JAMES-3634 + JAMES-3635 Apply fuzzing to Apache James
   - Upgrade PrefixedRegex to RE2J
   - Fuzzed input throws String out of bound exception for FETCH
   - Prevent String OutOfBoundException for IMAP APPEND
   - Prevent infinite loop for IMAP STATUS command parser
   - Prevent infinite loop for IMAP APPEND command parser
- JAMES-3571 MimeMessageWrapper getSize was incorrect for empty messages
- JAMES-3525 verifyIdentity should not fail on null sender
- JAMES-3556 Fix JMAP eventUrl s/closeAfter/closeafter/
- JAMES-3432 JMAP Uploads could alter the underlying byte source
- JAMES-3537 (Email/set create should allow to attach mails)
- JAMES-3558 JMAP Email/changes: When created + updated return both
- JAMES-3558 JMAP Email/changes: moves should be considered as updates
- JAMES-3557 Changes collectors should be ordered
- JAMES-3277 Distinct uids before calling toRanges
- JAMES-3434 Refactoring: EmailSubmissionSetMethod should not rely on nested clases

=====================================================
== File: src/homepage/_posts/2021-09-21-james-joinsapachecon.markdown
=====================================================
---
layout: post
title:  "Getting Apache James to serve 1M+ digital mailboxes of all Estonian residents "
date:   2021-09-21  00:00:30 +0200
categories: james update
---

The Apache James team is proud to announce that one of our committers, Juhan Aasaru, presents a James
talk at [ApacheCON @home 2021][apacheCON]

Here is the [talk description][desc]:

Every Estonian (e)resident has a digital mailbox that is a secure application for the state and local government bodies 
to contact the resident and vice versa. A year ago our company won the tender to improve this service and to replace 
the legacy systems with something scalable. This is the story of how we started to look out for best technical solutions 
for the problem and found Apache James. How we made a proposition to the government agency responsible for providing this 
mailing service to use Apache James (and Apache Cassandra that powers the system under the hood). How we jumped into the 
Apache James community to understand the product and find a way to solve the requirements that were missing from the 
feature set. How we get tremendous help from the community and how we managed to give something back as well. 

Eventually our story could be a lesson learned for someone who plans to undertake something similar together with tips 
on how to correctly build a system on top of open source and what to avoid.

Most of his working life Juhan has worked as a Java developer and Solutions Architect. He has also been CTO in two 
startup companies. A few years ago he was working on a Fintech startup and contributed to Apache Fineract but recently
 his attention has moved away from Fintech towards Apache James. 

Join him Tuesday, 21th of September in the *highligh* track.

This talk can be seen on [youtube][youtube].

[apacheCON]: https://www.apachecon.com/acah2021/index.html
[desc]: https://www.apachecon.com/acah2021/tracks/highlight.html
[youtube]: https://www.youtube.com/watch?v=uA775icp-kk

=====================================================
== File: src/homepage/_posts/2017-10-02-BlogPostInstallingJames.markdown
=====================================================
---
layout: post
title:  "Blog post: Easy and secure James installation"
date:   2017-10-03 16:13:22 +0200
categories: james update
---

In a recent [blog post], [Thibaut] explains us how to easily set up a James server on a personal domain.

He gives hints about DNS configuration, SSL configuration, James configuration, and SPF configuration. All those
features explained with working examples!

[blog post]: https://medium.com/@thibaut.sautereau/installing-james-3-0-with-spf-verification-421b26b92f11
[Thibaut]: https://github.com/thithib

=====================================================
== File: src/homepage/_posts/2022-10-07-jdkim-0.3.markdown
=====================================================
---
layout: post
title:  "Apache James JDKIM 0.3"
date:   2022-10-07  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.3 release of the JDKIM library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

This release relocates the DKIM mailet into Apache James, upgrades dependencies, and fixed two bugs:

```
Fix FWS is not trimmed correctly
DKIM-38 Support several headers with different cases
```

The Apache James PMC would like to thanks all contributors who made this release possible!

[tracker]: https://james.apache.org/download.cgi#Apache_jDKIM
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2011-10-07-mime4j-0.7.1.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4j 0.7.1 released"
date:   2011-10-07 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 0.7.1 of Apache James Mime4j library


=====================================================
== File: src/homepage/_posts/2010-05-01-mailet-1.0.markdown
=====================================================
---
layout: post
title:  "Apache Mailet Standard 1.0 released"
date:   2010-05-01 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce that the first independent release of
[Apache Mailet Standard][standard]/ - was bundled with James Server 2.3 before -
is now available for [download][download].

[standard]: http://james.apache.org/mailet/standard/
[download]: download.cgi#Apache_JSieve

=====================================================
== File: src/homepage/_posts/2019-03-19-mime4j-0.8.3.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.3"
date:   2019-03-19 08:13:22 +0700
categories: james update
---

James Mime4J 0.8.2 has been released.

This release includes the following changes:

 - MIME4J-270: Using "alternative" as default subtype
 - MIME4J-263: decoding encoded words with empty encoded-text
 - MIME4J-279: Fixed JavaDoc errors to comply with Java8
 - MIME4J-280: Improve exception handling
 - MIME4J-283: DecoderUtil performance fix

The library is available as a maven artifact, for instance for mime4j core:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>apache-mime4j-core</artifactId>
    <version>0.8.3</version>
</dependency>
```

You can also download the release artifacts [here].

[here]: https://downloads.apache.org/james/mime4j/0.8.3/

=====================================================
== File: src/homepage/_posts/2016-05-09-jmap.markdown
=====================================================
---
layout: post
title:  "JMAP implementation"
date:   2016-05-09 16:13:22 +0200
categories: james update
---

We are now supporting all basic operations on mailboxes:

  - creating: through the *setMailboxes* JMAP command
  - reading: through the *getMailboxes* JMAP command
  - updating: through the *setMailboxes* JMAP command
  - deleting: through the *setMailboxes* JMAP command

=====================================================
== File: src/homepage/_posts/2009-01-16-MAILET-2.4.markdown
=====================================================
---
layout: post
title:  "Apache Mailet 2.4 released"
date:   2009-01-16 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce the first independent release of [mailet][Apache Mailet]
(previous versions were released as part of the [server][Apache James Server]). The Mailet API
defines a standard approach to enterprise mail processing.

[server]: http://james.apache.org/server
[mailet]: http://james.apache.org/mailet/api

=====================================================
== File: src/homepage/_posts/2006-10-03-JAMES-2.3.markdown
=====================================================
---
layout: post
title:  "James Server 2.3.0 Final Released"
date:   2006-10-03 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the long awaited final release of James Server 2.3.0.
More information on what's new can be found in the [changelog][changelog] .

[availability]: download.cgi
[changelog]: /server/2.3.0/changelog.html

=====================================================
== File: src/homepage/_posts/2012-01-08-protocols-1.6.1.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.6.1 released"
date:   2012-01-08 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.1
of Apache James Protocols library.

=====================================================
== File: src/homepage/_posts/2019-09-05-james-3.4.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.4.0"
date:   2019-09-05  15:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.4.0 release.

Here are some points we worked on:

### Added
- Add in-memory docker image
- Support of AWS S3 as blobstore
- WebAdmin routes for mapping management (`AddAddressMapping`, `AddRegexMapping`, `ListMappings`), previously only manageable by CLI
- Metrics for Deleted Message Vault
- More metrics for BlobStore (new delete & deleteBucket configuration)

### Changed
- (experimental) New implementation of the deleted message vault on top of an object store, not relying anymore on a 
repository. This avoids exposing messages via webAdmin. Messages previously stored in the vault will be lost.
- Migration to ElasticSearch 6.3
- Blob export to LinShare
- Native DKIM support for outgoing mails. The mailets from james-jdkim have been included in main James project.

### Deprecated
- Zookeeper component. This will be removed after 3.4 release. If you have development skills, and are willing to maintain this component, please reach us.

### Removed
- Karaf OSGi implementation. It was not compiled nor tested for a year. We didn't get any feedback about that and we don't have the resources nor the skills to maintain it any more.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2007-02-04-JSPF-0.9-beta4.markdown
=====================================================
---
layout: post
title:  "jSPF-0.9b4 released"
date:   2007-02-04 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the fourth beta of jspf
0.9. This version pass all tests in the last official release of the [spf testsuite][spf_testsuite] .

[availability]: http://downloads.apache.org/james/jspf/beta
[spf_testsuite]: http://www.openspf.org/svn/project/test-suite/rfc4408-tests-2007.01.yml

=====================================================
== File: src/homepage/_posts/2009-10-17-jdkim.markdown
=====================================================
---
layout: post
title:  "jDKIM joins Apache James as sub-project"
date:   2009-10-17 16:13:22 +0200
categories: james update
---

The Apache James project is pleased to announce the inclusion of a new sub-project called
[jDKIM][jDKIM].

jDKIM is a DomainKeys Identified Mail (DKIM) implementation library written in Java. It provides both verification and
signing and also provides Mailets for the Apache James project.

[jDKIM]: http://james.apache.org/jdkim/

=====================================================
== File: src/homepage/_posts/2007-05-16-mime4j-0.3.markdown
=====================================================
---
layout: post
title:  "Apache Mime4J 0.3 Final Released"
date:   2007-05-16 16:13:22 +0200
categories: james update
---

After almost 2 years the Apache James team is proud to announce the [availability][availability] of Apache Mime4J 0.3.

This is the first release under the ASF umbrella.

[availability]: /download.cgi

=====================================================
== File: src/homepage/_posts/2020-07-16-james-3.5.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.5.0"
date:   2020-07-16  15:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.5.0 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

## Announcements

### Distributed James guice product beta

Furthermore, recent work of the Apache James project did lead to a James product that leverages a distributed mail server,
using storage technologies like [Cassandra], [ElasticSearch], [RabbitMQ], and [objectStorage (S3/Swift)].

Feedback on this product, announced as a beta since 3.5.0 is welcome.

This product can be executed via [docker-compose] or you can follow its [standard installation guide]

### End of support for Java 8

James 3.5.x is the last release line to support Java 8. From 3.6.0 James will run on a Java Runtime Environment 11.

## Release changelog

Here are some points we worked on:

### Added
- Distributed task management for Distributed James product. This enables several James servers to share a consistent view
of tasks being currently executed.
- JAMES-2563 Health check for ElasticSearch
- JAMES-2904 Authentication and SSL support for Cassandra backend
- JAMES-2904 Authentication and SSL support for ElasticSearch backend
- JAMES-3066 Add support alias when sending emails, with a ["allowed From headers" webadmin endpoint](https://github.com/apache/james-project/blob/master/src/site/markdown/server/manage-webadmin.md#retrieving-the-list-of-allowed-from-headers-for-a-given-user)
- JAMES-3062 HealthCheck for EventDeadLetters
- JAMES-3058 WebAdmin offline task to correct mailbox inconsistencies on top of Cassandra products
- JAMES-3105 WebAdmin offline task to recompute mailbox counters on top of Cassandra products
- JAMES-3072 Webadmin endpoint to export mailbox backup

### Changed
- Multiple changes have been made to enhance Distributed James indexing performance:
  - Use of routing keys to collocate documents per mailbox
  - Under some configuration, html was not extracted before document indexing
  - Removed unnecessary fields from mailbox mapping
  - Disable dynamic mapping thanks to a change of the header structure 
- JAMES-2855 Multiple library/plugin/docker images/build tool upgrades
- By default the cassandra keyspace creation by James is now disabled by default. This allow to have credentials limited to a keyspace. It can be enabled by setting cassandra.keyspace.create=true in the cassandra.properties file.

=====================================================
== File: src/homepage/_posts/2011-03-06-jspf-0.9.9.markdown
=====================================================
---
layout: post
title:  "Apache James jSPF 0.9.9"
date:   2011-03-06 16:13:22 +0200
categories: james update
---

The Apache James Project is happy to announce the release of version 0.9.9 of the Apache James jSPF which includes fixes
related to OSGI.

[Read the release notes][notes]

[notes]: https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+JSPF+AND+fixVersion+%3D+%220.9.9%22+AND+status+%3D+Resolved+ORDER+BY+priority+DESC&amp;mode=hide





=====================================================
== File: src/homepage/_posts/2009-03-16-Mime4j-0.6.markdown
=====================================================
---
layout: post
title:  "MailetDocs Maven Plugin 0.1 released"
date:   2009-03-16 16:13:22 +0200
categories: james update
---

We are proud to announce the [availability][availability] of Apache
Mime4j-0.6. This release brings another round of API enhancements and performance
optimizations. There has been a number of notable improvements in the DOM support. MIME
stream parser is expected to be 50% faster when line counting is disabled. Please also note
that as of this release Mime4j requires a Java 1.5 compatible runtime

[availability]: /download.cgi


=====================================================
== File: src/homepage/_posts/2010-05-02-jsieve-0.4.markdown
=====================================================
---
layout: post
title:  "Apache JSieve 0.4 released"
date:   2010-05-02 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce that the forth release of [Apache JSieve][JSieve] -
an implementation of the [Sieve][Sieve] mail filtering language -
is now available for [download][download]

[JSieve]: http://james.apache.org/jsieve
[mailet]: http://james.apache.org/mailet.
[download]: /download.cgi#Apache_JSieve
[notes]: http://james.apache.org/jsieve/0.3/release-notes.html
[Sieve]: http://www.ietf.org/rfc/rfc3028.txt

=====================================================
== File: src/homepage/_posts/2018-06-06-linagora-june-nl.markdown
=====================================================
---
layout: post
title:  "Linagora June newsletter"
date:   2018-06-06 11:30:00 +0700
categories: james update
---

In the name of the James team @Linagora I will be presenting you what we did in the past few weeks, and plan to work on in the coming weeks.

We have to work on some specific features to make James easier to adopt for large organizations.

# What was achieved in May

## Notifications when soon over quota

> A mail needs to be sent to the user to warn him. This is an attempts to allow clients not implementing quota's RFCs to still get the warning.
>
> This is implemented with mailbox listeners (and not mailets), with event sourcing. We added the interfaces and implementations to achieve this feature in James using event sourcing with events being stored in Cassandra or in memory.
> Such a technical solution might be very useful to implement other feature.
>
> This mailbox listener is optional. We allowed one to register his (potentially custom) mailbox listeners when working with Guice.

## Searching user by quota usage

> This would allow an admin to inspect per-user quota usage, via a webadmin interface.
>
> Again, we provided two implementations: a scanning one, which naively enumerates mailboxes to compute occupation, and one where quota occupation is indexed in ElasticSearch.

## Performance enhancements

> In order to have a very good mail search experience, it is possible to plug Apache Tika as a text extractor into James. We use Tika as an external service that we call with HTTP. When you use this Tika extractor with ElasticSearch indexing, you get a very powerful fulltext search even on complex attachment format like LibreOffice documents.
>
> We did experience slow requests with our Tika server. We contributed [this issue] which significantly enhanced Tika server performance, and we introduce a cache on James side to reduce calls to tika.
>
> We also worked on improving massive JMAP operation performance (delete a large number of emails).

# What we will work on in June

## Data Leak Prevention

> We should have a matcher applying rules defined by the admin. This matcher will then store suspicious emails in specific mail repository for an admin review.
>
> To implement this, we need to enhance browsing to MailRepository via WebAdmin. We need to allow storing such rules as well as updating them via webadmin. We need finally a mailet storing emails in a repository given its sender domain.

### Exporting a mail account

> As an administrator, I should be able to export the content of my mail account. This both allows easier migrations, comply with legal requirements as well as allow some forms of backups.
>
> The chosen format is EMLs in a ZIP format, with the folder structure described in archive meta-data, and specific metadata to ease restoring a James account (flags, etc...). An administrator (via webamin) should be able to download/upload such backups in order to do export/restores mail accounts.


=====================================================
== File: src/homepage/_posts/2024-01-08-mime4j-0.8.10.markdown
=====================================================
---
layout: post
title:  "Apache James MIME4J 0.8.10"
date:   2024-01-08  03:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8.10 release of the MIME4J library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

This release fixes `CVE-2024-21742: Mime4J DOM header injection`.

The Apache James PMC would like to thanks all contributors who made this release possible!

[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2007-02-03-feathercast-fetures.markdown
=====================================================
---
layout: post
title:  "Feathercast features James"
date:   2007-02-03 16:13:22 +0200
categories: james update
---

James PMC member and commiter [Danny Angus][link] was interviewed about James by David
Reid for Feathercast episode 24. You can download the podcast from [here][podcast]

[link]: http://people.apache.org/list_A.html
[podcast]: http://feathercast.org/?p=39


=====================================================
== File: src/homepage/_posts/2018-11-14-james-3.2.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.2.0"
date:   2018-11-14 12:13:22 +0700
categories: james update
---

The Apache James developers are pleased to announce James server 3.2.0 release.

Here are some points we worked on:

### Added

- Mail filtering configured via the JMAP protocol
- WebAdmin exposed mail re-indexing tasks
- WebAdmin exposed health checks. This includes:
   - Possibility to perform a single healthcheck, thanks to [mschnitzler](https://github.com/mschnitzler)
   - Cassandra health checks thanks to [matzepan](https://github.com/matzepan)
- IMAP MOVE commend (RFC-6851) On top of JPA. Thanks to [mschnitzler](https://github.com/mschnitzler)
- JPA support for Sieve script storage thanks to [Sebast26](https://github.com/sebast26)
- Sieve script upload via the CLI thanks to [matzepan](https://github.com/matzepan)
- Mailet DOC: Exclude from documentation annotation thanks to [mschnitzler](https://github.com/mschnitzler)
- **cassandra.pooling.max.queue.size** configuration option Thanks to [matzepan](https://github.com/matzepan)
- **RecipentDomainI** and **SenderDomainIs** matchers by [athulyaraj](https://github.com/athulyaraj)

### Changed

- Multiple libraries updates
- Migration from Cassandra 2 to Cassandra 3
- Mail::getSender was deprecated. Mail::getMaybeSender offers better Null Sender support. Java 8 default API method was used to not break compatibility.

### Deprecated

 - HBase and JCR components (mailbox and server/data). This will be removed as part of 3.3.0. If you have development skills, and are willing to maintain these components, please reach us.

### Removed

 - Drop partially implemented Kafka distributed events

### Third party softwares

 - SpamAssassin prior 3.4.2 is subject to multiple CVEs. We recommend the upg

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[Sebast26]: https://github.com/sebast26
[mschnitzler]: https://github.com/mschnitzler
[matzepan]: https://github.com/matzepan

=====================================================
== File: src/homepage/_posts/2010-12-06-protocols-1.2.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.2 released"
date:   2010-11-05 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 3.0-M2 (Milestone 2) of the Apache James server.

M2 is not only a fast corrective release on M1 (issues related to JMX
security configuration on Windows platforms,...), but also contains an important number
of enhancement and JIRA fixes.

For example, memory usage has been reduced thanks to optimizations on
the ActiveMQ component usage (responsible for the mail spooling).

We thank all Users for their feedback and tests and we encourage
anyone to discover this Milestone 2 release.

If you're interested in contributing to the James project, please subscribe to the James
[mailing lists][lists]

[lists]: http://james.apache.org/mail.html


=====================================================
== File: src/homepage/_posts/2010-11-06-james-3.0-M2.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0-M2 released"
date:   2010-12-06 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.2 of
the Apache James Protocols.


=====================================================
== File: src/homepage/_posts/2023-05-17-james-3.8.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.8.0"
date:   2023-05-17  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.8.0 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thank all contributors who made this release possible!

## Announcement

This release brings the following significant changes:

 - Upgrade TCP protocols to Netty 4
 - Migrate IMAP protocol as reactive
 - Multiple additional IMAP extensions are implemented
 - Upgrade to Cassandra driver 4
 - Migrate to OpenSearch
 - Review our threading model to cap threads performing blocking tasks
 - Implement official JMAP quotas specification

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#380---2023-05-17
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2017-10-03-Hacktoberfest.markdown
=====================================================
---
layout: post
title:  "Hacktoberfest: contribute to James"
date:   2017-10-03 16:13:22 +0200
categories: james update
---

The James project joins the [Hactoberfest]!

Retrieve available issues on [GitHub].

![Hacktoberfest logo]({{ "/images/hactoberfest.png" }})

Contributions are diversified and feature some core James components like:

 - Additional mailet/matcher contributions
 - Additional Command Line options
 - Additional WebAdmin functionality
 - JPA Mailbox missing components

[Hactoberfest]: https://hacktoberfest.digitalocean.com/
[GitHub]: https://github.com/linagora/james-project/issues?q=is%3Aissue+is%3Aopen+label%3AHacktoberfest

=====================================================
== File: src/homepage/_posts/2016-07-09-jmap.markdown
=====================================================
---
layout: post
title:  "JMAP implementation"
date:   2016-07-09 16:13:22 +0200
categories: james update
---

Read and Send message with attachments.

You can now send and read messages with attachments through the JMAP commands *setMessages* and *getMessages*.

Those attachments are uploaded via the */upload* and downloaded via the */download* JMAP endpoints.

=====================================================
== File: src/homepage/_posts/2008-10-16-mime4j-0.5.markdown
=====================================================
---
layout: post
title:  "Mime4j 0.5 released"
date:   2008-10-16 16:13:22 +0200
categories: james update
---

we are proud to announce the [availability][availability] of APACHE Mime4j-0.5. This release addresses a number of
important issues discovered since 0.4. In particular, it improves Mime4j ability to deal with malformed data streams
including those intentionally crafted to cause excessive CPU and memory utilization that can lead to DoS condition

This release also fixes a serious bug that can prevent Mime4j from correctly processing binary content

[availability]: /download.cgi


=====================================================
== File: src/homepage/_posts/2022-10-06-james-3.7.2.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.2"
date:   2022-10-06  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.2 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

This release proposes stability related bug fixes and updates some dependencies for security reasons.

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#372---2022-10-06
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2007-04-04-james-commiters-guidelines.markdown
=====================================================
---
layout: post
title:  "Apache James Project Guidelines published"
date:   2007-04-04 16:13:22 +0200
categories: james update
---

The James PMC has approved - for the first time - a set of [guidelines]: guidelines.html for the project. These guidelines
are intended to reflect and summarize well-known practices in our community. They include "... definitions of how conflict
is resolved by voting, who is able to vote, and the procedures to follow for proposing and making changes to the Apache
James products.



=====================================================
== File: src/homepage/_posts/2022-12-30-james-3.7.3.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.3"
date:   2022-12-30  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.3 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

This release fixes CVE-2022-45935: Temporary File Information Disclosure in Apache JAMES.

This release proposes stability related bug fixes and updates some dependencies for security reasons.

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#373---2022-12-30
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2009-02-16-MAILET-docs-plugin-0.1.markdown
=====================================================
---
layout: post
title:  "MailetDocs Maven Plugin 0.1 released"
date:   2009-02-16 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce the first release of the
[MailetDocs]: http://james.apache.org/mailet/maven-mailetdocs-plugin/ plugin for [Maven][Maven].
The plugin catalogs mailet (for [example][example]).

For more information, see the [release notes][notes].

[Maven]: http://maven.apache.org
[example]: http://james.apache.org/mailet/standard/mailet-report.html
[notes]: http://james.apache.org/mailet/maven-mailetdocs-plugin/release-notes.html

=====================================================
== File: src/homepage/_posts/2015-09-08-james-2.3.1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 2.3.2.1 released"
date:   2015-09-08 16:13:22 +0200
categories: james update
---

This release fixes a security vulnerability - Users are invited to upgrade (read
[annouce on the Apache James blog][blog]).

[blog]: https://blogs.apache.org/james/entry/apache_james_server_2_3

=====================================================
== File: src/homepage/_posts/2020-10-29-testing-james-with-jmeter.markdown
=====================================================
---
layout: post
title:  "Performance testing for James with JMeter"
date:   2020-10-29  15:16:30 +0200
categories: community
---

Ever wanted to figure out what Apache James gets in its guts?

Xian Long detailed in this [blog post][post] how to be using JMeter in order to run some
IMAP performance tests on top of the distributed server, using [JMeter][jmeter]

[Other tools][james-gatling], based on [Gatling][gatling] had been developed within the community, addressing SMTP,
IMAP and [JMAP][JMAP] protocols.

[post]: https://www.cnblogs.com/hanxianlong/p/13894595.html
[jmeter]: https://jmeter.apache.org/
[gatling]: https://gatling.io/
[JMAP]: https://jmap.io/
[james-gatling]: https://github.com/linagora/james-gatling

=====================================================
== File: src/homepage/_posts/2009-06-17-jspf-0.9.7.markdown
=====================================================
---
layout: post
title:  "Apache jSPF 0.9.7 released"
date:   2009-06-17 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce a new [Apache jSPF][jSPF] release which included
some critical bug fixes.

[jSPF]: http://james.apache.org/jspf

=====================================================
== File: src/homepage/_posts/2010-09-04-imap-0.2-M1.markdown
=====================================================
---
layout: post
title:  "Apache IMAP 0.2-M1 released"
date:   2010-09-04 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce a new
[Apache IMAP][imap] release in preparation of
the upcoming 3.0-M1 [Apache Mail server][imap]

[imap]: http://james.apache.org/imap

=====================================================
== File: src/homepage/_posts/2023-03-20-james-3.7.4.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.4"
date:   2023-03-20  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.4 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

This release comprise minor bug fixes enhancing Apache James stability.

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#374---2023-03-20
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2009-08-17-james-2.3.2.markdown
=====================================================
---
layout: post
title:  "Apache James 2.3.2 Released"
date:   2009-08-17 16:13:22 +0200
categories: james update
---

The Apache James project is pleased to announce that Apache James 2.3.2 is now
[available][available].

This is a minor bug fix release.

See the [Release Notes][notes]
for more details. Upgrading is recommended for users of previous 2.x releases.

[notes]: http://james.apache.org/server/2.3.2/release-notes.html
[available]: /download.cgi#Apache_James_2.3.2_is_the_stable_version

=====================================================
== File: src/homepage/_posts/2018-01-26-admin-features.markdown
=====================================================
---
layout: post
title:  "New administration features: manage your queues and your reporitories"
date:   2018-01-26 00:00:22 +0200
categories: james update
---

An often asked feature for James is the ability to handle the mails, that after some processing,
have landed in a [repository], for example /var/mail/error/.

A brand new webadmin API allows you to handle the content of these repositories, see the documentation in [manage-webadmin].
It allows you to list the repositories, their content, but also to reprocess one or several mails in the processor and queue
of your choice.

Oh! And bonus, now you can forget this non scalable file repository and use the brand new Cassandra repository!

On the same documentation page you will also find the new mail queue management API, done to list queued mails, remove some
of them regarding different criteria, but also flush delayed mails.

Most of the work on these already usable features is done, but we still have some ideas for related improvements. [Contributions] are welcomed!

[repository]: http://james.apache.org/server/feature-persistence.html
[Contributions]: https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20in%20(feature)%20AND%20component%20%20in%20(Queue%2C%20%22MailStore%20%26%20MailRepository%22)%20AND%20type%20in%20(Improvement)
[manage-webadmin]: https://james.apache.org/server/manage-webadmin.html

=====================================================
== File: src/homepage/_posts/2011-04-06-mime4J-0.7.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.7"
date:   2011-04-06 16:13:22 +0200
categories: james update
---


The Apache James Project is happy to announce
the release of version 0.7 of the Apache James Mime4J.

Mime4J is a flexible MIME parsing library written in Java. SAX, DOM and pull parsing styles are
 supported.

The 0.7 release brings another round of API enhancements, bug fixes and performance optimizations.
 A major effort has been put in code reorganization, separating parsing code from DOM manipulation
 code. Mime4J has been restructured into three separate modules: 'core', 'dom' and 'storage'.
 The 'core' package provides an event-driven SAX style parser that relies on a callback mechanism
 to report parsing events such as the start of an entity header the start of a body, etc.
 The 'dom' package contains base/abstract classes and interfaces for MIME-DOM manipulation aiming
 to provide the base for a full featured traversable DOM. Per default the Mime4J DOM builder stores
 content of individual body parts in memory. The 'storage' package provides support for more
 complex storage backends such on-disk storage systems, overflow on max limit, or encrypted storage
 through JSSE API.

  Mime4J 0.7 improves support for headless messages, malformed separation between headers and body
 and adds support for "obsolete" rfc822 syntax (e.g: "Header<somespace>: " style). Parsing
 performance for quoted printable streams have been considerably improved. A "DecodeMonitor" object
 has been introduced in most code to define how to deal with malformed input (Lenient vs Strict
 behaviours). Mime4J 0.7 also provides LenientFieldParser as an alternative to DefaultFieldParser
 when a higher degree of tolerance to non-severe MIME field format violations is desired.

[Read the release notes][notes]

[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310521&amp;version=12313592


=====================================================
== File: src/homepage/_posts/2017-07-20-james-3.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0.0"
date:   2017-07-20 16:13:22 +0200
categories: james update
---

James server 3.0.0 has been released !

You are welcome to [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2017-05-16-mime4j-0.8.1.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.1"
date:   2017-06-16 11:30:00 +0700
categories: james update
---

James Mime4J 0.8.1 has been released.

The library is available as a maven artifact, for instance for mime4j core:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>apache-mime4j-core</artifactId>
    <version>0.8.1</version>
</dependency>
```

This release solves issues with header Date handling in the dom project:

 - It was not possible to know if the Date header was set as a default value was always provided
 - Valid dates missing century was badly parsed.

=====================================================
== File: src/homepage/_posts/2008-08-17-JSIEVE-0.2.markdown
=====================================================
---
layout: post
title:  "Apache JSieve 0.2 released"
date:   2008-08-17 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce the first public release of
[jsieve][Apache JSieve] an implementation of [RFC3028][RFC3028 - Sieve: A Mail Filtering Language]
for Java.

[jsieve]: http://james.apache.org/jsieve
[RFC3028]: http://www.faqs.org/rfcs/rfc3028.html

=====================================================
== File: src/homepage/_posts/2010-11-05-james-3.0-M1.markdown
=====================================================
---
layout: post
title:  "Apache IMAP 0.2-M1 released"
date:   2010-11-05 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce
the release of version 3.0-M1 (Milestone 1) of the Apache James server.

The Apache James Server is a 100% pure Java enterprise mail server based on open protocols.
Currently supported are SMTP/LMTP, POP3, IMAP4 protocols together with several different
storage solutions (relational database via JPA and JDBC, File system with MailDir, JCR Content Repsitory).

The James server also serves as a mail application platform. It hosts the Apache Mailet API,
and acts has a Mailet container. This feature makes it easy to design, write, and deploy custom applications for
mail processing. This modularity and ease of customization is one of James' strengths, and can allow administrators to
produce powerful applications surprisingly easily.

Features for that version include enhancements to nearly every area of functionality,
including full IMAP support, improved mailing list capabilities, fastfail support, SMTP API
for developing own fastfail filters and the next revision of the Mailet API.

This was an exciting time in James development and we thank all contributors.

We are still actively looking for eager, capable developers to contribute to James.
If you're interesting in contributing to the James project, please subscribe to the James
[mailing lists]: http://james.apache.org/mail.html.

Information about James can be found at the James web site
at [http://james.apache.org/][web].

[web]: http://james.apache.org/


=====================================================
== File: src/homepage/_posts/2021-04-21-mime4j-0.8.4.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.4"
date:   2021-04-21  13:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce Apache James Mime4J 0.8.4.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The changelog for this release can be seen [here][changelog]

[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md

=====================================================
== File: src/homepage/_posts/2022-12-30-mime4j-0.8.9.markdown
=====================================================
---
layout: post
title:  "Apache James MIME4J 0.8.9"
date:   2022-12-30  03:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8.9 release of the MIME4J library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

The Apache James PMC would like to thanks all contributors who made this release possible!

[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2011-08-06-james-beta3.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0-beta3 released"
date:   2011-08-06 16:13:22 +0200
categories: james update
---

The Apache James project is happy to announce the release of version 3.0-beta3 of its modular mail server.

We thank all Users for their feedback and tests and we encourage anyone to
[download][download] and discover this Milestone 3 release.

If you're interested in contributing to the James project, please subscribe to the James
[mailing lists][lists]


What's new in 3.0-beta3 for end users:

  - Numerous IMAP bug fixes (better client support, memory improvement, NIO and IO support...)
  - Support for IMAP IDLE (RFC 2177, server transmit updates to the client in real time)
  - Support for IMAP User Flags
  - Support for IMAP WITHIN Extensions (RFC 5032)
  - Mailbox Tooling to copy from a persistence implementation to another implementation
  - Telnet Management has been removed in favor of JMX with client shell
  - More metrics counters available via JMX
  - Better debug logging on protocols
  - JPA validated against more databases (among others Oracle)
  - Multiple address and port configurations per protocol
  - POP3 is now operational (was buggy in 3.0-M2)
  - Upgrade tool from James 2.3 is available
  - Better logging on protocols with adjustable level
  - Full mailet package must be specified
  - Composite Matchers
  - Better debug logging on protocols
  - Mailing list functionality has been removed
  - More documentation on web site for configuration,...
  - Java 1.6 mandatory
  - ... and much more, see details on https://issues.apache.org/jira/secure/ReleaseNote.jspa?in&amp;version=12316850&amp;styleName=Html&amp;projectId=10411

What's new in 3.0-beta3 for developers:

  - Less maven modules
  - Maven 3.0.2 required to build
  - Upgrade to latest frameworks versions (netty, activemq, jackrabbit...)
  - Code reports generation via 'mvn site -P site-reports' maven profile
  - Corrections further to findbugs,... reports
  - Code formatting
  - ... and much more, see details on https://issues.apache.org/jira/secure/ReleaseNote.jspa?in&amp;version=12316850&amp;styleName=Html&amp;projectId=10411

[Quick Start][quick]

=====================================================
== File: src/homepage/_posts/2018-02-12-gsoc-2018.markdown
=====================================================
---
layout: post
title:  "Apache JAMES joins Google Summer of code 2018 !"
date:   2018-02-1 00:00:22 +0200
categories: announcements
---

This year, James developers will propose ideas of Google Summer of Code projects for students.

[Google Summer of Code] is a global program focused on bringing more student developers into open source software development.
Students work with an open source organization on a 3 month programming project during their break from school.

![Google Summer of code communication image]({{ "/assets/images/gsoc.png" }})

We consider it is a dreamed occasion to discover the Apache James project, and get on board in this amazing project!

We are willing to offer high quality mentoring on high added value, useful tasks. As a student:

 - 	??  You will discover how Open Source world works. You will exchange with our community.
 - 	??  You will be advised by experienced, long term committers.
 - 	??  You will build technical experience on a mail server.
 - 	??  And hopefully you will get some code contributions on an Apache project.

Here are some ideas of applications:

 - ⚒ [JAMES-1931] We are in need of a WebAdmin User Interface to ease our beloved administrator API. You will need to build an administration website on top of the **webAdmin** REST API.

 - ⚒ [JAMES-1932] James allow to fully customize mail processing. But we miss tools to ease edition and testing of the processing flow.

 - ⚒ [JAMES-1933] Emails need to be secure. Many protocols like DKIM, SPF and DMARC allow to meet this purpose. However we need more documentation and a DMARC implementation.

 - ⚒ [JAMES-2335] James should be a flexible server. We should be able to use custom configuration providers, not only XML files as of today. That is a move toward "clustering done the right way".

Of course, we are very open if you want to propose other ideas to us! Come and discuss this on [our gitter channel] or on the issues directly.

Thank you by advance for your involvement and hope to see you around!

[Google Summer of Code]: https://summerofcode.withgoogle.com/
[JAMES-1931]: https://issues.apache.org/jira/browse/JAMES-1931
[JAMES-1932]: https://issues.apache.org/jira/browse/JAMES-1932
[JAMES-1933]: https://issues.apache.org/jira/browse/JAMES-1933
[JAMES-2335]: https://issues.apache.org/jira/browse/JAMES-2335
[our gitter channel]: https://gitter.im/apache/james-project

=====================================================
== File: src/homepage/_posts/2021-09-26-mime4j-0.8.6.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.6"
date:   2021-09-26  13:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce Apache James Mime4J 0.8.6

This release mostly enhances performances:

 - MIME4J-306 MimeUtil::unfold should group char appends (#52)
 - MIME4J-305 ContentUtil::decode can avoid using StringBuilder (#51)
 - MIME4J-304 DecoderUtil::decodeEncodedWords without REGEXP (#50)

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The changelog for this release can be seen [here][changelog]

[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md

=====================================================
== File: src/homepage/_posts/2016-07-19-jmap.markdown
=====================================================
---
layout: post
title:  "JMAP implementation"
date:   2016-07-19 16:13:22 +0200
categories: james update
---

Full text search via JMAP.

Full text search via the *getMessageList* JMAP command is now supported.

The JMAP search **filtering** parameter is converted to an internal *SearchQuery*; then this query is processed by your
binded search backend.



=====================================================
== File: src/homepage/_posts/2008-03-16-gsoc-2008.markdown
=====================================================
---
layout: post
title:  "James publishes project ideas for Google Summer of Code '08"
date:   2008-03-16 16:13:22 +0200
categories: james update
---

The James Team are delighted to announce that we're proposing two project ideas for
[Google Summer of Code (GSOC) 2008][gsoc]. The project Ideas are set out on the Apache GSOC
wiki [here]: http://wiki.apache.org/general/SummerOfCode2008#james .

In brief they are:

 - Develop a VERP Mailet to allow James to write VERP modified return addresses on outbound messages, and an inbound mailet/matcher
 to identify VERP bounces and invoke configurable "do something" code.
 - James' provided mailing list manager is fine for small closed groups, but lacks the functionality of a more robust MLM,
 the project is to add some all or more of the following features subscriber and message moderation, double opt-in and bounce handling.

[gsoc]: : http://code.google.com/soc/2008/


=====================================================
== File: src/homepage/_posts/2019-11-19-apache-con-eu.markdown
=====================================================
---
layout: post
title:  "Benoit Tellier presents James at ApacheCon Europe"
date:   2019-11-19  16:16:30 +0200
categories: james apachecon
---

Benoit had the pleasure to present James at the ApacheCon at Berlin: "Gaining control over emails with Apache James".

If you missed him you can see his conference on [youtube][Youtube], or read his [article][article].

[youtube]: https://www.youtube.com/watch?v=zr8qpNkL6U4
[article]: https://medium.com/linagora-engineering/linagora-representing-james-at-the-apachecon-europe-2019-c6e28b31242a

=====================================================
== File: src/homepage/_posts/2011-05-06-jdKim0.2.markdown
=====================================================
---
layout: post
title:  "Apache James jDKIM 0.2"
date:   2011-05-06 16:13:22 +0200
categories: james update
---

The Apache James Project is happy to announce
the release of version 0.2 of the Apache James jDKIM library.

jDKIM is a DKIM implementation library written in Java. It provides
both verification and signing and also provides Mailets for the
Apache JAMES project.

This is the first official release of the library, but the code has
been in production almost unchanged since two years.

[Read the release notes][notes]

[notes]: https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310990&amp;version=12314300




=====================================================
== File: src/homepage/_posts/2009-09-17-hupa.markdown
=====================================================
---
layout: post
title:  "Hupa joins Apache James as sub-project"
date:   2009-09-17 16:13:22 +0200
categories: james update
---

The Apache James project is pleased to announce the inclusion of a new sub-project called
[Hupa][Hupa].

Hupa is a GWT based webmail which use IMAP to connect to the backend mailserver.

[Hupa]: http://james.apache.org/hupa/

=====================================================
== File: src/homepage/_posts/2010-06-03-jspf-0.9.8.markdown
=====================================================
---
layout: post
title:  "Apache jSPF 0.9.8 released"
date:   2010-06-03 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce a new [Apache jSPF][jSPF] release which includes
fixed to TXT record escaping and pass the rfc4408-tests-2009.10 testsuite.

[jSPF]: http://james.apache.org/jspf

=====================================================
== File: src/homepage/_posts/2022-10-28-mime4j-0.8.8.markdown
=====================================================
---
layout: post
title:  "Apache James MIME4J 0.8.8"
date:   2022-10-28  03:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8.8 release of the MIME4J library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

The Apache James PMC would like to thanks all contributors who made this release possible!

[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2010-09-03-protocols-1.2-M2.markdown
=====================================================
---
layout: post
title:  "Apache protocols 1.2-M1 released"
date:   2010-09-03 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce a new Apache protocols release in preparation of the upcoming 3.0-M1
[Apache Mail server][imap].

[imap]: http://james.apache.org/imap

=====================================================
== File: src/homepage/_posts/2021-03-16-james-3.6.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.6.0"
date:   2021-03-16  15:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.6.0 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

## Announcements

### Experimental support for JMAP RFC-8621 and deprecation of JMAP Draft

Since the last release we worked hard refreshing our JMAP implementation, implementing both [JMAP core][jmap-core],
[JMAP mail][jmap-mail] and the [JMAP over WebSocket][jmap-ws] specifications. Their support is considered experimental and
early adopters' feedback is highly welcomed.

[JMAP Draft][jmap-draft] should be considered legacy, and will be removed in upcoming 3.7.0 release.

### Switch to Java 11 for build and run

We adopted Java Runtime Environment 11 from James release 3.6.0. James 3.5.0 is the last version offering Java Runtime
Environment 8 support.

## Release changelog

Here are some points we worked on:

### Added
- JAMES-2884 Partial Support for JMAP RFC-8621: The current implementation status allow reading mailboxes, emails, vacation responses.
  - JAMES-3457 Implement JMAP eventSource 
  - JAMES-3491 JMAP over websocket (RFC-8887)
  - JAMES-3470 JMAP RFC-8621 Email/changes + Mailbox/changes support
- JAMES-3117 Add PeriodicalHealthChecks for periodical calling all health checks
- JAMES-3143 WebAdmin endpoint to solve Cassandra message inconsistencies
- JAMES-3138 Webadmin endpoint to recompute users current quotas on top of Guice products
- JAMES-3296 Webadmin endpoint to rebuild RabbitMQMailQueue in the Distributed Server
- JAMES-3266 Offer an option to disable ElasticSearch in Distributed James product
- JAMES-3202 Reindex only outdated documents with the Mode option set to CORRECT in reindexing tasks
- JAMES-3405 Expose metrics of Guice servers over HTTP - enables easy Prometheus metrics collection
- JAMES-3407 Distributed server: Read-repairs for the mailbox entity
- JAMES-3428 Distributed server: Read-repairs for the mailbox counters entity
- JAMES-3139 Expose RabbitMQ channel & connection configuration
- JAMES-3441 Make possible and document Distributed Server setup with specialized instances
- JAMES-3337 Document the use of JWT
- JAMES-3399 Allow JSON logging with logback - enables structure logging with FluentBit
- JAMES-3396 WebAdmin should try to prevent RRT addresses redirection loops when possible
- JAMES-3402 JMAP MDN messages should have a Date header

=====================================================
== File: src/homepage/_posts/2016-09-19-james-3.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0"
date:   2016-09-19 16:13:22 +0200
categories: james update
---

We are currently working on the release.

Keep an eye on the [news][news], we are planning to release the next version in November.

[news]: http://james.apache.org/newsarchive.html

=====================================================
== File: src/homepage/_posts/2022-04-01-mime4j-0.8.7.markdown
=====================================================
---
layout: post
title:  "Apache James MIME4J 0.8.7"
date:   2022-04-01  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8.7 release of the MIME4J library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

The Apache James PMC would like to thanks all contributors who made this release possible!

[CHANGELOG]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md#087---2022-04-01
[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: https://james.apache.org/download.cgi#Apache_Mime4J

=====================================================
== File: src/homepage/_posts/2022-10-28-jsieve-0.8.markdown
=====================================================
---
layout: post
title:  "Apache James JSieve 0.8"
date:   2022-10-28  02:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce the 0.8 release of the JSieve library.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

This release targets JDK 8, update dependencies, and also brings a couple bug fixes. See the [release notes][notes].

The Apache James PMC would like to thanks all contributors who made this release possible!

[notes]: https://github.com/apache/james-jsieve/blob/master/RELEASE_NOTES.txt
[tracker]: https://issues.apache.org/jira/projects/JSIEVE/issues
[download]: https://james.apache.org/download.cgi#Apache_JSieve

=====================================================
== File: src/homepage/_posts/2009-04-16-Mailet-base-0.1.markdown
=====================================================
---
layout: post
title:  "Apache Mailet Base 1.0 released"
date:   2009-04-16 16:13:22 +0200
categories: james update
---

The Apache James Project is pleased to announce the first independent release of
[Apache Mailet Base][base] (previous versions
were released as part of the
[Apache James Server][server]). The Basic Mailet Toolkit
contains lightweight frameworks and utilities likely to be of interest to
[Mailet][mailet] developers.

[base]: http://james.apache.org/mailet/base
[server]: http://james.apache.org/server
[mailet]: http://james.apache.org/mailet/api

=====================================================
== File: src/homepage/_posts/2018-07-31-james-3.1.0.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.1.0"
date:   2018-07-31 16:13:22 +0200
categories: james update
---

James server 3.1.0 has been releases.

Here are some points we worked on:

### Added

- Introduce an object store
- Configurable listeners
- MDN (Message Disposition notification) parsing and handling
- SpamAssassin support with per user reports
- Search in attachments
- Data Leak Prevention
- JPA SMTP Guice product
- Cassandra migration process
- Structured logging
- RPM packaging (in addition to deb packaging)
- Delegating folders

### Changed

- Move to Java 8
- Improve Mail Repositories handling, including a nice web API
- Improve Mail Queues handling, including a nice web API
- Improve RRT (Recipient Rewrite Table) implementation
- Quota handling improvements, and in particular users can receive an email when they are near the limit of their quota
- Many performances enhancement, in particular on Cassandra backend
- Documentation updates

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2006-08-02-james-website-updates.markdown
=====================================================
---
layout: post
title:  "James Products website revamped<"
date:   2006-08-02 16:13:22 +0200
categories: james update
---

We just finished a major update of james products to be able to publish each product specific site under this new website structure

=====================================================
== File: src/homepage/_posts/2008-08-16-mime4j-0.4.markdown
=====================================================
---
layout: post
title:  "Mime4j 0.4 released"
date:   2008-08-16 16:13:22 +0200
categories: james update
---

We are proud to announce the [availability][availability] of APACHE Mime4j-0.4. This release brings a number of
significant improvements in terms of supported capabilities, flexibility and performance:

  - Revised and improved public API with support for pull parsing
  - Support for parsing of 'headless' messages transmitted using non SMTP transports such as HTTP
  - Reduced external dependencies. Mime4j is no longer directly dependent on log4j and commons-io
  - Improved parsing performance (up to 10x for large messages)
  - More comprehensive header parsing including support for RFC1864, RFC2045, RFC2183, RFC2557 and RFC3066
  - Revised packaging and exception hierarchy. MimeException now extends IOException

[availability]: /download.cgi

=====================================================
== File: src/homepage/_posts/2012-06-08-hupa-0.2.markdown
=====================================================
---
layout: post
title:  "Apache Hupa 0.0.2 released"
date:   2012-06-08 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server Project is happy to announce the release of version 0.0.2 of Apache Hupa, the
James rich webmail client.

=====================================================
== File: src/homepage/_posts/2024-01-09-james-3.7.5.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.7.5"
date:   2024-01-09  01:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.7.5 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thanks all contributors who made this release possible!

## Announcement

This release comprise minor bug fixes enhancing Apache James stability.

This release fixes the following security issues:

 - **CVE-2023-51747**: SMTP smuggling in Apache James
 - **CVE-2023-51518**: Privilege escalation via JMX pre-authentication deserialisation

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#375---2024-01-09
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2016-02-09-jmap.markdown
=====================================================
---
layout: post
title:  "JMAP implementation"
date:   2016-02-09 16:13:22 +0200
categories: james update
---

We are actively working on implementing JMAP protocol into James.

[JMAP][JMAP] is a transport-agnostic, stateless JSON-based API for synchronising a mail client with a mail server.

It allows to develop easily a mail client in a browser, without the pain of using a server to proxy IMAP commands.

Feel free to help us, you can see our advancement on the specification implementation into [jmap/doc][doc]

[JMAP]: http://jmap.io
[doc]: https://github.com/apache/james-project/tree/3.3.x/server/protocols/jmap/doc/specs

=====================================================
== File: src/homepage/_posts/2024-01-09-james-3.8.1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.8.1"
date:   2024-01-09  02:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce James server 3.8.1 release.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The Apache James PMC would like to thank all contributors who made this release possible!

## Announcement

This release comprise minor bug fixes enhancing Apache James stability.

This release fixes the following security issues:

 - **CVE-2023-51747**: SMTP smuggling in Apache James
 - **CVE-2023-51518**: Privilege escalation via JMX pre-authentication deserialisation

## Release changelog

The full changes included in this release can be seen in the [CHANGELOG][CHANGELOG].

[CHANGELOG]: https://github.com/apache/james-project/blob/master/CHANGELOG.md#381---2024-01-09
[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2012-01-07-protocols-1.6.0.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.6.0 released"
date:   2012-01-07 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6.0
of Apache James Protocols library.

=====================================================
== File: src/homepage/_posts/2021-07-02-mime4j-0.8.5.markdown
=====================================================
---
layout: post
title:  "Apache James Mime4J 0.8.5"
date:   2021-07-02  13:16:30 +0200
categories: james update
---

The Apache James developers are pleased to announce Apache James Mime4J 0.8.5.

This release mostly enhances performances (dates, base64 encoding, case 
sensitivity management, ...)

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

The changelog for this release can be seen [here][changelog]

[tracker]: https://issues.apache.org/jira/browse/MIME4J
[download]: http://james.apache.org/download.cgi#Apache_James_Server
[changelog]: https://github.com/apache/james-mime4j/blob/master/CHANGELOG.md

=====================================================
== File: src/homepage/_posts/2006-08-03-2.3.0-RC3.markdown
=====================================================
---
layout: post
title:  "James Server 2.3.0 RC3 Released"
date:   2006-08-02 16:13:22 +0200
categories: james update
---

James PMC is proud to announce the [availability][availability] of the third, and hopefully
last, release candidate of James Server 2.3.0. More information on what's new can be found in the [changelog]: /server/2.3.0/changelog.html.

New development roadmaps are being discussed right now, so stay tuned for 2.3.0 final and for the following news.

[availability]: http://downloads.apache.org/james/server/

=====================================================
== File: src/homepage/_posts/2011-10-06-protocols-1.6-beta2.markdown
=====================================================
---
layout: post
title:  "Apache James Protocols 1.6-beta1 released"
date:   2011-10-06 16:13:22 +0200
categories: james update
---

The Java Apache Mail Enterprise Server (a.k.a. Apache James) Project is happy to announce the release of version 1.6-beta1 of Apache James Protocols library.




=====================================================
== File: src/homepage/_posts/2017-10-20-james-3.0.1.markdown
=====================================================
---
layout: post
title:  "Security release: Apache James server 3.0.1"
date:   2017-10-20 00:00:22 +0200
categories: james update
---

The Apache James PMCs are glad to announce you the release
version 3.0.1 of Apache James server.

It fixes vulnerability described in CVE-2017-12628. The JMX server, also
used by the command line client is exposed to a java de-serialization
issue, and thus can be used to execute arbitrary commands. As James
exposes JMX socket by default only on local-host, this vulnerability can
only be used for privilege escalation.

Release 3.0.1 upgrades the incriminated library.

Note that you can take additional defensive steps in order to mitigate this vulnerability:

 - Ensure that you restrict the access to JMX only on local-host
 - Ensure that you are using a recent Java Run-time Environment. For instance OpenJDK 8 u111 is vulnerable but OpenJDK 8 u 141 is not.
 - You can additionally run James in a container to limit damages of potential exploits
 - And of course upgrade to the newest 3.0.1 version.

Read more about Java deserialization [issues].

[issues]: https://www.sourceclear.com/blog/Commons-Collections-Deserialization-Vulnerability-Research-Findings/

=====================================================
== File: src/homepage/_posts/2017-05-16-james-3.0.0-rc1.markdown
=====================================================
---
layout: post
title:  "Apache James Server 3.0-RC1"
date:   2017-05-16 09:14:00 +0200
categories: james update
---

James server 3.0.0-RC1 has been released.

Early adopters can [download it][download], any issue can be reported on our issue [tracker][tracker].

[tracker]: https://issues.apache.org/jira/browse/JAMES
[download]: http://james.apache.org/download.cgi#Apache_James_Server

=====================================================
== File: src/homepage/_posts/2008-04-16-jspf-0.9.6.markdown
=====================================================
---
layout: post
title:  "jSPF-0.9.6 released"
date:   2008-04-16 16:13:22 +0200
categories: james update
---

We are proud to announce the [availability][availability] release of APACHE jSPF-0.9.6. This release fix two possible
 NullPointerExceptions and handle the "exp=" modifier correctly.

[availability]: /download.cgi

=====================================================
== File: src/homepage/_posts/2012-12-08-mailet-2.5.0.markdown
=====================================================
---
layout: post
title:  "Apache James Mailet 2.5.0 Released"
date:   2012-12-08 16:13:22 +0200
categories: james update
---

Apache Mailet 2.5.0 released.

This release brings all components under the same project so future releases will be made with
all of them. All Mailet artifact have the same version, names that start with apache-mailet-*
and are OSGi bundles.

=====================================================
== File: src/homepage/_posts/2006-07-02-2.3.0on-the-way.markdown
=====================================================
---
layout: post
title:  "James Server 2.3.0 on the way"
date:   2006-07-02 16:13:22 +0200
categories: james update
---

After a long time of development we have released the first [release candidate][rc]
 of James Server 2.3.0. After a period of user testing version 2.3.0 will be released.

[rc]: http://downloads.apache.org/james/server/

=====================================================
== File: src/homepage/_config.yml
=====================================================
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# which you are expected to set up once and rarely edit after that. If you find
# yourself editing these this file very often, consider using Jekyll's data files
# feature for the data you need to update frequently.
#
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'jekyll serve'. If you change this file, please restart the server process.

# Site settings
# These are used to personalize your new site. If you look in the HTML files,
# you will see them accessed via {{ site.title }}, {{ site.email }}, and so on.
# You can create any custom variable you would like, and they will be accessible
# in the templates via {{ site.myvariable }}.
title: James Website
email: btellier@apache.org
description: > # this means to ignore newlines until "baseurl:"
  Write an awesome description for your new site here. You can edit this
  line in _config.yml. It will appear in your document head meta (for
  Google search results) and in your feed.xml site description.
baseurl: "" # the subpath of your site, e.g. /blog
url: "http://james.apache.org" # the base hostname & protocol for your site
twitter_username: ApacheJames
github_username:  apache

# Build settings
markdown: kramdown
theme: minima

# Plugins
gems: []

=====================================================
== File: src/homepage/assets/css/font-awesome.min.css
=====================================================
/*!
 *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */@font-face{font-family:'FontAwesome';src:url('../../assets/fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../../assets/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../../assets/fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../../assets/fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../../assets/fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../../assets/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}

=====================================================
== File: src/homepage/assets/css/main.css
=====================================================
@import url(font-awesome.min.css);
@import "https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400";
@import url('https://fonts.googleapis.com/css?family=Poppins');

/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Reset */

	html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
		margin: 0;
		padding: 0;
		border: 0;
		font-size: 12pt;
		font-family: "Poppins", Helvetica, sans-serif;
		vertical-align: baseline;
	}

	article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
		display: block;
	}

	body {
		line-height: 1;
	}

	ol, ul {
		list-style: none;
	}

	blockquote, q {
		quotes: none;
	}

	blockquote:before, blockquote:after, q:before, q:after {
		content: '';
		content: none;
	}

	table {
		border-collapse: collapse;
		border-spacing: 0;
	}

	body {
		-webkit-text-size-adjust: none;
	}

=====================================================
== File: src/homepage/assets/css/lity.min.css
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */.lity{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;white-space:nowrap;background:#0b0b0b;background:rgba(0,0,0,0.9);outline:none !important;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity.lity-opened{opacity:1}.lity.lity-closed{opacity:0}.lity *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lity-wrap{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;outline:none !important}.lity-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-0.25em}.lity-loader{z-index:9991;color:#fff;position:absolute;top:50%;margin-top:-0.8em;width:100%;text-align:center;font-size:14px;font-family:Arial,Helvetica,sans-serif;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity-loading .lity-loader{opacity:1}.lity-container{z-index:9992;position:relative;text-align:left;vertical-align:middle;display:inline-block;white-space:normal;max-width:100%;max-height:100%;outline:none !important}.lity-content{z-index:9993;width:100%;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;-o-transition:-o-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease, -webkit-transform .3s ease, -o-transform .3s ease}.lity-loading .lity-content,.lity-closed .lity-content{-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.lity-content:after{content:'';position:absolute;left:0;top:0;bottom:0;display:block;right:0;width:auto;height:auto;z-index:-1;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6)}.lity-close{z-index:9994;width:35px;height:35px;position:fixed;right:0;top:0;-webkit-appearance:none;cursor:pointer;text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close::-moz-focus-inner{border:0;padding:0}.lity-close:hover,.lity-close:focus,.lity-close:active,.lity-close:visited{text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close:active{top:1px}.lity-image img{max-width:100%;display:block;line-height:0;border:0}.lity-iframe .lity-container,.lity-youtube .lity-container,.lity-vimeo .lity-container,.lity-facebookvideo .lity-container,.lity-googlemaps .lity-container{width:100%;max-width:964px}.lity-iframe-container{width:100%;height:0;padding-top:56.25%;overflow:auto;pointer-events:auto;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-overflow-scrolling:touch}.lity-iframe-container iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}.lity-hide{display:none}

=====================================================
== File: src/homepage/assets/css/ie8.css
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Type */

	body {
		color: #ffffff;
	}

/* Button */

	.button {
		position: relative;
		border: solid 1px !important;
	}

		.button.special {
			border: none !important;
		}

/* Icon */

	.icon.major {
		-ms-behavior: url("assets/js/ie/PIE.htc");
	}

		.icon.major:before {
			font-size: 4em;
			border: 0;
		}

/* Spotlight */

	.spotlight .image {
		position: relative;
		-ms-behavior: url("assets/js/ie/PIE.htc");
	}

		.spotlight .image img {
			position: relative;
			-ms-behavior: url("assets/js/ie/PIE.htc");
		}

/* Features */

	.features li {
		width: 29%;

=====================================================
== File: src/homepage/assets/css/ie9.css
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Spotlight */

	.spotlight:after {
		content: '';
		display: block;
		clear: both;
	}

	.spotlight .content {
		float: left;
		width: 60%;
	}

	.spotlight .image {
		float: left;
	}

/* Features */

	.features:after {
		content: '';
		display: block;
		clear: both;
	}

	.features li {
		float: left;
	}

/* Statistics */

	.statistics {
		display: inline-block;
	}

		.statistics:after {
			content: '';
			display: block;
			clear: both;
		}

		.statistics li {
			float: left;
			padding: 1.5em 2.5em;

=====================================================
== File: src/homepage/assets/css/test.html
=====================================================
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Calque_1" x="0px" y="0px" width="841.89px" height="595.28px" viewBox="0 0 841.89 595.28" enable-background="new 0 0 841.89 595.28" xml:space="preserve">
<circle fill="#FFFFFF" cx="672.754" cy="148.406" r="66.5"/>
<g>
  <path fill="#E64821" d="M718.72,121.022c-3.564-2.383-7.259-4.322-11.117-5.314c-3.85-1.014-7.823-0.778-11.496,0.742l-0.691,0.288   l-0.342,0.154l-0.169,0.079l-0.087,0.04l-0.042,0.02l-0.022,0.01c0.022-0.015-0.064,0.039,0.048-0.031l-0.011,0.006   c-0.5,0.313-0.969,0.572-1.462,0.83c-0.978,0.509-1.981,0.965-3.021,1.341c-2.077,0.729-4.318,1.242-6.619,0.96   c-1.14-0.15-2.273-0.547-3.228-1.208c-0.954-0.659-1.714-1.552-2.235-2.532c-1.052-1.972-1.373-4.147-1.439-6.262   c0.386,2.077,0.973,4.162,2.13,5.836c0.581,0.827,1.298,1.534,2.146,1.999c0.842,0.471,1.794,0.699,2.763,0.743   c1.946,0.094,3.931-0.496,5.777-1.31c0.931-0.407,1.84-0.872,2.715-1.393c0.433-0.256,0.877-0.537,1.262-0.808l0.763-0.498   c0.242-0.141,0.476-0.302,0.729-0.428c1.985-1.068,4.221-1.805,6.523-1.96c2.296-0.168,4.614,0.158,6.75,0.882   c2.142,0.716,4.112,1.807,5.864,3.129C715.953,117.664,717.52,119.218,718.72,121.022z"/>
  <g>
    <path fill="none" d="M637.856,139.139c-0.337,0.258,9.157,11.617,23.405,22.405c4.192,3.205,8.29,5.973,11.994,8.286    c0.281-0.416,0.542-0.842,0.787-1.279c-3.608-2.39-7.623-5.184-11.763-8.348C648.18,149.535,638.222,138.782,637.856,139.139z"/>

      <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="1192.2021" y1="229.4492" x2="1234.9417" y2="229.4492" gradientTransform="matrix(-0.1008 -0.9949 0.9949 -0.1008 547.1743 1381.7705)">
      <stop offset="0" style="stop-color:#FCC30E"/>
      <stop offset="0.4969" style="stop-color:#E64821"/>
      <stop offset="1" style="stop-color:#E42328"/>
    </linearGradient>
    <path fill="url(#SVGID_5_)" d="M659.708,160.542c-14.247-10.789-23.741-22.147-23.405-22.406    c0.366-0.357,10.323,10.396,24.424,21.064c4.14,3.164,8.154,5.958,11.763,8.348c0.048-0.086,0.104-0.168,0.152-0.256    c0.592-1.131,1.046-2.347,1.401-3.617c-2.531-5.059-8.833-12.067-16.158-18.494c-1.629-1.413-3.325-2.666-5.04-3.792    c-0.373,3.018-1.118,5.178-1.123,5.177c0,0-0.831-2.873-0.76-6.369c-1.156-0.697-2.313-1.347-3.463-1.94    c-0.011,3.443-1.033,6.021-1.038,6.022c0,0.007-2.07-3.492-2.291-7.581c-0.003-0.026-0.003-0.052-0.003-0.076    c-6.875-3.16-12.671-4.681-12.682-4.666c-0.062-0.155,0.428,14.595,11.28,25.836c0.366-0.022,0.735-0.04,1.114-0.039    c3.946,0.008,7.317,1.426,7.323,1.425c0-0.003-2.075,1.235-5.106,1.653c1.103,0.882,2.235,1.681,3.39,2.406    c2.854-1.034,5.221-1.376,5.221-1.376c0-0.005-1.248,1.226-3.314,2.506c7.54,4.161,14.378,6.28,18.711,6.479    c0.586-0.64,1.121-1.313,1.599-2.021C667.998,166.515,663.901,163.747,659.708,160.542z"/>
    <path fill="#E42328" d="M710.524,120.843c-2.746,0.231-5.496,0.723-8.203,1.497c-5.401,1.538-10.711,4.256-15.061,8.381    c-2.191,2.033-4.073,4.437-5.644,7.024c-1.523,2.615-2.755,5.412-3.551,8.303c-0.82,2.884-1.311,5.83-1.479,8.755    c-0.05,0.721-0.077,1.467-0.096,2.221l-0.017,1.005l-0.024,0.862c-0.029,1.145-0.127,2.268-0.303,3.355    c-0.138,0.833-0.329,1.64-0.552,2.429c-0.354,1.27-0.809,2.486-1.4,3.618c-0.048,0.087-0.105,0.169-0.152,0.255    c-0.245,0.438-0.506,0.864-0.787,1.279c-0.479,0.708-1.013,1.381-1.6,2.021c-0.423,0.461-0.865,0.91-1.347,1.333    c-3.241,2.849-7.697,4.804-12.477,6.061c-4.796,1.275-9.926,1.944-15.132,2.303c-5.218,0.352-10.52,0.408-15.913,0.276    c5.027,2.018,10.327,3.3,15.735,4.109c5.415,0.774,10.986,1.024,16.65,0.312c2.825-0.373,5.682-0.975,8.496-1.973    c2.801-1.005,5.597-2.373,8.113-4.309c2.525-1.907,4.765-4.373,6.386-7.192c0.82-1.403,1.494-2.88,2.035-4.386    c0.519-1.511,0.908-3.049,1.171-4.583c0.269-1.535,0.419-3.065,0.479-4.578c0.019-0.379,0.017-0.755,0.021-1.132l0.002-0.989    c0.005-0.574,0.018-1.158,0.049-1.764c0.129-2.384,0.416-4.727,0.939-6.99c1.039-4.525,3.008-8.727,5.973-12.363    c2.961-3.634,6.877-6.692,11.314-9.149c4.449-2.453,9.354-4.38,14.567-5.816C716.026,120.628,713.268,120.607,710.524,120.843z"/>
  </g>
</g>
</svg>

=====================================================
== File: src/homepage/assets/css/lightbox.css
=====================================================
/* Preload images */
body:after {
  content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png);
  display: none;
}

body.lb-disable-scrolling {
  overflow: hidden;
}

.lightboxOverlay {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 9999;
  background-color: black;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
  opacity: 0.8;
  display: none;
}

.lightbox {
  position: absolute;
  left: 0;
  width: 100%;
  z-index: 10000;
  text-align: center;
  line-height: 0;
  font-weight: normal;
}

.lightbox .lb-image {
  display: block;
  height: auto;
  max-width: inherit;
  border-radius: 3px;
}

.lightbox a img {
  border: none;
}

.lb-outerContainer {
  position: relative;
  background-color: white;
  *zoom: 1;
  width: 250px;
  height: 250px;
  margin: 0 auto;
  border-radius: 4px;

=====================================================
== File: src/homepage/assets/fonts/fontawesome-webfont.svg
=====================================================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="fontawesomeregular" horiz-adv-x="1536" >
<font-face units-per-em="1792" ascent="1536" descent="-256" />
<missing-glyph horiz-adv-x="448" />
<glyph unicode=" "  horiz-adv-x="448" />
<glyph unicode="&#x09;" horiz-adv-x="448" />
<glyph unicode="&#xa0;" horiz-adv-x="448" />
<glyph unicode="&#xa8;" horiz-adv-x="1792" />
<glyph unicode="&#xa9;" horiz-adv-x="1792" />
<glyph unicode="&#xae;" horiz-adv-x="1792" />
<glyph unicode="&#xb4;" horiz-adv-x="1792" />
<glyph unicode="&#xc6;" horiz-adv-x="1792" />
<glyph unicode="&#xd8;" horiz-adv-x="1792" />
<glyph unicode="&#x2000;" horiz-adv-x="768" />
<glyph unicode="&#x2001;" horiz-adv-x="1537" />
<glyph unicode="&#x2002;" horiz-adv-x="768" />
<glyph unicode="&#x2003;" horiz-adv-x="1537" />
<glyph unicode="&#x2004;" horiz-adv-x="512" />
<glyph unicode="&#x2005;" horiz-adv-x="384" />
<glyph unicode="&#x2006;" horiz-adv-x="256" />
<glyph unicode="&#x2007;" horiz-adv-x="256" />
<glyph unicode="&#x2008;" horiz-adv-x="192" />
<glyph unicode="&#x2009;" horiz-adv-x="307" />
<glyph unicode="&#x200a;" horiz-adv-x="85" />
<glyph unicode="&#x202f;" horiz-adv-x="307" />
<glyph unicode="&#x205f;" horiz-adv-x="384" />
<glyph unicode="&#x2122;" horiz-adv-x="1792" />
<glyph unicode="&#x221e;" horiz-adv-x="1792" />
<glyph unicode="&#x2260;" horiz-adv-x="1792" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />

=====================================================
== File: src/homepage/assets/js/main.js
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

(function($) {

	skel.breakpoints({
		xlarge: '(max-width: 1680px)',
		large: '(max-width: 1280px)',
		medium: '(max-width: 980px)',
		small: '(max-width: 736px)',
		xsmall: '(max-width: 480px)',
		xxsmall: '(max-width: 360px)'
	});

	$(function() {

		var	$window = $(window),
			$body = $('body'),
			$main = $('#main');

		// Disable animations/transitions until the page has loaded.
			$body.addClass('is-loading');

			$window.on('load', function() {
				window.setTimeout(function() {
					$body.removeClass('is-loading');
				}, 100);
			});

		// Fix: Placeholder polyfill.
			$('form').placeholder();

		// Prioritize "important" elements on medium.
			skel.on('+medium -medium', function() {
				$.prioritize(
					'.important\\28 medium\\29',
					skel.breakpoint('medium').active
				);
			});

		// Nav.
			var $nav = $('#nav');

			if ($nav.length > 0) {

				// Shrink effect.
					$main

=====================================================
== File: src/homepage/assets/js/github-fetch.js
=====================================================
let repositoryInfo = {};
let allContributors = [];
const repositoryUrl = "https://api.github.com/repos/apache/james-project";

function getAllCollaborators(callback) {
  if (allContributors.length > 0) {
    callback(allContributors);
  } else {
    $.get(repositoryInfo.contributors_url, function(contributors) {
      allContributors = contributors;
      callback(contributors);
    });
  }
}

function getListContributorDom(contributors) {
  let list = "";
  contributors.sort(function(a, b){
    if(a.login.toLowerCase() < b.login.toLowerCase()) return -1;
    if(a.login.toLowerCase() > b.login.toLowerCase()) return 1;
    return 0;
  });
  for (contributor of contributors) {
    list += `<li class="contributor-card"><a href="` + contributor.html_url + `" alt="` + contributor.login + ` github account"><span class="image contributor-avatar"><img src="` + contributor.avatar_url + `"></span><span class="icon fa-github"></span>` + contributor.login + `</a></li>`;
  }
  return list;
}

function getTotalCommit(callback) {
  $.get("https://api.github.com/repos/apache/james-project/stats/commit_activity", function(data) {
    let total = 0;
    for(week of data) {
      total += week.total;
    }
    callback(total);
  });
}

$(document).ready(function () {
  $.get(repositoryUrl, function(repository) {
    repositoryInfo = repository;
    getAllCollaborators(function(collabs) {
      $('#contributor-num').append(collabs.length);
      let contributors = getListContributorDom(collabs);
      $('#contributor-list').append(contributors);
    });
    getTotalCommit(function(commits) {
      $('#commit-num').append(commits);
    });
    $('#fork-num').append(repositoryInfo.forks_count);

=====================================================
== File: src/homepage/assets/js/jquery.min.js
=====================================================
/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;

return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});

=====================================================
== File: src/homepage/assets/js/lightbox.js
=====================================================
/*!
 * Lightbox v2.8.2
 * by Lokesh Dhakar
 *
 * More info:
 * http://lokeshdhakar.com/projects/lightbox2/
 *
 * Copyright 2007, 2015 Lokesh Dhakar
 * Released under the MIT license
 * https://github.com/lokesh/lightbox2/blob/master/LICENSE
 */

// Uses Node, AMD or browser globals to create a module.
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node. Does not work with strict CommonJS, but
        // only CommonJS-like environments that support module.exports,
        // like Node.
        module.exports = factory(require('jquery'));
    } else {
        // Browser globals (root is window)
        root.lightbox = factory(root.jQuery);
    }
}(this, function ($) {

  function Lightbox(options) {
    this.album = [];
    this.currentImageIndex = void 0;
    this.init();

    // options
    this.options = $.extend({}, this.constructor.defaults);
    this.option(options);
  }

  // Descriptions of all options available on the demo site:
  // http://lokeshdhakar.com/projects/lightbox2/index.html#options
  Lightbox.defaults = {
    albumLabel: 'Image %1 of %2',
    alwaysShowNavOnTouchDevices: false,
    fadeDuration: 500,
    fitImagesInViewport: true,
    // maxWidth: 800,
    // maxHeight: 600,
    positionFromTop: 50,
    resizeDuration: 700,
    showImageNumberLabel: true,

=====================================================
== File: src/homepage/assets/js/ie/PIE.htc
=====================================================
<!--
PIE: CSS3 rendering for IE
Version 1.0.0
http://css3pie.com
Dual-licensed for use under the Apache License Version 2.0 or the General Public License (GPL) Version 2.
-->
<PUBLIC:COMPONENT lightWeight="true">
<!-- saved from url=(0014)about:internet -->
<PUBLIC:ATTACH EVENT="oncontentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondocumentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondetach" FOR="element" ONEVENT="cleanup()" />

<script type="text/javascript">
var doc = element.document;var f=window.PIE;
if(!f){f=window.PIE={F:"-pie-",nb:"Pie",La:"pie_",Ac:{TD:1,TH:1},cc:{TABLE:1,THEAD:1,TBODY:1,TFOOT:1,TR:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1},fc:{A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},Gd:{submit:1,button:1,reset:1},aa:function(){}};try{doc.execCommand("BackgroundImageCache",false,true)}catch(aa){}for(var ba=4,Z=doc.createElement("div"),ca=Z.getElementsByTagName("i"),ga;Z.innerHTML="<!--[if gt IE "+ ++ba+"]><i></i><![endif]--\>",ca[0];);f.O=ba;if(ba===6)f.F=f.F.replace(/^-/,"");f.ja=
doc.documentMode||f.O;Z.innerHTML='<v:shape adj="1"/>';ga=Z.firstChild;ga.style.behavior="url(#default#VML)";f.zc=typeof ga.adj==="object";(function(){var a,b=0,c={};f.p={Za:function(d){if(!a){a=doc.createDocumentFragment();a.namespaces.add("css3vml","urn:schemas-microsoft-com:vml")}return a.createElement("css3vml:"+d)},Ba:function(d){return d&&d._pieId||(d._pieId="_"+ ++b)},Eb:function(d){var e,g,j,i,h=arguments;e=1;for(g=h.length;e<g;e++){i=h[e];for(j in i)if(i.hasOwnProperty(j))d[j]=i[j]}return d},
Rb:function(d,e,g){var j=c[d],i,h;if(j)Object.prototype.toString.call(j)==="[object Array]"?j.push([e,g]):e.call(g,j);else{h=c[d]=[[e,g]];i=new Image;i.onload=function(){j=c[d]={h:i.width,f:i.height};for(var k=0,n=h.length;k<n;k++)h[k][0].call(h[k][1],j);i.onload=null};i.src=d}}}})();f.Na={gc:function(a,b,c,d){function e(){k=j>=90&&j<270?b:0;n=j<180?c:0;m=b-k;p=c-n}function g(){for(;j<0;)j+=360;j%=360}var j=d.sa;d=d.zb;var i,h,k,n,m,p,r,t;if(d){d=d.coords(a,b,c);i=d.x;h=d.y}if(j){j=j.jd();g();e();
if(!d){i=k;h=n}d=f.Na.tc(i,h,j,m,p);a=d[0];d=d[1]}else if(d){a=b-i;d=c-h}else{i=h=a=0;d=c}r=a-i;t=d-h;if(j===void 0){j=!r?t<0?90:270:!t?r<0?180:0:-Math.atan2(t,r)/Math.PI*180;g();e()}return{sa:j,xc:i,yc:h,td:a,ud:d,Wd:k,Xd:n,rd:m,sd:p,kd:r,ld:t,rc:f.Na.dc(i,h,a,d)}},tc:function(a,b,c,d,e){if(c===0||c===180)return[d,b];else if(c===90||c===270)return[a,e];else{c=Math.tan(-c*Math.PI/180);a=c*a-b;b=-1/c;d=b*d-e;e=b-c;return[(d-a)/e,(c*d-b*a)/e]}},dc:function(a,b,c,d){a=c-a;b=d-b;return Math.abs(a===0?
b:b===0?a:Math.sqrt(a*a+b*b))}};f.ea=function(){this.Gb=[];this.oc={}};f.ea.prototype={ba:function(a){var b=f.p.Ba(a),c=this.oc,d=this.Gb;if(!(b in c)){c[b]=d.length;d.push(a)}},Ha:function(a){a=f.p.Ba(a);var b=this.oc;if(a&&a in b){delete this.Gb[b[a]];delete b[a]}},xa:function(){for(var a=this.Gb,b=a.length;b--;)a[b]&&a[b]()}};f.Oa=new f.ea;f.Oa.Rd=function(){var a=this,b;if(!a.Sd){b=doc.documentElement.currentStyle.getAttribute(f.F+"poll-interval")||250;(function c(){a.xa();setTimeout(c,b)})();
a.Sd=1}};(function(){function a(){f.L.xa();window.detachEvent("onunload",a);window.PIE=null}f.L=new f.ea;window.attachEvent("onunload",a);f.L.ta=function(b,c,d){b.attachEvent(c,d);this.ba(function(){b.detachEvent(c,d)})}})();f.Qa=new f.ea;f.L.ta(window,"onresize",function(){f.Qa.xa()});(function(){function a(){f.mb.xa()}f.mb=new f.ea;f.L.ta(window,"onscroll",a);f.Qa.ba(a)})();(function(){function a(){c=f.kb.md()}function b(){if(c){for(var d=0,e=c.length;d<e;d++)f.attach(c[d]);c=0}}var c;if(f.ja<9){f.L.ta(window,
"onbeforeprint",a);f.L.ta(window,"onafterprint",b)}})();f.lb=new f.ea;f.L.ta(doc,"onmouseup",function(){f.lb.xa()});f.he=function(){function a(h){this.Y=h}var b=doc.createElement("length-calc"),c=doc.body||doc.documentElement,d=b.style,e={},g=["mm","cm","in","pt","pc"],j=g.length,i={};d.position="absolute";d.top=d.left="-9999px";for(c.appendChild(b);j--;){d.width="100"+g[j];e[g[j]]=b.offsetWidth/100}c.removeChild(b);d.width="1em";a.prototype={Kb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,ic:function(){var h=
this.Jd;if(h===void 0)h=this.Jd=parseFloat(this.Y);return h},yb:function(){var h=this.ae;if(!h)h=this.ae=(h=this.Y.match(this.Kb))&&h[0]||"px";return h},a:function(h,k){var n=this.ic(),m=this.yb();switch(m){case "px":return n;case "%":return n*(typeof k==="function"?k():k)/100;case "em":return n*this.xb(h);case "ex":return n*this.xb(h)/2;default:return n*e[m]}},xb:function(h){var k=h.currentStyle.fontSize,n,m;if(k.indexOf("px")>0)return parseFloat(k);else if(h.tagName in f.cc){m=this;n=h.parentNode;
return f.n(k).a(n,function(){return m.xb(n)})}else{h.appendChild(b);k=b.offsetWidth;b.parentNode===h&&h.removeChild(b);return k}}};f.n=function(h){return i[h]||(i[h]=new a(h))};return a}();f.Ja=function(){function a(e){this.X=e}var b=f.n("50%"),c={top:1,center:1,bottom:1},d={left:1,center:1,right:1};a.prototype={zd:function(){if(!this.ac){var e=this.X,g=e.length,j=f.v,i=j.qa,h=f.n("0");i=i.na;h=["left",h,"top",h];if(g===1){e.push(new j.ob(i,"center"));g++}if(g===2){i&(e[0].k|e[1].k)&&e[0].d in c&&
e[1].d in d&&e.push(e.shift());if(e[0].k&i)if(e[0].d==="center")h[1]=b;else h[0]=e[0].d;else if(e[0].W())h[1]=f.n(e[0].d);if(e[1].k&i)if(e[1].d==="center")h[3]=b;else h[2]=e[1].d;else if(e[1].W())h[3]=f.n(e[1].d)}this.ac=h}return this.ac},coords:function(e,g,j){var i=this.zd(),h=i[1].a(e,g);e=i[3].a(e,j);return{x:i[0]==="right"?g-h:h,y:i[2]==="bottom"?j-e:e}}};return a}();f.Ka=function(){function a(b,c){this.h=b;this.f=c}a.prototype={a:function(b,c,d,e,g){var j=this.h,i=this.f,h=c/d;e=e/g;if(j===
"contain"){j=e>h?c:d*e;i=e>h?c/e:d}else if(j==="cover"){j=e<h?c:d*e;i=e<h?c/e:d}else if(j==="auto"){i=i==="auto"?g:i.a(b,d);j=i*e}else{j=j.a(b,c);i=i==="auto"?j/e:i.a(b,d)}return{h:j,f:i}}};a.Kc=new a("auto","auto");return a}();f.Ec=function(){function a(b){this.Y=b}a.prototype={Kb:/[a-z]+$/i,yb:function(){return this.ad||(this.ad=this.Y.match(this.Kb)[0].toLowerCase())},jd:function(){var b=this.Vc,c;if(b===undefined){b=this.yb();c=parseFloat(this.Y,10);b=this.Vc=b==="deg"?c:b==="rad"?c/Math.PI*180:
b==="grad"?c/400*360:b==="turn"?c*360:0}return b}};return a}();f.Jc=function(){function a(c){this.Y=c}var b={};a.Qd=/\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d+|\d*\.\d+)\s*\)\s*/;a.Fb={aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"000",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",
cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9A9A9",darkgreen:"006400",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"696969",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",
forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DCDCDC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"808080",green:"008000",greenyellow:"ADFF2F",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgreen:"90EE90",lightgrey:"D3D3D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",
lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"0F0",limegreen:"32CD32",linen:"FAF0E6",magenta:"F0F",maroon:"800000",mediumauqamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370D8",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",
navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"688E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0C0C0",skyblue:"87CEEB",
slateblue:"6A5ACD",slategray:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"FFF",whitesmoke:"F5F5F5",yellow:"FF0",yellowgreen:"9ACD32"};a.prototype={parse:function(){if(!this.Ua){var c=this.Y,d;if(d=c.match(a.Qd)){this.Ua="rgb("+d[1]+","+d[2]+","+d[3]+")";this.Yb=parseFloat(d[4])}else{if((d=c.toLowerCase())in a.Fb)c="#"+a.Fb[d];this.Ua=c;this.Yb=c==="transparent"?0:
1}}},U:function(c){this.parse();return this.Ua==="currentColor"?c.currentStyle.color:this.Ua},fa:function(){this.parse();return this.Yb}};f.ha=function(c){return b[c]||(b[c]=new a(c))};return a}();f.v=function(){function a(c){this.$a=c;this.ch=0;this.X=[];this.Ga=0}var b=a.qa={Ia:1,Wb:2,z:4,Lc:8,Xb:16,na:32,K:64,oa:128,pa:256,Ra:512,Tc:1024,URL:2048};a.ob=function(c,d){this.k=c;this.d=d};a.ob.prototype={Ca:function(){return this.k&b.K||this.k&b.oa&&this.d==="0"},W:function(){return this.Ca()||this.k&
b.Ra}};a.prototype={de:/\s/,Kd:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,nc:/^\-?[_a-z][\w-]*/i,Yd:/^("([^"]*)"|'([^']*)')/,Bd:/^#([\da-f]{6}|[\da-f]{3})/i,be:{px:b.K,em:b.K,ex:b.K,mm:b.K,cm:b.K,"in":b.K,pt:b.K,pc:b.K,deg:b.Ia,rad:b.Ia,grad:b.Ia},fd:{rgb:1,rgba:1,hsl:1,hsla:1},next:function(c){function d(p,r){p=new a.ob(p,r);if(!c){k.X.push(p);k.Ga++}return p}function e(){k.Ga++;return null}var g,j,i,h,k=this;if(this.Ga<this.X.length)return this.X[this.Ga++];for(;this.de.test(this.$a.charAt(this.ch));)this.ch++;
if(this.ch>=this.$a.length)return e();j=this.ch;g=this.$a.substring(this.ch);i=g.charAt(0);switch(i){case "#":if(h=g.match(this.Bd)){this.ch+=h[0].length;return d(b.z,h[0])}break;case '"':case "'":if(h=g.match(this.Yd)){this.ch+=h[0].length;return d(b.Tc,h[2]||h[3]||"")}break;case "/":case ",":this.ch++;return d(b.pa,i);case "u":if(h=g.match(this.url)){this.ch+=h[0].length;return d(b.URL,h[2]||h[3]||h[4]||"")}}if(h=g.match(this.Kd)){i=h[0];this.ch+=i.length;if(g.charAt(i.length)==="%"){this.ch++;
return d(b.Ra,i+"%")}if(h=g.substring(i.length).match(this.nc)){i+=h[0];this.ch+=h[0].length;return d(this.be[h[0].toLowerCase()]||b.Lc,i)}return d(b.oa,i)}if(h=g.match(this.nc)){i=h[0];this.ch+=i.length;if(i.toLowerCase()in f.Jc.Fb||i==="currentColor"||i==="transparent")return d(b.z,i);if(g.charAt(i.length)==="("){this.ch++;if(i.toLowerCase()in this.fd){g=function(p){return p&&p.k&b.oa};h=function(p){return p&&p.k&(b.oa|b.Ra)};var n=function(p,r){return p&&p.d===r},m=function(){return k.next(1)};
if((i.charAt(0)==="r"?h(m()):g(m()))&&n(m(),",")&&h(m())&&n(m(),",")&&h(m())&&(i==="rgb"||i==="hsa"||n(m(),",")&&g(m()))&&n(m(),")"))return d(b.z,this.$a.substring(j,this.ch));return e()}return d(b.Xb,i)}return d(b.na,i)}this.ch++;return d(b.Wb,i)},D:function(){return this.X[this.Ga-- -2]},all:function(){for(;this.next(););return this.X},ma:function(c,d){for(var e=[],g,j;g=this.next();){if(c(g)){j=true;this.D();break}e.push(g)}return d&&!j?null:e}};return a}();var ha=function(a){this.e=a};ha.prototype=
{Z:0,Od:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.x!==b.x||a.y!==b.y)},Td:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.h!==b.h||a.f!==b.f)},hc:function(){var a=this.e,b=a.getBoundingClientRect(),c=f.ja===9,d=f.O===7,e=b.right-b.left;return{x:b.left,y:b.top,h:c||d?a.offsetWidth:e,f:c||d?a.offsetHeight:b.bottom-b.top,Hd:d&&e?a.offsetWidth/e:1}},o:function(){return this.Z?this.Va||(this.Va=this.hc()):this.hc()},Ad:function(){return!!this.qb},cb:function(){++this.Z},hb:function(){if(!--this.Z){if(this.Va)this.qb=
this.Va;this.Va=null}}};(function(){function a(b){var c=f.p.Ba(b);return function(){if(this.Z){var d=this.$b||(this.$b={});return c in d?d[c]:(d[c]=b.call(this))}else return b.call(this)}}f.B={Z:0,ka:function(b){function c(d){this.e=d;this.Zb=this.ia()}f.p.Eb(c.prototype,f.B,b);c.$c={};return c},j:function(){var b=this.ia(),c=this.constructor.$c;return b?b in c?c[b]:(c[b]=this.la(b)):null},ia:a(function(){var b=this.e,c=this.constructor,d=b.style;b=b.currentStyle;var e=this.wa,g=this.Fa,j=c.Yc||(c.Yc=
f.F+e);c=c.Zc||(c.Zc=f.nb+g.charAt(0).toUpperCase()+g.substring(1));return d[c]||b.getAttribute(j)||d[g]||b.getAttribute(e)}),i:a(function(){return!!this.j()}),H:a(function(){var b=this.ia(),c=b!==this.Zb;this.Zb=b;return c}),va:a,cb:function(){++this.Z},hb:function(){--this.Z||delete this.$b}}})();f.Sb=f.B.ka({wa:f.F+"background",Fa:f.nb+"Background",cd:{scroll:1,fixed:1,local:1},fb:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},sc:{"padding-box":1,"border-box":1,"content-box":1},Pd:{top:1,right:1,
bottom:1,left:1,center:1},Ud:{contain:1,cover:1},eb:{Ma:"backgroundClip",z:"backgroundColor",da:"backgroundImage",Pa:"backgroundOrigin",S:"backgroundPosition",T:"backgroundRepeat",Sa:"backgroundSize"},la:function(a){function b(s){return s&&s.W()||s.k&k&&s.d in t}function c(s){return s&&(s.W()&&f.n(s.d)||s.d==="auto"&&"auto")}var d=this.e.currentStyle,e,g,j,i=f.v.qa,h=i.pa,k=i.na,n=i.z,m,p,r=0,t=this.Pd,v,l,q={M:[]};if(this.wb()){e=new f.v(a);for(j={};g=e.next();){m=g.k;p=g.d;if(!j.P&&m&i.Xb&&p===
"linear-gradient"){v={ca:[],P:p};for(l={};g=e.next();){m=g.k;p=g.d;if(m&i.Wb&&p===")"){l.color&&v.ca.push(l);v.ca.length>1&&f.p.Eb(j,v);break}if(m&n){if(v.sa||v.zb){g=e.D();if(g.k!==h)break;e.next()}l={color:f.ha(p)};g=e.next();if(g.W())l.db=f.n(g.d);else e.D()}else if(m&i.Ia&&!v.sa&&!l.color&&!v.ca.length)v.sa=new f.Ec(g.d);else if(b(g)&&!v.zb&&!l.color&&!v.ca.length){e.D();v.zb=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&h&&p===","){if(l.color){v.ca.push(l);l={}}}else break}}else if(!j.P&&
m&i.URL){j.Ab=p;j.P="image"}else if(b(g)&&!j.$){e.D();j.$=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&k)if(p in this.fb&&!j.bb)j.bb=p;else if(p in this.sc&&!j.Wa){j.Wa=p;if((g=e.next())&&g.k&k&&g.d in this.sc)j.ub=g.d;else{j.ub=p;e.D()}}else if(p in this.cd&&!j.bc)j.bc=p;else return null;else if(m&n&&!q.color)q.color=f.ha(p);else if(m&h&&p==="/"&&!j.Xa&&j.$){g=e.next();if(g.k&k&&g.d in this.Ud)j.Xa=new f.Ka(g.d);else if(g=c(g)){m=c(e.next());if(!m){m=g;e.D()}j.Xa=new f.Ka(g,m)}else return null}else if(m&
h&&p===","&&j.P){j.Hb=a.substring(r,e.ch-1);r=e.ch;q.M.push(j);j={}}else return null}if(j.P){j.Hb=a.substring(r);q.M.push(j)}}else this.Bc(f.ja<9?function(){var s=this.eb,o=d[s.S+"X"],u=d[s.S+"Y"],x=d[s.da],y=d[s.z];if(y!=="transparent")q.color=f.ha(y);if(x!=="none")q.M=[{P:"image",Ab:(new f.v(x)).next().d,bb:d[s.T],$:new f.Ja((new f.v(o+" "+u)).all())}]}:function(){var s=this.eb,o=/\s*,\s*/,u=d[s.da].split(o),x=d[s.z],y,z,B,E,D,C;if(x!=="transparent")q.color=f.ha(x);if((E=u.length)&&u[0]!=="none"){x=
d[s.T].split(o);y=d[s.S].split(o);z=d[s.Pa].split(o);B=d[s.Ma].split(o);s=d[s.Sa].split(o);q.M=[];for(o=0;o<E;o++)if((D=u[o])&&D!=="none"){C=s[o].split(" ");q.M.push({Hb:D+" "+x[o]+" "+y[o]+" / "+s[o]+" "+z[o]+" "+B[o],P:"image",Ab:(new f.v(D)).next().d,bb:x[o],$:new f.Ja((new f.v(y[o])).all()),Wa:z[o],ub:B[o],Xa:new f.Ka(C[0],C[1])})}}});return q.color||q.M[0]?q:null},Bc:function(a){var b=f.ja>8,c=this.eb,d=this.e.runtimeStyle,e=d[c.da],g=d[c.z],j=d[c.T],i,h,k,n;if(e)d[c.da]="";if(g)d[c.z]="";if(j)d[c.T]=
"";if(b){i=d[c.Ma];h=d[c.Pa];n=d[c.S];k=d[c.Sa];if(i)d[c.Ma]="";if(h)d[c.Pa]="";if(n)d[c.S]="";if(k)d[c.Sa]=""}a=a.call(this);if(e)d[c.da]=e;if(g)d[c.z]=g;if(j)d[c.T]=j;if(b){if(i)d[c.Ma]=i;if(h)d[c.Pa]=h;if(n)d[c.S]=n;if(k)d[c.Sa]=k}return a},ia:f.B.va(function(){return this.wb()||this.Bc(function(){var a=this.e.currentStyle,b=this.eb;return a[b.z]+" "+a[b.da]+" "+a[b.T]+" "+a[b.S+"X"]+" "+a[b.S+"Y"]})}),wb:f.B.va(function(){var a=this.e;return a.style[this.Fa]||a.currentStyle.getAttribute(this.wa)}),
qc:function(){var a=0;if(f.O<7){a=this.e;a=""+(a.style[f.nb+"PngFix"]||a.currentStyle.getAttribute(f.F+"png-fix"))==="true"}return a},i:f.B.va(function(){return(this.wb()||this.qc())&&!!this.j()})});f.Vb=f.B.ka({wc:["Top","Right","Bottom","Left"],Id:{thin:"1px",medium:"3px",thick:"5px"},la:function(){var a={},b={},c={},d=false,e=true,g=true,j=true;this.Cc(function(){for(var i=this.e.currentStyle,h=0,k,n,m,p,r,t,v;h<4;h++){m=this.wc[h];v=m.charAt(0).toLowerCase();k=b[v]=i["border"+m+"Style"];n=i["border"+
m+"Color"];m=i["border"+m+"Width"];if(h>0){if(k!==p)g=false;if(n!==r)e=false;if(m!==t)j=false}p=k;r=n;t=m;c[v]=f.ha(n);m=a[v]=f.n(b[v]==="none"?"0":this.Id[m]||m);if(m.a(this.e)>0)d=true}});return d?{J:a,Zd:b,gd:c,ee:j,hd:e,$d:g}:null},ia:f.B.va(function(){var a=this.e,b=a.currentStyle,c;a.tagName in f.Ac&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.Cc(function(){c=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return c}),Cc:function(a){var b=this.e.runtimeStyle,c=b.borderWidth,
d=b.borderColor;if(c)b.borderWidth="";if(d)b.borderColor="";a=a.call(this);if(c)b.borderWidth=c;if(d)b.borderColor=d;return a}});(function(){f.jb=f.B.ka({wa:"border-radius",Fa:"borderRadius",la:function(b){var c=null,d,e,g,j,i=false;if(b){e=new f.v(b);var h=function(){for(var k=[],n;(g=e.next())&&g.W();){j=f.n(g.d);n=j.ic();if(n<0)return null;if(n>0)i=true;k.push(j)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=h()){if(g){if(g.k&f.v.qa.pa&&g.d===
"/")d=h()}else d=b;if(i&&b&&d)c={x:b,y:d}}}return c}});var a=f.n("0");a={tl:a,tr:a,br:a,bl:a};f.jb.Dc={x:a,y:a}})();f.Ub=f.B.ka({wa:"border-image",Fa:"borderImage",fb:{stretch:1,round:1,repeat:1,space:1},la:function(a){var b=null,c,d,e,g,j,i,h=0,k=f.v.qa,n=k.na,m=k.oa,p=k.Ra;if(a){c=new f.v(a);b={};for(var r=function(l){return l&&l.k&k.pa&&l.d==="/"},t=function(l){return l&&l.k&n&&l.d==="fill"},v=function(){g=c.ma(function(l){return!(l.k&(m|p))});if(t(c.next())&&!b.fill)b.fill=true;else c.D();if(r(c.next())){h++;
j=c.ma(function(l){return!l.W()&&!(l.k&n&&l.d==="auto")});if(r(c.next())){h++;i=c.ma(function(l){return!l.Ca()})}}else c.D()};a=c.next();){d=a.k;e=a.d;if(d&(m|p)&&!g){c.D();v()}else if(t(a)&&!b.fill){b.fill=true;v()}else if(d&n&&this.fb[e]&&!b.repeat){b.repeat={f:e};if(a=c.next())if(a.k&n&&this.fb[a.d])b.repeat.Ob=a.d;else c.D()}else if(d&k.URL&&!b.src)b.src=e;else return null}if(!b.src||!g||g.length<1||g.length>4||j&&j.length>4||h===1&&j.length<1||i&&i.length>4||h===2&&i.length<1)return null;if(!b.repeat)b.repeat=

=====================================================
== File: src/homepage/assets/js/ie/respond.min.js
=====================================================
/*! Respond.js v1.4.2: min/max-width media query polyfill
 * Copyright 2014 Scott Jehl
 * Licensed under MIT
 * http://j.mp/respondjs */

!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);

=====================================================
== File: src/homepage/assets/js/ie/html5shiv.js
=====================================================
/*
 HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);

=====================================================
== File: src/homepage/assets/js/jquery.scrolly.min.js
=====================================================
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);

=====================================================
== File: src/homepage/assets/js/skel.min.js
=====================================================
/* skel.js v3.0.1 | (c) skel.io | MIT licensed */
var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;e<i.length;e++)n=i[e],"("==n.charAt(0)&&(n=n.substring(1,n.length-1),a=n.split(/:\s+/),2==a.length&&(r[a[0].replace(/^\s+|\s+$/g,"")]=parseInt(a[1]),o=!0));if(!o)return!1;var s=document.documentElement.clientWidth,c=document.documentElement.clientHeight;return null!==r["min-width"]&&s<r["min-width"]||null!==r["max-width"]&&s>r["max-width"]||null!==r["min-height"]&&c<r["min-height"]||null!==r["max-height"]&&c>r["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML='&nbsp;<style type="text/css">'+t+"</style>",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});

=====================================================
== File: src/homepage/assets/js/lity.min.js
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){var b=B();return N&&a.length?(a.one(N,b.resolve),setTimeout(b.resolve,500)):b.resolve(),b.promise()}function d(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if("undefined"==typeof d)return"undefined"==typeof a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function e(a){for(var b,c=decodeURI(a.split("#")[0]).split("&"),d={},e=0,f=c.length;e<f;e++)c[e]&&(b=c[e].split("="),d[b[0]]=b[1]);return d}function f(a,c){return a+(a.indexOf("?")>-1?"&":"?")+b.param(c)}function g(a,b){var c=a.indexOf("#");return-1===c?b:(c>0&&(a=a.substr(c)),b+a)}function h(a){return b('<span class="lity-error"/>').append(a)}function i(a,c){var d=c.opener()&&c.opener().data("lity-desc")||"Image with no description",e=b('<img src="'+a+'" alt="'+d+'"/>'),f=B(),g=function(){f.reject(h("Failed loading image"))};return e.on("load",function(){return 0===this.naturalWidth?g():void f.resolve(e)}).on("error",g),f.promise()}function j(a,c){var d,e,f;try{d=b(a)}catch(a){return!1}return!!d.length&&(e=b('<i style="display:none !important"/>'),f=d.hasClass("lity-hide"),c.element().one("lity:remove",function(){e.before(d).remove(),f&&!d.closest(".lity-content").length&&d.addClass("lity-hide")}),d.removeClass("lity-hide").after(e))}function k(a){var c=J.exec(a);return!!c&&o(g(a,f("https://www.youtube"+(c[2]||"")+".com/embed/"+c[4],b.extend({autoplay:1},e(c[5]||"")))))}function l(a){var c=K.exec(a);return!!c&&o(g(a,f("https://player.vimeo.com/video/"+c[3],b.extend({autoplay:1},e(c[4]||"")))))}function m(a){var c=M.exec(a);return!!c&&(0!==a.indexOf("http")&&(a="https:"+a),o(g(a,f("https://www.facebook.com/plugins/video.php?href="+a,b.extend({autoplay:1},e(c[4]||""))))))}function n(a){var b=L.exec(a);return!!b&&o(g(a,f("https://www.google."+b[3]+"/maps?"+b[6],{output:b[6].indexOf("layer=c")>0?"svembed":"embed"})))}function o(a){return'<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="'+a+'"/></div>'}function p(){return z.documentElement.clientHeight?z.documentElement.clientHeight:Math.round(A.height())}function q(a){var b=v();b&&(27===a.keyCode&&b.close(),9===a.keyCode&&r(a,b))}function r(a,b){var c=b.element().find(G),d=c.index(z.activeElement);a.shiftKey&&d<=0?(c.get(c.length-1).focus(),a.preventDefault()):a.shiftKey||d!==c.length-1||(c.get(0).focus(),a.preventDefault())}function s(){b.each(D,function(a,b){b.resize()})}function t(a){1===D.unshift(a)&&(C.addClass("lity-active"),A.on({resize:s,keydown:q})),b("body > *").not(a.element()).addClass("lity-hidden").each(function(){var a=b(this);void 0===a.data(F)&&a.data(F,a.attr(E)||null)}).attr(E,"true")}function u(a){var c;a.element().attr(E,"true"),1===D.length&&(C.removeClass("lity-active"),A.off({resize:s,keydown:q})),D=b.grep(D,function(b){return a!==b}),c=D.length?D[0].element():b(".lity-hidden"),c.removeClass("lity-hidden").each(function(){var a=b(this),c=a.data(F);c?a.attr(E,c):a.removeAttr(E),a.removeData(F)})}function v(){return 0===D.length?null:D[0]}function w(a,c,d,e){var f,g="inline",h=b.extend({},d);return e&&h[e]?(f=h[e](a,c),g=e):(b.each(["inline","iframe"],function(a,b){delete h[b],h[b]=d[b]}),b.each(h,function(b,d){return!d||(!(!d.test||d.test(a,c))||(f=d(a,c),!1!==f?(g=b,!1):void 0))})),{handler:g,content:f||""}}function x(a,e,f,g){function h(a){k=b(a).css("max-height",p()+"px"),j.find(".lity-loader").each(function(){var a=b(this);c(a).always(function(){a.remove()})}),j.removeClass("lity-loading").find(".lity-content").empty().append(k),m=!0,k.trigger("lity:ready",[l])}var i,j,k,l=this,m=!1,n=!1;e=b.extend({},H,e),j=b(e.template),l.element=function(){return j},l.opener=function(){return f},l.options=b.proxy(d,l,e),l.handlers=b.proxy(d,l,e.handlers),l.resize=function(){m&&!n&&k.css("max-height",p()+"px").trigger("lity:resize",[l])},l.close=function(){if(m&&!n){n=!0,u(l);var a=B();if(g&&(z.activeElement===j[0]||b.contains(j[0],z.activeElement)))try{g.focus()}catch(a){}return k.trigger("lity:close",[l]),j.removeClass("lity-opened").addClass("lity-closed"),c(k.add(j)).always(function(){k.trigger("lity:remove",[l]),j.remove(),j=void 0,a.resolve()}),a.promise()}},i=w(a,l,e.handlers,e.handler),j.attr(E,"false").addClass("lity-loading lity-opened lity-"+i.handler).appendTo("body").focus().on("click","[data-lity-close]",function(a){b(a.target).is("[data-lity-close]")&&l.close()}).trigger("lity:open",[l]),t(l),b.when(i.content).always(h)}function y(a,c,d){a.preventDefault?(a.preventDefault(),d=b(this),a=d.data("lity-target")||d.attr("href")||d.attr("src")):d=b(d);var e=new x(a,b.extend({},d.data("lity-options")||d.data("lity"),c),d,z.activeElement);if(!a.preventDefault)return e}var z=a.document,A=b(a),B=b.Deferred,C=b("html"),D=[],E="aria-hidden",F="lity-"+E,G='a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^="-"])',H={handler:null,handlers:{image:i,inline:j,youtube:k,vimeo:l,googlemaps:n,facebookvideo:m,iframe:o},template:'<div class="lity" role="dialog" aria-label="Dialog Window (Press escape to close)" tabindex="-1"><div class="lity-wrap" data-lity-close role="document"><div class="lity-loader" aria-hidden="true">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" aria-label="Close (Press escape to close)" data-lity-close>&times;</button></div></div></div>'},I=/(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i,J=/(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i,K=/(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/,L=/((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i,M=/(facebook\.com)\/([a-z0-9_-]*)\/videos\/([0-9]*)(.*)?$/i,N=function(){var a=z.createElement("div"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return!1}();return i.test=function(a){return I.test(a)},y.version="2.2.2",y.options=b.proxy(d,y,H),y.handlers=b.proxy(d,y,H.handlers),y.current=v,b(z).on("click.lity","[data-lity]",y),y});

=====================================================
== File: src/homepage/assets/js/util.js
=====================================================
(function($) {

	/**
	 * Generate an indented list of links from a nav. Meant for use with panel().
	 * @return {jQuery} jQuery object.
	 */
	$.fn.navList = function() {

		var	$this = $(this);
			$a = $this.find('a'),
			b = [];

		$a.each(function() {

			var	$this = $(this),
				indent = Math.max(0, $this.parents('li').length - 1),
				href = $this.attr('href'),
				target = $this.attr('target');

			b.push(
				'<a ' +
					'class="link depth-' + indent + '"' +
					( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
					( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
				'>' +
					'<span class="indent-' + indent + '"></span>' +
					$this.text() +
				'</a>'
			);

		});

		return b.join('');

	};

	/**
	 * Panel-ify an element.
	 * @param {object} userConfig User config.
	 * @return {jQuery} jQuery object.
	 */
	$.fn.panel = function(userConfig) {

		// No elements?
			if (this.length == 0)
				return $this;

		// Multiple elements?
			if (this.length > 1) {


=====================================================
== File: src/homepage/assets/js/jquery.scrollex.min.js
=====================================================
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);

=====================================================
== File: src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_syntax-highlighting.scssc
=====================================================
3.7.4
ef05d1dd452eb066ab53c0c3dbf2871ef35af39b
??o:?Sass::Tree::RootNode?:?@children[?o:?Sass::Tree::CommentNode?:?@value[?I"*/**
 * Syntax highlighting styles
 */?:?ET:
@type:?normal;?[?:?@filename0:
@options{?:
@linei?:?@source_rangeo:?Sass::Source::Range	:?@start_poso:?Sass::Source::Position?;?i?:?@offseti?:
@end_poso;??;?i?;?i	:
@fileI"Q/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass/minima/_syntax-highlighting.scss?;	T:?@importero: Sass::Importers::Filesystem?:
@rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@real_rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@same_name_warningso:?Set?:
@hash}?Fo:?Sass::Tree::RuleNode?:
@rule[?I"?.highlight?;	T:?@parsed_ruleso:"Sass::Selector::CommaSequence?:
@members[?o:?Sass::Selector::Sequence?;![?o:#Sass::Selector::SimpleSequence?;![?o:?Sass::Selector::Class?:
@nameI"?highlight?;	T;?i	;?0:
@subject0:
@sourceso;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	;?i	;?0:?@selector_source_rangeo;?	;?o;??;?i	;?i?;?o;??;?i	;?i?;?@?;?@?:
@tabsi?;?[~o:?Sass::Tree::PropNode?;%[?I"?background?;	T;?[?o: Sass::Script::Tree::Literal?;?o: Sass::Script::Value::String	;?I"	#fff?;	T;
@?;
:?identifier:"@deprecated_interp_equivalent0;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;)i?:?@prop_syntax:?new;?[?;?0;
@?;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?:?@name_source_rangeo;?	;?@5;?o;??;?i
;?i?;?@?;?@?:?@value_source_rangeo;?	;?o;??;?i
;?i?;?@6;?@?;?@?o:?Sass::Tree::ExtendNode
:?@selector[?I"?%vertical-rhythm?;	T:?@optionalF;(o;?	;?o;??;?i?;?i?;?o;??;?i?;?i ;?@?;?@?;?[?;?0;
@?;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i ;?@?;?@?o;??;?[?I"?.highlighter-rouge &?;	T;?o; ?;![?o;"?;![?o;#?;![?o;$?;%I"?highlighter-rouge?;	T;?i
;?0;&0;'o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i
;?0o;#?;![?o:?Sass::Selector::Parent?:?@suffix0;?i
;?0;&0;'o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i
;?0;?i
;?i
;?0;(o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;)i?;?[?o;*?;%[?I"?background?;	T;?[?o;+?;?o;,	;?I"	#eef?;	T;
@?;
;-;.0;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;)i?;/;0;?[?;?0;
@?;?i?;?o;?	;?o;??;?i?;?i
;?o;??;?i?;?i?;?@?;?@?;1o;?	;?@m;?o;??;?i?;?i?;?@?;?@?;2o;?	;?o;??;?i?;?i?;?@n;?@?;?@?;?0;
@?;?i
;?o;?	;?@^;?o;??;?i
;?i?;?@?;?@?:?@has_childrenTo;??;?[?I"?.c?;	T;?o; ?;![?o;"?;![?o;#?;![?o;$?;%I"?c?;	T;?i?;?0;&0;'o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i?;?0;?i?;?i?;?0;(o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;)i?;?[?o;*?;%[?I"
color?;	T;?[?o;+?;?o;,	;?I"	#998?;	T;
@?;
;-;.0;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;)i?;/;0;?[?;?0;
@?;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;1o;?	;?@??;?o;??;?i?;?i?;?@?;?@?;2o;?	;?o;??;?i?;?i?;?@??;?@?;?@?o;*?;%[?I"?font-style?;	T;?[?o;+	;?o;,	;?I"?italic?;	T;

=====================================================
== File: src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_base.scssc
=====================================================
3.7.4
cf9468af529d43fd143532037e69140b47125bf1
??o:?Sass::Tree::RootNode?:?@children[(o:?Sass::Tree::CommentNode?:?@value[?I")/**
 * Reset some basic elements
 */?:?ET:
@type:?normal;?[?:?@filename0:
@options{?:
@linei?:?@source_rangeo:?Sass::Source::Range	:?@start_poso:?Sass::Source::Position?;?i?:?@offseti?:
@end_poso;??;?i?;?i	:
@fileI"B/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass/minima/_base.scss?;	T:?@importero: Sass::Importers::Filesystem?:
@rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@real_rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@same_name_warningso:?Set?:
@hash}?Fo:?Sass::Tree::RuleNode?:
@rule[?I"Qbody, h1, h2, h3, h4, h5, h6,
p, blockquote, pre, hr,
dl, dd, ol, ul, figure?;	T:?@parsed_ruleso:"Sass::Selector::CommaSequence?:
@members[?o:?Sass::Selector::Sequence?;![?o:#Sass::Selector::SimpleSequence?;![?o:?Sass::Selector::Element	:
@nameI"	body?;	T:?@namespace0;?i	;?0:
@subject0:
@sourceso;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i
;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h1?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h2?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h3?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h4?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h5?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?h6?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i ;?o;??;?i?;?i";?0;?0;?i	;?0;?i	o;"?;![?I"?
?;	To;#?;![?o;$	;%I"?p?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?blockquote?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i	;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?pre?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?hr?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?I"?
?;	To;#?;![?o;$	;%I"?dl?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?dd?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i
;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?ol?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?ul?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	o;"?;![?o;#?;![?o;$	;%I"?figure?;	T;&0;?i	;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	;?i	;?0:?@selector_source_rangeo;?	;?o;??;?i	;?i?;?o;??;?i?;?i?;?@?;?@?:
@tabsi?;?[?o:?Sass::Tree::PropNode?;%[?I"?margin?;	T;?[?o: Sass::Script::Tree::Literal?;?o: Sass::Script::Value::String	;?I"?0?;	T;
@?;
:?identifier:"@deprecated_interp_equivalent0;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;*i?:?@prop_syntax:?new;?[?;?0;
@?;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?:?@name_source_rangeo;?	;?@??;?o;??;?i?;?i?;?@?;?@?:?@value_source_rangeo;?	;?o;??;?i?;?i?;?@??;?@?;?@?o;+?;%[?I"?padding?;	T;?[?o;,?;?o;-	;?I"?0?;	T;
@?;
;.;/0;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;*i?;0;1;?[?;?0;
@?;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;2o;?	;?@??;?o;??;?i
;?i?;?@?;?@?;3o;?	;?o;??;?i
;?i?;?@??;?@?;?@?;?0;
@?;?i	;?o;?	;?@??;?o;??;?i?;?i?;?@?;?@?:?@has_childrenTo;??;?[?I"?/**
 * Basic styling
 */?;	T;
;?;?[?;?0;
@?;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i	;?@?;?@?o;??;?[?I"	body?;	T;?o; ?;![?o;"?;![?o;#?;![?o;$	;%I"	body?;	T;&0;?i?;?0;'0;(o;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i
;?0;?0;?i?;?0;?i?;?i?;?0;)o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;*i?;?[?o;+?;%[?I"	font?;	T;?[?o:&Sass::Script::Tree::Interpolation?:?@beforeo:!Sass::Script::Tree::Variable?;%I"?base-font-weight?;	T:?@underscored_nameI"?base_font_weight?;	T;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;?@?;
@?:	@mido;7?;%I"?base-font-size?;	T;8I"?base_font_size?;	T;?i?;?o;?	;?o;??;?i?;?i";?o;??;?i?;?i1;?@?;?@?;?@?;
@?:?@aftero;5?;6o;5?;60;9o;,	;?o;-	;?I"?/?;	T;
@?;
;.;/0;?i?;?o;?	;?o;??;?i?;?i2;?o;??;?i?;?i3;?@?;?@?;?@?;:0:?@whitespace_before0:?@whitespace_afterF:?@originally_textT:?@warn_for_colorF:?@deprecation:	none;?i?;?o;?	;?@?#?;?o;??;?i?;?i3;?@?;?@?;?@?;
@?;9o;7?;%I"?base-line-height?;	T;8I"?base_line_height?;	T;?i?;?o;?	;?o;??;?i?;?i5;?o;??;?i?;?iF;?@?;?@?;?@?;
@?;:o;7?;%I"?base-font-family?;	T;8I"?base_font_family?;	T;?i?;?o;?	;?o;??;?i?;?iH;?o;??;?i?;?iY;?@?;?@?;?@?;

=====================================================
== File: src/homepage/.sass-cache/1d0a46e57975118413d176685dbd41641eaa56fa/_layout.scssc
=====================================================
3.7.4
fb3a3a30d84791861122a65d6082b602d0d48039
??o:?Sass::Tree::RootNode?:?@children[?o:?Sass::Tree::CommentNode?:?@value[?I"?/**
 * Site header
 */?:?ET:
@type:?normal;?[?:?@filename0:
@options{?:
@linei?:?@source_rangeo:?Sass::Source::Range	:?@start_poso:?Sass::Source::Position?;?i?:?@offseti?:
@end_poso;??;?i?;?i	:
@fileI"D/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass/minima/_layout.scss?;	T:?@importero: Sass::Importers::Filesystem?:
@rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@real_rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@same_name_warningso:?Set?:
@hash}?Fo:?Sass::Tree::RuleNode?:
@rule[?I"?.site-header?;	T:?@parsed_ruleso:"Sass::Selector::CommaSequence?:
@members[?o:?Sass::Selector::Sequence?;![?o:#Sass::Selector::SimpleSequence?;![?o:?Sass::Selector::Class?:
@nameI"?site-header?;	T;?i	;?0:
@subject0:
@sourceso;??;?}?F;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?0;?0;?i	;?0;?i	;?i	;?0:?@selector_source_rangeo;?	;?o;??;?i	;?i?;?o;??;?i	;?i?;?@?;?@?:
@tabsi?;?[
o:?Sass::Tree::PropNode?;%[?I"?border-top?;	T;?[?o:$Sass::Script::Tree::ListLiteral?:?@elements[?o: Sass::Script::Tree::Literal	;?o: Sass::Script::Value::Number
;?i
;
@?:?@numerator_units[?I"?px?;	T:?@denominator_units[?:?@originalI"?5px?;	T;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;?@?o;-	;?o: Sass::Script::Value::String	;?I"
solid?;	T;
@?;
:?identifier:"@deprecated_interp_equivalent0;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i?;?@?;?@?;?@?o:!Sass::Script::Tree::Variable?;%I"?grey-color-dark?;	T:?@underscored_nameI"?grey_color_dark?;	T;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i.;?@?;?@?;?@?;
@?:?@separator:
space:?@bracketedF;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i.;?@?;?@?;?@?;
@?;)i?:?@prop_syntax:?new;?[?;?0;
@?;?i
;?o;?	;?o;??;?i
;?i?;?o;??;?i
;?i.;?@?;?@?:?@name_source_rangeo;?	;?@I;?o;??;?i
;?i?;?@?;?@?:?@value_source_rangeo;?	;?o;??;?i
;?i?;?@J;?@?;?@?o;*?;%[?I"?border-bottom?;	T;?[?o;+?;,[?o;-	;?o;.
;?i?;
@?;/[?I"?px?;	T;0[?;1I"?1px?;	T;?i?;?o;?	;?o;??;?i?;?i?;?o;??;?i?;?i?;?@?;?@?;?@?o;-	;?o;2	;?I"
solid?;	T;
@?;

=====================================================
== File: src/homepage/.sass-cache/0d97c95486dbfb22208e2f940de32f180caddfba/minima.scssc
=====================================================
3.7.4
65ca0a3cfab5f364e3319d8e45e2a88d106358eb
??o:?Sass::Tree::RootNode?:?@children[?o:?Sass::Tree::CharsetNode?:
@nameI"
utf-8?:?ET;?[?:?@filename0:
@options{?:
@linei?:?@source_rangeo:?Sass::Source::Range	:?@start_poso:?Sass::Source::Position?;?i?:?@offseti?:
@end_poso;??;?i?;?i?:
@fileI"</var/lib/gems/3.0.0/gems/minima-2.5.1/_sass/minima.scss?;	T:?@importero: Sass::Importers::Filesystem?:
@rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@real_rootI"0/var/lib/gems/3.0.0/gems/minima-2.5.1/_sass?;	F:?@same_name_warningso:?Set?:
@hash}?Fo:?Sass::Tree::CommentNode?:?@value[?I"-/* Define defaults for each variable. */?;	T:
@type:?silent;?[?;
0;?@
;?i?;
o;?	;?o;??;?i?;?i?;?o;??;?i?;?i+;?@?;?@?o:?Sass::Tree::VariableNode?;?I"?base-font-family?;	T:
@expro:$Sass::Script::Tree::ListLiteral?:?@elements[?o: Sass::Script::Tree::Literal	;?o: Sass::Script::Value::String	;?I"?-apple-system?;	T;?@
;?:?identifier:"@deprecated_interp_equivalent0;?i
;
o;?	;?o;??;?i
;?i?;?o;??;?i
;?i&;?@?;?@?;
@?o;#	;?o;$	;?I"?BlinkMacSystemFont?;	T;?@
;?;%;&0;?i
;
o;?	;?o;??;?i
;?i(;?o;??;?i
;?i:;?@?;?@?;
@?o;#	;?o;$	;?I"
Segoe UI?;	T;?@
;?:?string;&0;?i
;
o;?	;?o;??;?i
;?i<;?o;??;?i
;?iF;?@?;?@?;
@?o;#	;?o;$	;?I"?Roboto?;	T;?@
;?;%;&0;?i
;
o;?	;?o;??;?i
;?iH;?o;??;?i
;?iN;?@?;?@?;
@?o;#	;?o;$	;?I"?Helvetica?;	T;?@
;?;%;&0;?i
;
o;?	;?o;??;?i
;?iP;?o;??;?i
;?iY;?@?;?@?;
@?o;#	;?o;$	;?I"
Arial?;	T;?@
;?;%;&0;?i
;

=====================================================
== File: src/homepage/_site/about.md
=====================================================
This is the base Jekyll theme. You can find out more info about customizing your Jekyll theme, as well as basic Jekyll usage documentation at [jekyllrb.com](http://jekyllrb.com/)

You can find the source code for the Jekyll new theme at:
{% include icon-github.html username="jekyll" %} /
[minima](https://github.com/jekyll/minima)

You can find the source code for Jekyll at
{% include icon-github.html username="jekyll" %} /
[jekyll](https://github.com/jekyll/jekyll)


## How to post new articles on Jekyll


#### The Posts Folder

As explained on the [directory structure](https://jekyllrb.com/docs/structure/) page, the _posts folder is where your blog posts will live:

```
.
├── _drafts
├── _includes
├── _layouts
├── _posts
|   ├── 2007-10-29-why-every-programmer-should-play-nethack.md
|   └── 2009-04-26-barcamp-boston-4-roundup.md
├── _data
├── _site
├── .jekyll-metadata
└── index.html
```

The files extension is Markdown.


#### Front Matter


The front matter is where Jekyll starts to get really cool. Any file that contains a YAML front matter block will be processed by Jekyll as a special file. The front matter must be the first thing in the file and must take the form of valid YAML set between triple-dashed lines. Here is a basic example:

```
---
layout: post
title:  "Welcome to Jekyll"
date:   2016-08-29 16:13:22 +0200
tags: 
---
```

* ```Layout``` attribute must be always Post to load the good HTM-CSS template of the page

=====================================================
== File: src/homepage/_site/images/james-alt.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
	<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
		l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
		c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
		c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
		c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
		c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
		c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
		c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
	<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
		c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
		c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
		c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
		c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
		C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
		c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
		c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
		C16.586,22.84,14.938,21.717,13.25,20.418z"/>
	<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
		c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
		c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
		c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
		c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
		c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
		c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
		c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
		c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
		c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
		c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>

=====================================================
== File: src/homepage/_site/images/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
	 viewBox="-223 283 164 228" style="enable-background:new -223 283 164 228;" xml:space="preserve">
<style type="text/css">
	.st0{display:none;}
	.st1{display:inline;}
	.st2{fill:#FFFFFF;}
	.st3{fill:#E74A24;}
	.st4{fill:none;}
	.st5{fill:url(#SVGID_1_);}
	.st6{fill:#E4262A;}
	.st7{font-family:'Poppins-Regular';}
	.st8{font-size:28px;}
</style>
<g id="Calque_2" class="st0">
	<rect x="-233.5" y="269.3" class="st1" width="186" height="258"/>
</g>
<g id="Calque_1">
	<g>
		<circle class="st2" cx="-141.1" cy="342.3" r="59.3"/>
		<path class="st3" d="M-100.2,317.9c-3.2-2.1-6.5-3.9-9.9-4.7c-3.4-0.9-7-0.7-10.2,0.7l-0.6,0.3l-0.3,0.1l-0.2,0.1l-0.1,0l0,0l0,0
			c0,0-0.1,0,0,0l0,0c-0.4,0.3-0.9,0.5-1.3,0.7c-0.9,0.5-1.8,0.9-2.7,1.2c-1.9,0.6-3.8,1.1-5.9,0.9c-1-0.1-2-0.5-2.9-1.1
			c-0.9-0.6-1.5-1.4-2-2.3c-0.9-1.8-1.2-3.7-1.3-5.6c0.3,1.9,0.9,3.7,1.9,5.2c0.5,0.7,1.2,1.4,1.9,1.8c0.8,0.4,1.6,0.6,2.5,0.7
			c1.7,0.1,3.5-0.4,5.2-1.2c0.8-0.4,1.6-0.8,2.4-1.2c0.4-0.2,0.8-0.5,1.1-0.7l0.7-0.4c0.2-0.1,0.4-0.3,0.7-0.4
			c1.8-1,3.8-1.6,5.8-1.7c2-0.1,4.1,0.1,6,0.8c1.9,0.6,3.7,1.6,5.2,2.8C-102.6,314.9-101.2,316.3-100.2,317.9z"/>
		<path class="st4" d="M-172.3,334c-0.3,0.2,8.2,10.4,20.9,20c3.7,2.9,7.4,5.3,10.7,7.4c0.3-0.4,0.5-0.8,0.7-1.1
			c-3.2-2.1-6.8-4.6-10.5-7.4C-163.1,343.3-171.9,333.7-172.3,334z"/>
		
			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="8.0298" y1="783.6619" x2="46.1336" y2="783.6619" gradientTransform="matrix(-0.1008 -0.9949 -0.9949 0.1008 623.7179 292.7814)">
			<stop  offset="0" style="stop-color:#FBC315"/>
			<stop  offset="0.4969" style="stop-color:#E74A24"/>
			<stop  offset="1" style="stop-color:#E4262A"/>
		</linearGradient>
		<path class="st5" d="M-152.8,353.1c-12.7-9.6-21.2-19.7-20.9-20c0.3-0.3,9.2,9.3,21.8,18.8c3.7,2.8,7.3,5.3,10.5,7.4
			c0-0.1,0.1-0.1,0.1-0.2c0.5-1,0.9-2.1,1.2-3.2c-2.3-4.5-7.9-10.8-14.4-16.5c-1.5-1.3-3-2.4-4.5-3.4c-0.3,2.7-1,4.6-1,4.6
			c0,0-0.7-2.6-0.7-5.7c-1-0.6-2.1-1.2-3.1-1.7c0,3.1-0.9,5.4-0.9,5.4c0,0-1.8-3.1-2-6.8c0,0,0,0,0-0.1c-6.1-2.8-11.3-4.2-11.3-4.2
			c-0.1-0.1,0.4,13,10.1,23c0.3,0,0.7,0,1,0c3.5,0,6.5,1.3,6.5,1.3c0,0-1.8,1.1-4.6,1.5c1,0.8,2,1.5,3,2.1c2.5-0.9,4.7-1.2,4.7-1.2
			c0,0-1.1,1.1-3,2.2c6.7,3.7,12.8,5.6,16.7,5.8c0.5-0.6,1-1.2,1.4-1.8C-145.4,358.4-149,356-152.8,353.1z"/>
		<path class="st6" d="M-107.5,317.7c-2.4,0.2-4.9,0.6-7.3,1.3c-4.8,1.4-9.5,3.8-13.4,7.5c-2,1.8-3.6,4-5,6.3
			c-1.4,2.3-2.5,4.8-3.2,7.4c-0.7,2.6-1.2,5.2-1.3,7.8c0,0.6-0.1,1.3-0.1,2l0,0.9l0,0.8c0,1-0.1,2-0.3,3c-0.1,0.7-0.3,1.5-0.5,2.2
			c-0.3,1.1-0.7,2.2-1.2,3.2c0,0.1-0.1,0.1-0.1,0.2c-0.2,0.4-0.5,0.8-0.7,1.1c-0.4,0.6-0.9,1.2-1.4,1.8c-0.4,0.4-0.8,0.8-1.2,1.2
			c-2.9,2.5-6.9,4.3-11.1,5.4c-4.3,1.1-8.9,1.7-13.5,2.1c-4.7,0.3-9.4,0.4-14.2,0.2c4.5,1.8,9.2,2.9,14,3.7
			c4.8,0.7,9.8,0.9,14.8,0.3c2.5-0.3,5.1-0.9,7.6-1.8c2.5-0.9,5-2.1,7.2-3.8c2.3-1.7,4.2-3.9,5.7-6.4c0.7-1.3,1.3-2.6,1.8-3.9
			c0.5-1.3,0.8-2.7,1-4.1c0.2-1.4,0.4-2.7,0.4-4.1c0-0.3,0-0.7,0-1l0-0.9c0-0.5,0-1,0-1.6c0.1-2.1,0.4-4.2,0.8-6.2
			c0.9-4,2.7-7.8,5.3-11c2.6-3.2,6.1-6,10.1-8.2c4-2.2,8.3-3.9,13-5.2C-102.6,317.5-105,317.5-107.5,317.7z"/>
	</g>
	<g>
		<path class="st2" d="M-217.7,479.8c-1.9,0-3.4-0.2-4.7-0.7v-5.7c1.6,0.4,3,0.6,4.2,0.6c3.7,0,5.6-2.4,5.6-7.1v-40.3h6.8v40.1
			c0,4.3-1,7.5-3,9.8C-210.8,478.7-213.8,479.8-217.7,479.8z"/>

=====================================================
== File: src/homepage/_site/assets/main.css
=====================================================
/**
 * Reset some basic elements
 */
body, h1, h2, h3, h4, h5, h6,
p, blockquote, pre, hr,
dl, dd, ol, ul, figure {
  margin: 0;
  padding: 0; }

/**
 * Basic styling
 */
body {
  font: 400 16px/1.5 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
  color: #111;
  background-color: #fdfdfd;
  -webkit-text-size-adjust: 100%;
  -webkit-font-feature-settings: "kern" 1;
  -moz-font-feature-settings: "kern" 1;
  -o-font-feature-settings: "kern" 1;
  font-feature-settings: "kern" 1;
  font-kerning: normal;
  display: flex;
  min-height: 100vh;
  flex-direction: column; }

/**
 * Set `margin-bottom` to maintain vertical rhythm
 */
h1, h2, h3, h4, h5, h6,
p, blockquote, pre,
ul, ol, dl, figure,
.highlight {
  margin-bottom: 15px; }

/**
 * `main` element
 */
main {
  display: block;
  /* Default value of `display` of `main` element is 'inline' in IE 11. */ }

/**
 * Images
 */
img {
  max-width: 100%;
  vertical-align: middle; }

/**

=====================================================
== File: src/homepage/_site/assets/css/font-awesome.min.css
=====================================================
/*!
 *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
 *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
 */@font-face{font-family:'FontAwesome';src:url('../../assets/fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../../assets/fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../../assets/fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../../assets/fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../../assets/fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../../assets/fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}

=====================================================
== File: src/homepage/_site/assets/css/main.css
=====================================================
@import url(font-awesome.min.css);
@import "https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400";
@import url('https://fonts.googleapis.com/css?family=Poppins');

/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Reset */

	html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video {
		margin: 0;
		padding: 0;
		border: 0;
		font-size: 12pt;
		font-family: "Poppins", Helvetica, sans-serif;
		vertical-align: baseline;
	}

	article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
		display: block;
	}

	body {
		line-height: 1;
	}

	ol, ul {
		list-style: none;
	}

	blockquote, q {
		quotes: none;
	}

	blockquote:before, blockquote:after, q:before, q:after {
		content: '';
		content: none;
	}

	table {
		border-collapse: collapse;
		border-spacing: 0;
	}

	body {
		-webkit-text-size-adjust: none;
	}

=====================================================
== File: src/homepage/_site/assets/css/lity.min.css
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */.lity{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;white-space:nowrap;background:#0b0b0b;background:rgba(0,0,0,0.9);outline:none !important;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity.lity-opened{opacity:1}.lity.lity-closed{opacity:0}.lity *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.lity-wrap{z-index:9990;position:fixed;top:0;right:0;bottom:0;left:0;text-align:center;outline:none !important}.lity-wrap:before{content:'';display:inline-block;height:100%;vertical-align:middle;margin-right:-0.25em}.lity-loader{z-index:9991;color:#fff;position:absolute;top:50%;margin-top:-0.8em;width:100%;text-align:center;font-size:14px;font-family:Arial,Helvetica,sans-serif;opacity:0;-webkit-transition:opacity .3s ease;-o-transition:opacity .3s ease;transition:opacity .3s ease}.lity-loading .lity-loader{opacity:1}.lity-container{z-index:9992;position:relative;text-align:left;vertical-align:middle;display:inline-block;white-space:normal;max-width:100%;max-height:100%;outline:none !important}.lity-content{z-index:9993;width:100%;-webkit-transform:scale(1);-ms-transform:scale(1);-o-transform:scale(1);transform:scale(1);-webkit-transition:-webkit-transform .3s ease;transition:-webkit-transform .3s ease;-o-transition:-o-transform .3s ease;transition:transform .3s ease;transition:transform .3s ease, -webkit-transform .3s ease, -o-transform .3s ease}.lity-loading .lity-content,.lity-closed .lity-content{-webkit-transform:scale(.8);-ms-transform:scale(.8);-o-transform:scale(.8);transform:scale(.8)}.lity-content:after{content:'';position:absolute;left:0;top:0;bottom:0;display:block;right:0;width:auto;height:auto;z-index:-1;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6)}.lity-close{z-index:9994;width:35px;height:35px;position:fixed;right:0;top:0;-webkit-appearance:none;cursor:pointer;text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close::-moz-focus-inner{border:0;padding:0}.lity-close:hover,.lity-close:focus,.lity-close:active,.lity-close:visited{text-decoration:none;text-align:center;padding:0;color:#fff;font-style:normal;font-size:35px;font-family:Arial,Baskerville,monospace;line-height:35px;text-shadow:0 1px 2px rgba(0,0,0,0.6);border:0;background:none;outline:none;-webkit-box-shadow:none;box-shadow:none}.lity-close:active{top:1px}.lity-image img{max-width:100%;display:block;line-height:0;border:0}.lity-iframe .lity-container,.lity-youtube .lity-container,.lity-vimeo .lity-container,.lity-facebookvideo .lity-container,.lity-googlemaps .lity-container{width:100%;max-width:964px}.lity-iframe-container{width:100%;height:0;padding-top:56.25%;overflow:auto;pointer-events:auto;-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-overflow-scrolling:touch}.lity-iframe-container iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;-webkit-box-shadow:0 0 8px rgba(0,0,0,0.6);box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}.lity-hide{display:none}

=====================================================
== File: src/homepage/_site/assets/css/ie8.css
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Type */

	body {
		color: #ffffff;
	}

/* Button */

	.button {
		position: relative;
		border: solid 1px !important;
	}

		.button.special {
			border: none !important;
		}

/* Icon */

	.icon.major {
		-ms-behavior: url("assets/js/ie/PIE.htc");
	}

		.icon.major:before {
			font-size: 4em;
			border: 0;
		}

/* Spotlight */

	.spotlight .image {
		position: relative;
		-ms-behavior: url("assets/js/ie/PIE.htc");
	}

		.spotlight .image img {
			position: relative;
			-ms-behavior: url("assets/js/ie/PIE.htc");
		}

/* Features */

	.features li {
		width: 29%;

=====================================================
== File: src/homepage/_site/assets/css/ie9.css
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

/* Spotlight */

	.spotlight:after {
		content: '';
		display: block;
		clear: both;
	}

	.spotlight .content {
		float: left;
		width: 60%;
	}

	.spotlight .image {
		float: left;
	}

/* Features */

	.features:after {
		content: '';
		display: block;
		clear: both;
	}

	.features li {
		float: left;
	}

/* Statistics */

	.statistics {
		display: inline-block;
	}

		.statistics:after {
			content: '';
			display: block;
			clear: both;
		}

		.statistics li {
			float: left;
			padding: 1.5em 2.5em;

=====================================================
== File: src/homepage/_site/assets/css/test.html
=====================================================
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Calque_1" x="0px" y="0px" width="841.89px" height="595.28px" viewBox="0 0 841.89 595.28" enable-background="new 0 0 841.89 595.28" xml:space="preserve">
<circle fill="#FFFFFF" cx="672.754" cy="148.406" r="66.5"/>
<g>
  <path fill="#E64821" d="M718.72,121.022c-3.564-2.383-7.259-4.322-11.117-5.314c-3.85-1.014-7.823-0.778-11.496,0.742l-0.691,0.288   l-0.342,0.154l-0.169,0.079l-0.087,0.04l-0.042,0.02l-0.022,0.01c0.022-0.015-0.064,0.039,0.048-0.031l-0.011,0.006   c-0.5,0.313-0.969,0.572-1.462,0.83c-0.978,0.509-1.981,0.965-3.021,1.341c-2.077,0.729-4.318,1.242-6.619,0.96   c-1.14-0.15-2.273-0.547-3.228-1.208c-0.954-0.659-1.714-1.552-2.235-2.532c-1.052-1.972-1.373-4.147-1.439-6.262   c0.386,2.077,0.973,4.162,2.13,5.836c0.581,0.827,1.298,1.534,2.146,1.999c0.842,0.471,1.794,0.699,2.763,0.743   c1.946,0.094,3.931-0.496,5.777-1.31c0.931-0.407,1.84-0.872,2.715-1.393c0.433-0.256,0.877-0.537,1.262-0.808l0.763-0.498   c0.242-0.141,0.476-0.302,0.729-0.428c1.985-1.068,4.221-1.805,6.523-1.96c2.296-0.168,4.614,0.158,6.75,0.882   c2.142,0.716,4.112,1.807,5.864,3.129C715.953,117.664,717.52,119.218,718.72,121.022z"/>
  <g>
    <path fill="none" d="M637.856,139.139c-0.337,0.258,9.157,11.617,23.405,22.405c4.192,3.205,8.29,5.973,11.994,8.286    c0.281-0.416,0.542-0.842,0.787-1.279c-3.608-2.39-7.623-5.184-11.763-8.348C648.18,149.535,638.222,138.782,637.856,139.139z"/>

      <linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="1192.2021" y1="229.4492" x2="1234.9417" y2="229.4492" gradientTransform="matrix(-0.1008 -0.9949 0.9949 -0.1008 547.1743 1381.7705)">
      <stop offset="0" style="stop-color:#FCC30E"/>
      <stop offset="0.4969" style="stop-color:#E64821"/>
      <stop offset="1" style="stop-color:#E42328"/>
    </linearGradient>
    <path fill="url(#SVGID_5_)" d="M659.708,160.542c-14.247-10.789-23.741-22.147-23.405-22.406    c0.366-0.357,10.323,10.396,24.424,21.064c4.14,3.164,8.154,5.958,11.763,8.348c0.048-0.086,0.104-0.168,0.152-0.256    c0.592-1.131,1.046-2.347,1.401-3.617c-2.531-5.059-8.833-12.067-16.158-18.494c-1.629-1.413-3.325-2.666-5.04-3.792    c-0.373,3.018-1.118,5.178-1.123,5.177c0,0-0.831-2.873-0.76-6.369c-1.156-0.697-2.313-1.347-3.463-1.94    c-0.011,3.443-1.033,6.021-1.038,6.022c0,0.007-2.07-3.492-2.291-7.581c-0.003-0.026-0.003-0.052-0.003-0.076    c-6.875-3.16-12.671-4.681-12.682-4.666c-0.062-0.155,0.428,14.595,11.28,25.836c0.366-0.022,0.735-0.04,1.114-0.039    c3.946,0.008,7.317,1.426,7.323,1.425c0-0.003-2.075,1.235-5.106,1.653c1.103,0.882,2.235,1.681,3.39,2.406    c2.854-1.034,5.221-1.376,5.221-1.376c0-0.005-1.248,1.226-3.314,2.506c7.54,4.161,14.378,6.28,18.711,6.479    c0.586-0.64,1.121-1.313,1.599-2.021C667.998,166.515,663.901,163.747,659.708,160.542z"/>
    <path fill="#E42328" d="M710.524,120.843c-2.746,0.231-5.496,0.723-8.203,1.497c-5.401,1.538-10.711,4.256-15.061,8.381    c-2.191,2.033-4.073,4.437-5.644,7.024c-1.523,2.615-2.755,5.412-3.551,8.303c-0.82,2.884-1.311,5.83-1.479,8.755    c-0.05,0.721-0.077,1.467-0.096,2.221l-0.017,1.005l-0.024,0.862c-0.029,1.145-0.127,2.268-0.303,3.355    c-0.138,0.833-0.329,1.64-0.552,2.429c-0.354,1.27-0.809,2.486-1.4,3.618c-0.048,0.087-0.105,0.169-0.152,0.255    c-0.245,0.438-0.506,0.864-0.787,1.279c-0.479,0.708-1.013,1.381-1.6,2.021c-0.423,0.461-0.865,0.91-1.347,1.333    c-3.241,2.849-7.697,4.804-12.477,6.061c-4.796,1.275-9.926,1.944-15.132,2.303c-5.218,0.352-10.52,0.408-15.913,0.276    c5.027,2.018,10.327,3.3,15.735,4.109c5.415,0.774,10.986,1.024,16.65,0.312c2.825-0.373,5.682-0.975,8.496-1.973    c2.801-1.005,5.597-2.373,8.113-4.309c2.525-1.907,4.765-4.373,6.386-7.192c0.82-1.403,1.494-2.88,2.035-4.386    c0.519-1.511,0.908-3.049,1.171-4.583c0.269-1.535,0.419-3.065,0.479-4.578c0.019-0.379,0.017-0.755,0.021-1.132l0.002-0.989    c0.005-0.574,0.018-1.158,0.049-1.764c0.129-2.384,0.416-4.727,0.939-6.99c1.039-4.525,3.008-8.727,5.973-12.363    c2.961-3.634,6.877-6.692,11.314-9.149c4.449-2.453,9.354-4.38,14.567-5.816C716.026,120.628,713.268,120.607,710.524,120.843z"/>
  </g>
</g>
</svg>

=====================================================
== File: src/homepage/_site/assets/css/lightbox.css
=====================================================
/* Preload images */
body:after {
  content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png);
  display: none;
}

body.lb-disable-scrolling {
  overflow: hidden;
}

.lightboxOverlay {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 9999;
  background-color: black;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
  opacity: 0.8;
  display: none;
}

.lightbox {
  position: absolute;
  left: 0;
  width: 100%;
  z-index: 10000;
  text-align: center;
  line-height: 0;
  font-weight: normal;
}

.lightbox .lb-image {
  display: block;
  height: auto;
  max-width: inherit;
  border-radius: 3px;
}

.lightbox a img {
  border: none;
}

.lb-outerContainer {
  position: relative;
  background-color: white;
  *zoom: 1;
  width: 250px;
  height: 250px;
  margin: 0 auto;
  border-radius: 4px;

=====================================================
== File: src/homepage/_site/assets/minima-social-icons.svg
=====================================================
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

<symbol id="dribbble" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8 16c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm6.747-6.905c-.234-.074-2.115-.635-4.257-.292.894 2.456 1.258 4.456 1.328 4.872 1.533-1.037 2.624-2.68 2.93-4.58zM10.67 14.3c-.102-.6-.5-2.688-1.46-5.18l-.044.014C5.312 10.477 3.93 13.15 3.806 13.4c1.158.905 2.614 1.444 4.194 1.444.947 0 1.85-.194 2.67-.543zm-7.747-1.72c.155-.266 2.03-3.37 5.555-4.51.09-.03.18-.056.27-.08-.173-.39-.36-.778-.555-1.16-3.413 1.02-6.723.977-7.023.97l-.003.208c0 1.755.665 3.358 1.756 4.57zM1.31 6.61c.307.005 3.122.017 6.318-.832-1.132-2.012-2.353-3.705-2.533-3.952-1.912.902-3.34 2.664-3.784 4.785zM6.4 1.368c.188.253 1.43 1.943 2.548 4 2.43-.91 3.46-2.293 3.582-2.468C11.323 1.827 9.736 1.176 8 1.176c-.55 0-1.087.066-1.6.19zm6.89 2.322c-.145.194-1.29 1.662-3.816 2.694.16.325.31.656.453.99.05.117.1.235.147.352 2.274-.286 4.533.172 4.758.22-.015-1.613-.59-3.094-1.543-4.257z"/></symbol>

<symbol id="facebook" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M15.117 0H.883C.395 0 0 .395 0 .883v14.234c0 .488.395.883.883.883h7.663V9.804H6.46V7.39h2.086V5.607c0-2.066 1.262-3.19 3.106-3.19.883 0 1.642.064 1.863.094v2.16h-1.28c-1 0-1.195.48-1.195 1.18v1.54h2.39l-.31 2.42h-2.08V16h4.077c.488 0 .883-.395.883-.883V.883C16 .395 15.605 0 15.117 0" fill-rule="nonzero"/></symbol>

<symbol id="flickr" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M0 8c0 2.05 1.662 3.71 3.71 3.71 2.05 0 3.713-1.66 3.713-3.71S5.76 4.29 3.71 4.29C1.663 4.29 0 5.95 0 8zm8.577 0c0 2.05 1.662 3.71 3.712 3.71C14.33 11.71 16 10.05 16 8s-1.662-3.71-3.71-3.71c-2.05 0-3.713 1.66-3.713 3.71z"/></symbol>

<symbol id="github" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8 0C3.58 0 0 3.582 0 8c0 3.535 2.292 6.533 5.47 7.59.4.075.547-.172.547-.385 0-.19-.007-.693-.01-1.36-2.226.483-2.695-1.073-2.695-1.073-.364-.924-.89-1.17-.89-1.17-.725-.496.056-.486.056-.486.803.056 1.225.824 1.225.824.714 1.223 1.873.87 2.33.665.072-.517.278-.87.507-1.07-1.777-.2-3.644-.888-3.644-3.953 0-.873.31-1.587.823-2.147-.09-.202-.36-1.015.07-2.117 0 0 .67-.215 2.2.82.64-.178 1.32-.266 2-.27.68.004 1.36.092 2 .27 1.52-1.035 2.19-.82 2.19-.82.43 1.102.16 1.915.08 2.117.51.56.82 1.274.82 2.147 0 3.073-1.87 3.75-3.65 3.947.28.24.54.73.54 1.48 0 1.07-.01 1.93-.01 2.19 0 .21.14.46.55.38C13.71 14.53 16 11.53 16 8c0-4.418-3.582-8-8-8"/></symbol>

<symbol id="googleplus" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M5.09 7.273v1.745h2.89c-.116.75-.873 2.197-2.887 2.197-1.737 0-3.155-1.44-3.155-3.215S3.353 4.785 5.09 4.785c.99 0 1.652.422 2.03.786l1.382-1.33c-.887-.83-2.037-1.33-3.41-1.33C2.275 2.91 0 5.19 0 8s2.276 5.09 5.09 5.09c2.94 0 4.888-2.065 4.888-4.974 0-.334-.036-.59-.08-.843H5.09zm10.91 0h-1.455V5.818H13.09v1.455h-1.454v1.454h1.455v1.455h1.46V8.727H16"/></symbol>

<symbol id="instagram" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8 0C5.827 0 5.555.01 4.702.048 3.85.088 3.27.222 2.76.42c-.526.204-.973.478-1.417.923-.445.444-.72.89-.923 1.417-.198.51-.333 1.09-.372 1.942C.008 5.555 0 5.827 0 8s.01 2.445.048 3.298c.04.852.174 1.433.372 1.942.204.526.478.973.923 1.417.444.445.89.72 1.417.923.51.198 1.09.333 1.942.372.853.04 1.125.048 3.298.048s2.445-.01 3.298-.048c.852-.04 1.433-.174 1.942-.372.526-.204.973-.478 1.417-.923.445-.444.72-.89.923-1.417.198-.51.333-1.09.372-1.942.04-.853.048-1.125.048-3.298s-.01-2.445-.048-3.298c-.04-.852-.174-1.433-.372-1.942-.204-.526-.478-.973-.923-1.417-.444-.445-.89-.72-1.417-.923-.51-.198-1.09-.333-1.942-.372C10.445.008 10.173 0 8 0zm0 1.44c2.136 0 2.39.01 3.233.048.78.036 1.203.166 1.485.276.374.145.64.318.92.598.28.28.453.546.598.92.11.282.24.705.276 1.485.038.844.047 1.097.047 3.233s-.01 2.39-.05 3.233c-.04.78-.17 1.203-.28 1.485-.15.374-.32.64-.6.92-.28.28-.55.453-.92.598-.28.11-.71.24-1.49.276-.85.038-1.1.047-3.24.047s-2.39-.01-3.24-.05c-.78-.04-1.21-.17-1.49-.28-.38-.15-.64-.32-.92-.6-.28-.28-.46-.55-.6-.92-.11-.28-.24-.71-.28-1.49-.03-.84-.04-1.1-.04-3.23s.01-2.39.04-3.24c.04-.78.17-1.21.28-1.49.14-.38.32-.64.6-.92.28-.28.54-.46.92-.6.28-.11.7-.24 1.48-.28.85-.03 1.1-.04 3.24-.04zm0 2.452c-2.27 0-4.108 1.84-4.108 4.108 0 2.27 1.84 4.108 4.108 4.108 2.27 0 4.108-1.84 4.108-4.108 0-2.27-1.84-4.108-4.108-4.108zm0 6.775c-1.473 0-2.667-1.194-2.667-2.667 0-1.473 1.194-2.667 2.667-2.667 1.473 0 2.667 1.194 2.667 2.667 0 1.473-1.194 2.667-2.667 2.667zm5.23-6.937c0 .53-.43.96-.96.96s-.96-.43-.96-.96.43-.96.96-.96.96.43.96.96z"/></symbol>

<symbol id="linkedin" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M13.632 13.635h-2.37V9.922c0-.886-.018-2.025-1.234-2.025-1.235 0-1.424.964-1.424 1.96v3.778h-2.37V6H8.51v1.04h.03c.318-.6 1.092-1.233 2.247-1.233 2.4 0 2.845 1.58 2.845 3.637v4.188zM3.558 4.955c-.762 0-1.376-.617-1.376-1.377 0-.758.614-1.375 1.376-1.375.76 0 1.376.617 1.376 1.375 0 .76-.617 1.377-1.376 1.377zm1.188 8.68H2.37V6h2.376v7.635zM14.816 0H1.18C.528 0 0 .516 0 1.153v13.694C0 15.484.528 16 1.18 16h13.635c.652 0 1.185-.516 1.185-1.153V1.153C16 .516 15.467 0 14.815 0z" fill-rule="nonzero"/></symbol>

<symbol id="pinterest" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M8 0C3.582 0 0 3.582 0 8c0 3.39 2.108 6.285 5.084 7.45-.07-.633-.133-1.604.028-2.295.146-.625.938-3.977.938-3.977s-.24-.48-.24-1.188c0-1.11.646-1.943 1.448-1.943.683 0 1.012.513 1.012 1.127 0 .687-.436 1.713-.662 2.664-.19.797.4 1.445 1.185 1.445 1.42 0 2.514-1.498 2.514-3.662 0-1.91-1.376-3.25-3.342-3.25-2.276 0-3.61 1.71-3.61 3.47 0 .69.263 1.43.593 1.83.066.08.075.15.057.23-.06.25-.196.8-.223.91-.035.15-.115.18-.268.11C3.516 10.46 2.89 9 2.89 7.82c0-2.52 1.834-4.84 5.287-4.84 2.774 0 4.932 1.98 4.932 4.62 0 2.76-1.74 4.98-4.16 4.98-.81 0-1.57-.42-1.84-.92l-.5 1.9c-.18.698-.67 1.57-1 2.1.75.23 1.54.357 2.37.357 4.41 0 8-3.58 8-8s-3.59-8-8-8z" fill-rule="nonzero"/></symbol>

<symbol id="rss" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M12.8 16C12.8 8.978 7.022 3.2 0 3.2V0c8.777 0 16 7.223 16 16h-3.2zM2.194 11.61c1.21 0 2.195.985 2.195 2.196 0 1.21-.99 2.194-2.2 2.194C.98 16 0 15.017 0 13.806c0-1.21.983-2.195 2.194-2.195zM10.606 16h-3.11c0-4.113-3.383-7.497-7.496-7.497v-3.11c5.818 0 10.606 4.79 10.606 10.607z"/></symbol>

<symbol id="stackoverflow" class="svg-icon" xmlns="http://www.w3.org/2000/svg" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M12.658 14.577v-4.27h1.423V16H1.23v-5.693h1.42v4.27h10.006zm-8.583-1.423h7.16V11.73h-7.16v1.424zm.173-3.235l6.987 1.46.3-1.38L4.55 8.54l-.302 1.38zm.906-3.37l6.47 3.02.602-1.3-6.47-3.02-.602 1.29zm1.81-3.19l5.478 4.57.906-1.08L7.87 2.28l-.9 1.078zM10.502 0L9.338.863l4.27 5.735 1.164-.862L10.5 0z"/></symbol>

<symbol id="twitter" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M16 3.038c-.59.26-1.22.437-1.885.517.677-.407 1.198-1.05 1.443-1.816-.634.37-1.337.64-2.085.79-.598-.64-1.45-1.04-2.396-1.04-1.812 0-3.282 1.47-3.282 3.28 0 .26.03.51.085.75-2.728-.13-5.147-1.44-6.766-3.42C.83 2.58.67 3.14.67 3.75c0 1.14.58 2.143 1.46 2.732-.538-.017-1.045-.165-1.487-.41v.04c0 1.59 1.13 2.918 2.633 3.22-.276.074-.566.114-.865.114-.21 0-.41-.02-.61-.058.42 1.304 1.63 2.253 3.07 2.28-1.12.88-2.54 1.404-4.07 1.404-.26 0-.52-.015-.78-.045 1.46.93 3.18 1.474 5.04 1.474 6.04 0 9.34-5 9.34-9.33 0-.14 0-.28-.01-.42.64-.46 1.2-1.04 1.64-1.7z" fill-rule="nonzero"/></symbol>

<symbol id="youtube" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414"><path d="M0 7.345c0-1.294.16-2.59.16-2.59s.156-1.1.636-1.587c.608-.637 1.408-.617 1.764-.684C3.84 2.36 8 2.324 8 2.324s3.362.004 5.6.166c.314.038.996.04 1.604.678.48.486.636 1.588.636 1.588S16 6.05 16 7.346v1.258c0 1.296-.16 2.59-.16 2.59s-.156 1.102-.636 1.588c-.608.638-1.29.64-1.604.678-2.238.162-5.6.166-5.6.166s-4.16-.037-5.44-.16c-.356-.067-1.156-.047-1.764-.684-.48-.487-.636-1.587-.636-1.587S0 9.9 0 8.605v-1.26zm6.348 2.73V5.58l4.323 2.255-4.32 2.24z"/></symbol>

<symbol id="mastodon" fill-rule="evenodd" clip-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.414">
  <path transform="scale(0.07)" d="M211.80734 139.0875c-3.18125 16.36625-28.4925 34.2775-57.5625 37.74875-15.15875 1.80875-30.08375 3.47125-45.99875 2.74125-26.0275-1.1925-46.565-6.2125-46.565-6.2125 0 2.53375.15625 4.94625.46875 7.2025 3.38375 25.68625 25.47 27.225 46.39125 27.9425 21.11625.7225 39.91875-5.20625 39.91875-5.20625l.8675 19.09s-14.77 7.93125-41.08125 9.39c-14.50875.7975-32.52375-.365-53.50625-5.91875C9.23234 213.82 1.40609 165.31125.20859 116.09125c-.365-14.61375-.14-28.39375-.14-39.91875 0-50.33 32.97625-65.0825 32.97625-65.0825C49.67234 3.45375 78.20359.2425 107.86484 0h.72875c29.66125.2425 58.21125 3.45375 74.8375 11.09 0 0 32.975 14.7525 32.975 65.0825 0 0 .41375 37.13375-4.59875 62.915"/>
  <path transform="scale(0.07)" fill="#FFF" d="M177.50984 80.077v60.94125h-24.14375v-59.15c0-12.46875-5.24625-18.7975-15.74-18.7975-11.6025 0-17.4175 7.5075-17.4175 22.3525v32.37625H96.20734V85.42325c0-14.845-5.81625-22.3525-17.41875-22.3525-10.49375 0-15.74 6.32875-15.74 18.7975v59.15H38.90484V80.077c0-12.455 3.17125-22.3525 9.54125-29.675 6.56875-7.3225 15.17125-11.07625 25.85-11.07625 12.355 0 21.71125 4.74875 27.8975 14.2475l6.01375 10.08125 6.015-10.08125c6.185-9.49875 15.54125-14.2475 27.8975-14.2475 10.6775 0 19.28 3.75375 25.85 11.07625 6.36875 7.3225 9.54 17.22 9.54 29.675"/>
</symbol>


</svg>

=====================================================
== File: src/homepage/_site/assets/fonts/fontawesome-webfont.svg
=====================================================
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="fontawesomeregular" horiz-adv-x="1536" >
<font-face units-per-em="1792" ascent="1536" descent="-256" />
<missing-glyph horiz-adv-x="448" />
<glyph unicode=" "  horiz-adv-x="448" />
<glyph unicode="&#x09;" horiz-adv-x="448" />
<glyph unicode="&#xa0;" horiz-adv-x="448" />
<glyph unicode="&#xa8;" horiz-adv-x="1792" />
<glyph unicode="&#xa9;" horiz-adv-x="1792" />
<glyph unicode="&#xae;" horiz-adv-x="1792" />
<glyph unicode="&#xb4;" horiz-adv-x="1792" />
<glyph unicode="&#xc6;" horiz-adv-x="1792" />
<glyph unicode="&#xd8;" horiz-adv-x="1792" />
<glyph unicode="&#x2000;" horiz-adv-x="768" />
<glyph unicode="&#x2001;" horiz-adv-x="1537" />
<glyph unicode="&#x2002;" horiz-adv-x="768" />
<glyph unicode="&#x2003;" horiz-adv-x="1537" />
<glyph unicode="&#x2004;" horiz-adv-x="512" />
<glyph unicode="&#x2005;" horiz-adv-x="384" />
<glyph unicode="&#x2006;" horiz-adv-x="256" />
<glyph unicode="&#x2007;" horiz-adv-x="256" />
<glyph unicode="&#x2008;" horiz-adv-x="192" />
<glyph unicode="&#x2009;" horiz-adv-x="307" />
<glyph unicode="&#x200a;" horiz-adv-x="85" />
<glyph unicode="&#x202f;" horiz-adv-x="307" />
<glyph unicode="&#x205f;" horiz-adv-x="384" />
<glyph unicode="&#x2122;" horiz-adv-x="1792" />
<glyph unicode="&#x221e;" horiz-adv-x="1792" />
<glyph unicode="&#x2260;" horiz-adv-x="1792" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />

=====================================================
== File: src/homepage/_site/assets/js/main.js
=====================================================
/*
	Stellar by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
*/

(function($) {

	skel.breakpoints({
		xlarge: '(max-width: 1680px)',
		large: '(max-width: 1280px)',
		medium: '(max-width: 980px)',
		small: '(max-width: 736px)',
		xsmall: '(max-width: 480px)',
		xxsmall: '(max-width: 360px)'
	});

	$(function() {

		var	$window = $(window),
			$body = $('body'),
			$main = $('#main');

		// Disable animations/transitions until the page has loaded.
			$body.addClass('is-loading');

			$window.on('load', function() {
				window.setTimeout(function() {
					$body.removeClass('is-loading');
				}, 100);
			});

		// Fix: Placeholder polyfill.
			$('form').placeholder();

		// Prioritize "important" elements on medium.
			skel.on('+medium -medium', function() {
				$.prioritize(
					'.important\\28 medium\\29',
					skel.breakpoint('medium').active
				);
			});

		// Nav.
			var $nav = $('#nav');

			if ($nav.length > 0) {

				// Shrink effect.
					$main

=====================================================
== File: src/homepage/_site/assets/js/github-fetch.js
=====================================================
let repositoryInfo = {};
let allContributors = [];
const repositoryUrl = "https://api.github.com/repos/apache/james-project";

function getAllCollaborators(callback) {
  if (allContributors.length > 0) {
    callback(allContributors);
  } else {
    $.get(repositoryInfo.contributors_url, function(contributors) {
      allContributors = contributors;
      callback(contributors);
    });
  }
}

function getListContributorDom(contributors) {
  let list = "";
  contributors.sort(function(a, b){
    if(a.login.toLowerCase() < b.login.toLowerCase()) return -1;
    if(a.login.toLowerCase() > b.login.toLowerCase()) return 1;
    return 0;
  });
  for (contributor of contributors) {
    list += `<li class="contributor-card"><a href="` + contributor.html_url + `" alt="` + contributor.login + ` github account"><span class="image contributor-avatar"><img src="` + contributor.avatar_url + `"></span><span class="icon fa-github"></span>` + contributor.login + `</a></li>`;
  }
  return list;
}

function getTotalCommit(callback) {
  $.get("https://api.github.com/repos/apache/james-project/stats/commit_activity", function(data) {
    let total = 0;
    for(week of data) {
      total += week.total;
    }
    callback(total);
  });
}

$(document).ready(function () {
  $.get(repositoryUrl, function(repository) {
    repositoryInfo = repository;
    getAllCollaborators(function(collabs) {
      $('#contributor-num').append(collabs.length);
      let contributors = getListContributorDom(collabs);
      $('#contributor-list').append(contributors);
    });
    getTotalCommit(function(commits) {
      $('#commit-num').append(commits);
    });
    $('#fork-num').append(repositoryInfo.forks_count);

=====================================================
== File: src/homepage/_site/assets/js/jquery.min.js
=====================================================
/*! jQuery v1.11.3 | (c) 2005, 2015 jQuery Foundation, Inc. | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l="1.11.3",m=function(a,b){return new m.fn.init(a,b)},n=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,o=/^-ms-/,p=/-([\da-z])/gi,q=function(a,b){return b.toUpperCase()};m.fn=m.prototype={jquery:l,constructor:m,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=m.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return m.each(this,a,b)},map:function(a){return this.pushStack(m.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},m.extend=m.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||m.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(m.isPlainObject(c)||(b=m.isArray(c)))?(b?(b=!1,f=a&&m.isArray(a)?a:[]):f=a&&m.isPlainObject(a)?a:{},g[d]=m.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},m.extend({expando:"jQuery"+(l+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===m.type(a)},isArray:Array.isArray||function(a){return"array"===m.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!m.isArray(a)&&a-parseFloat(a)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==m.type(a)||a.nodeType||m.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(k.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&m.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(o,"ms-").replace(p,q)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=r(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(n,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(r(Object(a))?m.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=r(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),m.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||m.guid++,e):void 0},now:function(){return+new Date},support:k}),m.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function r(a){var b="length"in a&&a.length,c=m.type(a);return"function"===c||m.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var s=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function qa(){}qa.prototype=d.filters=d.pseudos,d.setFilters=new qa,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function ra(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;

return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?m.queue(this[0],a):void 0===b?this:this.each(function(){var c=m.queue(this,a,b);m._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&m.dequeue(this,a)})},dequeue:function(a){return this.each(function(){m.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=m.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=m._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=["Top","Right","Bottom","Left"],U=function(a,b){return a=b||a,"none"===m.css(a,"display")||!m.contains(a.ownerDocument,a)},V=m.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===m.type(c)){e=!0;for(h in c)m.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,m.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(m(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav></:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[m.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=Z.test(e)?this.mouseHooks:Y.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new m.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||y,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ca()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ca()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return m.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return m.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=m.extend(new m.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?m.event.trigger(e,null,b):m.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},m.removeEvent=y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===K&&(a[d]=null),a.detachEvent(d,c))},m.Event=function(a,b){return this instanceof m.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?aa:ba):this.type=a,b&&m.extend(this,b),this.timeStamp=a&&a.timeStamp||m.now(),void(this[m.expando]=!0)):new m.Event(a,b)},m.Event.prototype={isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=aa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=aa,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=aa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},m.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){m.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!m.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.submitBubbles||(m.event.special.submit={setup:function(){return m.nodeName(this,"form")?!1:void m.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=m.nodeName(b,"input")||m.nodeName(b,"button")?b.form:void 0;c&&!m._data(c,"submitBubbles")&&(m.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),m._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&m.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return m.nodeName(this,"form")?!1:void m.event.remove(this,"._submit")}}),k.changeBubbles||(m.event.special.change={setup:function(){return X.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(m.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),m.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),m.event.simulate("change",this,a,!0)})),!1):void m.event.add(this,"beforeactivate._change",function(a){var b=a.target;X.test(b.nodeName)&&!m._data(b,"changeBubbles")&&(m.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||m.event.simulate("change",this.parentNode,a,!0)}),m._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return m.event.remove(this,"._change"),!X.test(this.nodeName)}}),k.focusinBubbles||m.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){m.event.simulate(b,a.target,m.event.fix(a),!0)};m.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=m._data(d,b);e||d.addEventListener(a,c,!0),m._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=m._data(d,b)-1;e?m._data(d,b,e):(d.removeEventListener(a,c,!0),m._removeData(d,b))}}}),m.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=ba;else if(!d)return this;return 1===e&&(g=d,d=function(a){return m().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=m.guid++)),this.each(function(){m.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,m(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=ba),this.each(function(){m.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){m.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?m.event.trigger(a,b,c,!0):void 0}});function da(a){var b=ea.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var ea="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fa=/ jQuery\d+="(?:null|\d+)"/g,ga=new RegExp("<(?:"+ea+")[\\s/>]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/<tbody/i,la=/<|&#?\w+;/,ma=/<(?:script|style|link)/i,na=/checked\s*(?:[^=]|=\s*.checked.)/i,oa=/^$|\/(?:java|ecma)script/i,pa=/^true\/(.*)/,qa=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ra={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:k.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?"<table>"!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="<table><tr><td></td><td>t</td></tr></table>",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$a=void 0},m.fx.timer=function(a){m.timers.push(a),a()?m.fx.start():m.timers.pop()},m.fx.interval=13,m.fx.start=function(){_a||(_a=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_a),_a=null},m.fx.speeds={slow:600,fast:200,_default:400},m.fn.delay=function(a,b){return a=m.fx?m.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e;b=y.createElement("div"),b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("<div>").append(m.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},m.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),m.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cc=a.document.documentElement;function dc(a){return m.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}m.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=m.css(a,"position"),l=m(a),n={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=m.css(a,"top"),i=m.css(a,"left"),j=("absolute"===k||"fixed"===k)&&m.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),m.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(n.top=b.top-h.top+g),null!=b.left&&(n.left=b.left-h.left+e),"using"in b?b.using.call(a,n):l.css(n)}},m.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){m.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,m.contains(b,e)?(typeof e.getBoundingClientRect!==K&&(d=e.getBoundingClientRect()),c=dc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===m.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),m.nodeName(a[0],"html")||(c=a.offset()),c.top+=m.css(a[0],"borderTopWidth",!0),c.left+=m.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-m.css(d,"marginTop",!0),left:b.left-c.left-m.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||cc;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cc})}}),m.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);m.fn[a]=function(d){return V(this,function(a,d,e){var f=dc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?m(f).scrollLeft():e,c?e:m(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),m.each(["top","left"],function(a,b){m.cssHooks[b]=La(k.pixelPosition,function(a,c){return c?(c=Ja(a,b),Ha.test(c)?m(a).position()[b]+"px":c):void 0})}),m.each({Height:"height",Width:"width"},function(a,b){m.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){m.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return V(this,function(b,c,d){var e;return m.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?m.css(b,c,g):m.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),m.fn.size=function(){return this.length},m.fn.andSelf=m.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return m});var ec=a.jQuery,fc=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fc),b&&a.jQuery===m&&(a.jQuery=ec),m},typeof b===K&&(a.jQuery=a.$=m),m});

=====================================================
== File: src/homepage/_site/assets/js/lightbox.js
=====================================================
/*!
 * Lightbox v2.8.2
 * by Lokesh Dhakar
 *
 * More info:
 * http://lokeshdhakar.com/projects/lightbox2/
 *
 * Copyright 2007, 2015 Lokesh Dhakar
 * Released under the MIT license
 * https://github.com/lokesh/lightbox2/blob/master/LICENSE
 */

// Uses Node, AMD or browser globals to create a module.
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define(['jquery'], factory);
    } else if (typeof exports === 'object') {
        // Node. Does not work with strict CommonJS, but
        // only CommonJS-like environments that support module.exports,
        // like Node.
        module.exports = factory(require('jquery'));
    } else {
        // Browser globals (root is window)
        root.lightbox = factory(root.jQuery);
    }
}(this, function ($) {

  function Lightbox(options) {
    this.album = [];
    this.currentImageIndex = void 0;
    this.init();

    // options
    this.options = $.extend({}, this.constructor.defaults);
    this.option(options);
  }

  // Descriptions of all options available on the demo site:
  // http://lokeshdhakar.com/projects/lightbox2/index.html#options
  Lightbox.defaults = {
    albumLabel: 'Image %1 of %2',
    alwaysShowNavOnTouchDevices: false,
    fadeDuration: 500,
    fitImagesInViewport: true,
    // maxWidth: 800,
    // maxHeight: 600,
    positionFromTop: 50,
    resizeDuration: 700,
    showImageNumberLabel: true,

=====================================================
== File: src/homepage/_site/assets/js/ie/PIE.htc
=====================================================
<!--
PIE: CSS3 rendering for IE
Version 1.0.0
http://css3pie.com
Dual-licensed for use under the Apache License Version 2.0 or the General Public License (GPL) Version 2.
-->
<PUBLIC:COMPONENT lightWeight="true">
<!-- saved from url=(0014)about:internet -->
<PUBLIC:ATTACH EVENT="oncontentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondocumentready" FOR="element" ONEVENT="init()" />
<PUBLIC:ATTACH EVENT="ondetach" FOR="element" ONEVENT="cleanup()" />

<script type="text/javascript">
var doc = element.document;var f=window.PIE;
if(!f){f=window.PIE={F:"-pie-",nb:"Pie",La:"pie_",Ac:{TD:1,TH:1},cc:{TABLE:1,THEAD:1,TBODY:1,TFOOT:1,TR:1,INPUT:1,TEXTAREA:1,SELECT:1,OPTION:1,IMG:1,HR:1},fc:{A:1,INPUT:1,TEXTAREA:1,SELECT:1,BUTTON:1},Gd:{submit:1,button:1,reset:1},aa:function(){}};try{doc.execCommand("BackgroundImageCache",false,true)}catch(aa){}for(var ba=4,Z=doc.createElement("div"),ca=Z.getElementsByTagName("i"),ga;Z.innerHTML="<!--[if gt IE "+ ++ba+"]><i></i><![endif]--\>",ca[0];);f.O=ba;if(ba===6)f.F=f.F.replace(/^-/,"");f.ja=
doc.documentMode||f.O;Z.innerHTML='<v:shape adj="1"/>';ga=Z.firstChild;ga.style.behavior="url(#default#VML)";f.zc=typeof ga.adj==="object";(function(){var a,b=0,c={};f.p={Za:function(d){if(!a){a=doc.createDocumentFragment();a.namespaces.add("css3vml","urn:schemas-microsoft-com:vml")}return a.createElement("css3vml:"+d)},Ba:function(d){return d&&d._pieId||(d._pieId="_"+ ++b)},Eb:function(d){var e,g,j,i,h=arguments;e=1;for(g=h.length;e<g;e++){i=h[e];for(j in i)if(i.hasOwnProperty(j))d[j]=i[j]}return d},
Rb:function(d,e,g){var j=c[d],i,h;if(j)Object.prototype.toString.call(j)==="[object Array]"?j.push([e,g]):e.call(g,j);else{h=c[d]=[[e,g]];i=new Image;i.onload=function(){j=c[d]={h:i.width,f:i.height};for(var k=0,n=h.length;k<n;k++)h[k][0].call(h[k][1],j);i.onload=null};i.src=d}}}})();f.Na={gc:function(a,b,c,d){function e(){k=j>=90&&j<270?b:0;n=j<180?c:0;m=b-k;p=c-n}function g(){for(;j<0;)j+=360;j%=360}var j=d.sa;d=d.zb;var i,h,k,n,m,p,r,t;if(d){d=d.coords(a,b,c);i=d.x;h=d.y}if(j){j=j.jd();g();e();
if(!d){i=k;h=n}d=f.Na.tc(i,h,j,m,p);a=d[0];d=d[1]}else if(d){a=b-i;d=c-h}else{i=h=a=0;d=c}r=a-i;t=d-h;if(j===void 0){j=!r?t<0?90:270:!t?r<0?180:0:-Math.atan2(t,r)/Math.PI*180;g();e()}return{sa:j,xc:i,yc:h,td:a,ud:d,Wd:k,Xd:n,rd:m,sd:p,kd:r,ld:t,rc:f.Na.dc(i,h,a,d)}},tc:function(a,b,c,d,e){if(c===0||c===180)return[d,b];else if(c===90||c===270)return[a,e];else{c=Math.tan(-c*Math.PI/180);a=c*a-b;b=-1/c;d=b*d-e;e=b-c;return[(d-a)/e,(c*d-b*a)/e]}},dc:function(a,b,c,d){a=c-a;b=d-b;return Math.abs(a===0?
b:b===0?a:Math.sqrt(a*a+b*b))}};f.ea=function(){this.Gb=[];this.oc={}};f.ea.prototype={ba:function(a){var b=f.p.Ba(a),c=this.oc,d=this.Gb;if(!(b in c)){c[b]=d.length;d.push(a)}},Ha:function(a){a=f.p.Ba(a);var b=this.oc;if(a&&a in b){delete this.Gb[b[a]];delete b[a]}},xa:function(){for(var a=this.Gb,b=a.length;b--;)a[b]&&a[b]()}};f.Oa=new f.ea;f.Oa.Rd=function(){var a=this,b;if(!a.Sd){b=doc.documentElement.currentStyle.getAttribute(f.F+"poll-interval")||250;(function c(){a.xa();setTimeout(c,b)})();
a.Sd=1}};(function(){function a(){f.L.xa();window.detachEvent("onunload",a);window.PIE=null}f.L=new f.ea;window.attachEvent("onunload",a);f.L.ta=function(b,c,d){b.attachEvent(c,d);this.ba(function(){b.detachEvent(c,d)})}})();f.Qa=new f.ea;f.L.ta(window,"onresize",function(){f.Qa.xa()});(function(){function a(){f.mb.xa()}f.mb=new f.ea;f.L.ta(window,"onscroll",a);f.Qa.ba(a)})();(function(){function a(){c=f.kb.md()}function b(){if(c){for(var d=0,e=c.length;d<e;d++)f.attach(c[d]);c=0}}var c;if(f.ja<9){f.L.ta(window,
"onbeforeprint",a);f.L.ta(window,"onafterprint",b)}})();f.lb=new f.ea;f.L.ta(doc,"onmouseup",function(){f.lb.xa()});f.he=function(){function a(h){this.Y=h}var b=doc.createElement("length-calc"),c=doc.body||doc.documentElement,d=b.style,e={},g=["mm","cm","in","pt","pc"],j=g.length,i={};d.position="absolute";d.top=d.left="-9999px";for(c.appendChild(b);j--;){d.width="100"+g[j];e[g[j]]=b.offsetWidth/100}c.removeChild(b);d.width="1em";a.prototype={Kb:/(px|em|ex|mm|cm|in|pt|pc|%)$/,ic:function(){var h=
this.Jd;if(h===void 0)h=this.Jd=parseFloat(this.Y);return h},yb:function(){var h=this.ae;if(!h)h=this.ae=(h=this.Y.match(this.Kb))&&h[0]||"px";return h},a:function(h,k){var n=this.ic(),m=this.yb();switch(m){case "px":return n;case "%":return n*(typeof k==="function"?k():k)/100;case "em":return n*this.xb(h);case "ex":return n*this.xb(h)/2;default:return n*e[m]}},xb:function(h){var k=h.currentStyle.fontSize,n,m;if(k.indexOf("px")>0)return parseFloat(k);else if(h.tagName in f.cc){m=this;n=h.parentNode;
return f.n(k).a(n,function(){return m.xb(n)})}else{h.appendChild(b);k=b.offsetWidth;b.parentNode===h&&h.removeChild(b);return k}}};f.n=function(h){return i[h]||(i[h]=new a(h))};return a}();f.Ja=function(){function a(e){this.X=e}var b=f.n("50%"),c={top:1,center:1,bottom:1},d={left:1,center:1,right:1};a.prototype={zd:function(){if(!this.ac){var e=this.X,g=e.length,j=f.v,i=j.qa,h=f.n("0");i=i.na;h=["left",h,"top",h];if(g===1){e.push(new j.ob(i,"center"));g++}if(g===2){i&(e[0].k|e[1].k)&&e[0].d in c&&
e[1].d in d&&e.push(e.shift());if(e[0].k&i)if(e[0].d==="center")h[1]=b;else h[0]=e[0].d;else if(e[0].W())h[1]=f.n(e[0].d);if(e[1].k&i)if(e[1].d==="center")h[3]=b;else h[2]=e[1].d;else if(e[1].W())h[3]=f.n(e[1].d)}this.ac=h}return this.ac},coords:function(e,g,j){var i=this.zd(),h=i[1].a(e,g);e=i[3].a(e,j);return{x:i[0]==="right"?g-h:h,y:i[2]==="bottom"?j-e:e}}};return a}();f.Ka=function(){function a(b,c){this.h=b;this.f=c}a.prototype={a:function(b,c,d,e,g){var j=this.h,i=this.f,h=c/d;e=e/g;if(j===
"contain"){j=e>h?c:d*e;i=e>h?c/e:d}else if(j==="cover"){j=e<h?c:d*e;i=e<h?c/e:d}else if(j==="auto"){i=i==="auto"?g:i.a(b,d);j=i*e}else{j=j.a(b,c);i=i==="auto"?j/e:i.a(b,d)}return{h:j,f:i}}};a.Kc=new a("auto","auto");return a}();f.Ec=function(){function a(b){this.Y=b}a.prototype={Kb:/[a-z]+$/i,yb:function(){return this.ad||(this.ad=this.Y.match(this.Kb)[0].toLowerCase())},jd:function(){var b=this.Vc,c;if(b===undefined){b=this.yb();c=parseFloat(this.Y,10);b=this.Vc=b==="deg"?c:b==="rad"?c/Math.PI*180:
b==="grad"?c/400*360:b==="turn"?c*360:0}return b}};return a}();f.Jc=function(){function a(c){this.Y=c}var b={};a.Qd=/\s*rgba\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d+|\d*\.\d+)\s*\)\s*/;a.Fb={aliceblue:"F0F8FF",antiquewhite:"FAEBD7",aqua:"0FF",aquamarine:"7FFFD4",azure:"F0FFFF",beige:"F5F5DC",bisque:"FFE4C4",black:"000",blanchedalmond:"FFEBCD",blue:"00F",blueviolet:"8A2BE2",brown:"A52A2A",burlywood:"DEB887",cadetblue:"5F9EA0",chartreuse:"7FFF00",chocolate:"D2691E",coral:"FF7F50",cornflowerblue:"6495ED",
cornsilk:"FFF8DC",crimson:"DC143C",cyan:"0FF",darkblue:"00008B",darkcyan:"008B8B",darkgoldenrod:"B8860B",darkgray:"A9A9A9",darkgreen:"006400",darkkhaki:"BDB76B",darkmagenta:"8B008B",darkolivegreen:"556B2F",darkorange:"FF8C00",darkorchid:"9932CC",darkred:"8B0000",darksalmon:"E9967A",darkseagreen:"8FBC8F",darkslateblue:"483D8B",darkslategray:"2F4F4F",darkturquoise:"00CED1",darkviolet:"9400D3",deeppink:"FF1493",deepskyblue:"00BFFF",dimgray:"696969",dodgerblue:"1E90FF",firebrick:"B22222",floralwhite:"FFFAF0",
forestgreen:"228B22",fuchsia:"F0F",gainsboro:"DCDCDC",ghostwhite:"F8F8FF",gold:"FFD700",goldenrod:"DAA520",gray:"808080",green:"008000",greenyellow:"ADFF2F",honeydew:"F0FFF0",hotpink:"FF69B4",indianred:"CD5C5C",indigo:"4B0082",ivory:"FFFFF0",khaki:"F0E68C",lavender:"E6E6FA",lavenderblush:"FFF0F5",lawngreen:"7CFC00",lemonchiffon:"FFFACD",lightblue:"ADD8E6",lightcoral:"F08080",lightcyan:"E0FFFF",lightgoldenrodyellow:"FAFAD2",lightgreen:"90EE90",lightgrey:"D3D3D3",lightpink:"FFB6C1",lightsalmon:"FFA07A",
lightseagreen:"20B2AA",lightskyblue:"87CEFA",lightslategray:"789",lightsteelblue:"B0C4DE",lightyellow:"FFFFE0",lime:"0F0",limegreen:"32CD32",linen:"FAF0E6",magenta:"F0F",maroon:"800000",mediumauqamarine:"66CDAA",mediumblue:"0000CD",mediumorchid:"BA55D3",mediumpurple:"9370D8",mediumseagreen:"3CB371",mediumslateblue:"7B68EE",mediumspringgreen:"00FA9A",mediumturquoise:"48D1CC",mediumvioletred:"C71585",midnightblue:"191970",mintcream:"F5FFFA",mistyrose:"FFE4E1",moccasin:"FFE4B5",navajowhite:"FFDEAD",
navy:"000080",oldlace:"FDF5E6",olive:"808000",olivedrab:"688E23",orange:"FFA500",orangered:"FF4500",orchid:"DA70D6",palegoldenrod:"EEE8AA",palegreen:"98FB98",paleturquoise:"AFEEEE",palevioletred:"D87093",papayawhip:"FFEFD5",peachpuff:"FFDAB9",peru:"CD853F",pink:"FFC0CB",plum:"DDA0DD",powderblue:"B0E0E6",purple:"800080",red:"F00",rosybrown:"BC8F8F",royalblue:"4169E1",saddlebrown:"8B4513",salmon:"FA8072",sandybrown:"F4A460",seagreen:"2E8B57",seashell:"FFF5EE",sienna:"A0522D",silver:"C0C0C0",skyblue:"87CEEB",
slateblue:"6A5ACD",slategray:"708090",snow:"FFFAFA",springgreen:"00FF7F",steelblue:"4682B4",tan:"D2B48C",teal:"008080",thistle:"D8BFD8",tomato:"FF6347",turquoise:"40E0D0",violet:"EE82EE",wheat:"F5DEB3",white:"FFF",whitesmoke:"F5F5F5",yellow:"FF0",yellowgreen:"9ACD32"};a.prototype={parse:function(){if(!this.Ua){var c=this.Y,d;if(d=c.match(a.Qd)){this.Ua="rgb("+d[1]+","+d[2]+","+d[3]+")";this.Yb=parseFloat(d[4])}else{if((d=c.toLowerCase())in a.Fb)c="#"+a.Fb[d];this.Ua=c;this.Yb=c==="transparent"?0:
1}}},U:function(c){this.parse();return this.Ua==="currentColor"?c.currentStyle.color:this.Ua},fa:function(){this.parse();return this.Yb}};f.ha=function(c){return b[c]||(b[c]=new a(c))};return a}();f.v=function(){function a(c){this.$a=c;this.ch=0;this.X=[];this.Ga=0}var b=a.qa={Ia:1,Wb:2,z:4,Lc:8,Xb:16,na:32,K:64,oa:128,pa:256,Ra:512,Tc:1024,URL:2048};a.ob=function(c,d){this.k=c;this.d=d};a.ob.prototype={Ca:function(){return this.k&b.K||this.k&b.oa&&this.d==="0"},W:function(){return this.Ca()||this.k&
b.Ra}};a.prototype={de:/\s/,Kd:/^[\+\-]?(\d*\.)?\d+/,url:/^url\(\s*("([^"]*)"|'([^']*)'|([!#$%&*-~]*))\s*\)/i,nc:/^\-?[_a-z][\w-]*/i,Yd:/^("([^"]*)"|'([^']*)')/,Bd:/^#([\da-f]{6}|[\da-f]{3})/i,be:{px:b.K,em:b.K,ex:b.K,mm:b.K,cm:b.K,"in":b.K,pt:b.K,pc:b.K,deg:b.Ia,rad:b.Ia,grad:b.Ia},fd:{rgb:1,rgba:1,hsl:1,hsla:1},next:function(c){function d(p,r){p=new a.ob(p,r);if(!c){k.X.push(p);k.Ga++}return p}function e(){k.Ga++;return null}var g,j,i,h,k=this;if(this.Ga<this.X.length)return this.X[this.Ga++];for(;this.de.test(this.$a.charAt(this.ch));)this.ch++;
if(this.ch>=this.$a.length)return e();j=this.ch;g=this.$a.substring(this.ch);i=g.charAt(0);switch(i){case "#":if(h=g.match(this.Bd)){this.ch+=h[0].length;return d(b.z,h[0])}break;case '"':case "'":if(h=g.match(this.Yd)){this.ch+=h[0].length;return d(b.Tc,h[2]||h[3]||"")}break;case "/":case ",":this.ch++;return d(b.pa,i);case "u":if(h=g.match(this.url)){this.ch+=h[0].length;return d(b.URL,h[2]||h[3]||h[4]||"")}}if(h=g.match(this.Kd)){i=h[0];this.ch+=i.length;if(g.charAt(i.length)==="%"){this.ch++;
return d(b.Ra,i+"%")}if(h=g.substring(i.length).match(this.nc)){i+=h[0];this.ch+=h[0].length;return d(this.be[h[0].toLowerCase()]||b.Lc,i)}return d(b.oa,i)}if(h=g.match(this.nc)){i=h[0];this.ch+=i.length;if(i.toLowerCase()in f.Jc.Fb||i==="currentColor"||i==="transparent")return d(b.z,i);if(g.charAt(i.length)==="("){this.ch++;if(i.toLowerCase()in this.fd){g=function(p){return p&&p.k&b.oa};h=function(p){return p&&p.k&(b.oa|b.Ra)};var n=function(p,r){return p&&p.d===r},m=function(){return k.next(1)};
if((i.charAt(0)==="r"?h(m()):g(m()))&&n(m(),",")&&h(m())&&n(m(),",")&&h(m())&&(i==="rgb"||i==="hsa"||n(m(),",")&&g(m()))&&n(m(),")"))return d(b.z,this.$a.substring(j,this.ch));return e()}return d(b.Xb,i)}return d(b.na,i)}this.ch++;return d(b.Wb,i)},D:function(){return this.X[this.Ga-- -2]},all:function(){for(;this.next(););return this.X},ma:function(c,d){for(var e=[],g,j;g=this.next();){if(c(g)){j=true;this.D();break}e.push(g)}return d&&!j?null:e}};return a}();var ha=function(a){this.e=a};ha.prototype=
{Z:0,Od:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.x!==b.x||a.y!==b.y)},Td:function(){var a=this.qb,b;return!a||(b=this.o())&&(a.h!==b.h||a.f!==b.f)},hc:function(){var a=this.e,b=a.getBoundingClientRect(),c=f.ja===9,d=f.O===7,e=b.right-b.left;return{x:b.left,y:b.top,h:c||d?a.offsetWidth:e,f:c||d?a.offsetHeight:b.bottom-b.top,Hd:d&&e?a.offsetWidth/e:1}},o:function(){return this.Z?this.Va||(this.Va=this.hc()):this.hc()},Ad:function(){return!!this.qb},cb:function(){++this.Z},hb:function(){if(!--this.Z){if(this.Va)this.qb=
this.Va;this.Va=null}}};(function(){function a(b){var c=f.p.Ba(b);return function(){if(this.Z){var d=this.$b||(this.$b={});return c in d?d[c]:(d[c]=b.call(this))}else return b.call(this)}}f.B={Z:0,ka:function(b){function c(d){this.e=d;this.Zb=this.ia()}f.p.Eb(c.prototype,f.B,b);c.$c={};return c},j:function(){var b=this.ia(),c=this.constructor.$c;return b?b in c?c[b]:(c[b]=this.la(b)):null},ia:a(function(){var b=this.e,c=this.constructor,d=b.style;b=b.currentStyle;var e=this.wa,g=this.Fa,j=c.Yc||(c.Yc=
f.F+e);c=c.Zc||(c.Zc=f.nb+g.charAt(0).toUpperCase()+g.substring(1));return d[c]||b.getAttribute(j)||d[g]||b.getAttribute(e)}),i:a(function(){return!!this.j()}),H:a(function(){var b=this.ia(),c=b!==this.Zb;this.Zb=b;return c}),va:a,cb:function(){++this.Z},hb:function(){--this.Z||delete this.$b}}})();f.Sb=f.B.ka({wa:f.F+"background",Fa:f.nb+"Background",cd:{scroll:1,fixed:1,local:1},fb:{"repeat-x":1,"repeat-y":1,repeat:1,"no-repeat":1},sc:{"padding-box":1,"border-box":1,"content-box":1},Pd:{top:1,right:1,
bottom:1,left:1,center:1},Ud:{contain:1,cover:1},eb:{Ma:"backgroundClip",z:"backgroundColor",da:"backgroundImage",Pa:"backgroundOrigin",S:"backgroundPosition",T:"backgroundRepeat",Sa:"backgroundSize"},la:function(a){function b(s){return s&&s.W()||s.k&k&&s.d in t}function c(s){return s&&(s.W()&&f.n(s.d)||s.d==="auto"&&"auto")}var d=this.e.currentStyle,e,g,j,i=f.v.qa,h=i.pa,k=i.na,n=i.z,m,p,r=0,t=this.Pd,v,l,q={M:[]};if(this.wb()){e=new f.v(a);for(j={};g=e.next();){m=g.k;p=g.d;if(!j.P&&m&i.Xb&&p===
"linear-gradient"){v={ca:[],P:p};for(l={};g=e.next();){m=g.k;p=g.d;if(m&i.Wb&&p===")"){l.color&&v.ca.push(l);v.ca.length>1&&f.p.Eb(j,v);break}if(m&n){if(v.sa||v.zb){g=e.D();if(g.k!==h)break;e.next()}l={color:f.ha(p)};g=e.next();if(g.W())l.db=f.n(g.d);else e.D()}else if(m&i.Ia&&!v.sa&&!l.color&&!v.ca.length)v.sa=new f.Ec(g.d);else if(b(g)&&!v.zb&&!l.color&&!v.ca.length){e.D();v.zb=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&h&&p===","){if(l.color){v.ca.push(l);l={}}}else break}}else if(!j.P&&
m&i.URL){j.Ab=p;j.P="image"}else if(b(g)&&!j.$){e.D();j.$=new f.Ja(e.ma(function(s){return!b(s)},false))}else if(m&k)if(p in this.fb&&!j.bb)j.bb=p;else if(p in this.sc&&!j.Wa){j.Wa=p;if((g=e.next())&&g.k&k&&g.d in this.sc)j.ub=g.d;else{j.ub=p;e.D()}}else if(p in this.cd&&!j.bc)j.bc=p;else return null;else if(m&n&&!q.color)q.color=f.ha(p);else if(m&h&&p==="/"&&!j.Xa&&j.$){g=e.next();if(g.k&k&&g.d in this.Ud)j.Xa=new f.Ka(g.d);else if(g=c(g)){m=c(e.next());if(!m){m=g;e.D()}j.Xa=new f.Ka(g,m)}else return null}else if(m&
h&&p===","&&j.P){j.Hb=a.substring(r,e.ch-1);r=e.ch;q.M.push(j);j={}}else return null}if(j.P){j.Hb=a.substring(r);q.M.push(j)}}else this.Bc(f.ja<9?function(){var s=this.eb,o=d[s.S+"X"],u=d[s.S+"Y"],x=d[s.da],y=d[s.z];if(y!=="transparent")q.color=f.ha(y);if(x!=="none")q.M=[{P:"image",Ab:(new f.v(x)).next().d,bb:d[s.T],$:new f.Ja((new f.v(o+" "+u)).all())}]}:function(){var s=this.eb,o=/\s*,\s*/,u=d[s.da].split(o),x=d[s.z],y,z,B,E,D,C;if(x!=="transparent")q.color=f.ha(x);if((E=u.length)&&u[0]!=="none"){x=
d[s.T].split(o);y=d[s.S].split(o);z=d[s.Pa].split(o);B=d[s.Ma].split(o);s=d[s.Sa].split(o);q.M=[];for(o=0;o<E;o++)if((D=u[o])&&D!=="none"){C=s[o].split(" ");q.M.push({Hb:D+" "+x[o]+" "+y[o]+" / "+s[o]+" "+z[o]+" "+B[o],P:"image",Ab:(new f.v(D)).next().d,bb:x[o],$:new f.Ja((new f.v(y[o])).all()),Wa:z[o],ub:B[o],Xa:new f.Ka(C[0],C[1])})}}});return q.color||q.M[0]?q:null},Bc:function(a){var b=f.ja>8,c=this.eb,d=this.e.runtimeStyle,e=d[c.da],g=d[c.z],j=d[c.T],i,h,k,n;if(e)d[c.da]="";if(g)d[c.z]="";if(j)d[c.T]=
"";if(b){i=d[c.Ma];h=d[c.Pa];n=d[c.S];k=d[c.Sa];if(i)d[c.Ma]="";if(h)d[c.Pa]="";if(n)d[c.S]="";if(k)d[c.Sa]=""}a=a.call(this);if(e)d[c.da]=e;if(g)d[c.z]=g;if(j)d[c.T]=j;if(b){if(i)d[c.Ma]=i;if(h)d[c.Pa]=h;if(n)d[c.S]=n;if(k)d[c.Sa]=k}return a},ia:f.B.va(function(){return this.wb()||this.Bc(function(){var a=this.e.currentStyle,b=this.eb;return a[b.z]+" "+a[b.da]+" "+a[b.T]+" "+a[b.S+"X"]+" "+a[b.S+"Y"]})}),wb:f.B.va(function(){var a=this.e;return a.style[this.Fa]||a.currentStyle.getAttribute(this.wa)}),
qc:function(){var a=0;if(f.O<7){a=this.e;a=""+(a.style[f.nb+"PngFix"]||a.currentStyle.getAttribute(f.F+"png-fix"))==="true"}return a},i:f.B.va(function(){return(this.wb()||this.qc())&&!!this.j()})});f.Vb=f.B.ka({wc:["Top","Right","Bottom","Left"],Id:{thin:"1px",medium:"3px",thick:"5px"},la:function(){var a={},b={},c={},d=false,e=true,g=true,j=true;this.Cc(function(){for(var i=this.e.currentStyle,h=0,k,n,m,p,r,t,v;h<4;h++){m=this.wc[h];v=m.charAt(0).toLowerCase();k=b[v]=i["border"+m+"Style"];n=i["border"+
m+"Color"];m=i["border"+m+"Width"];if(h>0){if(k!==p)g=false;if(n!==r)e=false;if(m!==t)j=false}p=k;r=n;t=m;c[v]=f.ha(n);m=a[v]=f.n(b[v]==="none"?"0":this.Id[m]||m);if(m.a(this.e)>0)d=true}});return d?{J:a,Zd:b,gd:c,ee:j,hd:e,$d:g}:null},ia:f.B.va(function(){var a=this.e,b=a.currentStyle,c;a.tagName in f.Ac&&a.offsetParent.currentStyle.borderCollapse==="collapse"||this.Cc(function(){c=b.borderWidth+"|"+b.borderStyle+"|"+b.borderColor});return c}),Cc:function(a){var b=this.e.runtimeStyle,c=b.borderWidth,
d=b.borderColor;if(c)b.borderWidth="";if(d)b.borderColor="";a=a.call(this);if(c)b.borderWidth=c;if(d)b.borderColor=d;return a}});(function(){f.jb=f.B.ka({wa:"border-radius",Fa:"borderRadius",la:function(b){var c=null,d,e,g,j,i=false;if(b){e=new f.v(b);var h=function(){for(var k=[],n;(g=e.next())&&g.W();){j=f.n(g.d);n=j.ic();if(n<0)return null;if(n>0)i=true;k.push(j)}return k.length>0&&k.length<5?{tl:k[0],tr:k[1]||k[0],br:k[2]||k[0],bl:k[3]||k[1]||k[0]}:null};if(b=h()){if(g){if(g.k&f.v.qa.pa&&g.d===
"/")d=h()}else d=b;if(i&&b&&d)c={x:b,y:d}}}return c}});var a=f.n("0");a={tl:a,tr:a,br:a,bl:a};f.jb.Dc={x:a,y:a}})();f.Ub=f.B.ka({wa:"border-image",Fa:"borderImage",fb:{stretch:1,round:1,repeat:1,space:1},la:function(a){var b=null,c,d,e,g,j,i,h=0,k=f.v.qa,n=k.na,m=k.oa,p=k.Ra;if(a){c=new f.v(a);b={};for(var r=function(l){return l&&l.k&k.pa&&l.d==="/"},t=function(l){return l&&l.k&n&&l.d==="fill"},v=function(){g=c.ma(function(l){return!(l.k&(m|p))});if(t(c.next())&&!b.fill)b.fill=true;else c.D();if(r(c.next())){h++;
j=c.ma(function(l){return!l.W()&&!(l.k&n&&l.d==="auto")});if(r(c.next())){h++;i=c.ma(function(l){return!l.Ca()})}}else c.D()};a=c.next();){d=a.k;e=a.d;if(d&(m|p)&&!g){c.D();v()}else if(t(a)&&!b.fill){b.fill=true;v()}else if(d&n&&this.fb[e]&&!b.repeat){b.repeat={f:e};if(a=c.next())if(a.k&n&&this.fb[a.d])b.repeat.Ob=a.d;else c.D()}else if(d&k.URL&&!b.src)b.src=e;else return null}if(!b.src||!g||g.length<1||g.length>4||j&&j.length>4||h===1&&j.length<1||i&&i.length>4||h===2&&i.length<1)return null;if(!b.repeat)b.repeat=

=====================================================
== File: src/homepage/_site/assets/js/ie/respond.min.js
=====================================================
/*! Respond.js v1.4.2: min/max-width media query polyfill
 * Copyright 2014 Scott Jehl
 * Licensed under MIT
 * http://j.mp/respondjs */

!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='&shy;<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){v(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},g=function(a){return a.replace(c.regex.minmaxwh,"").match(c.regex.other)};if(c.ajax=f,c.queue=d,c.unsupportedmq=g,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,comments:/\/\*[^*]*\*+([^/][^*]*\*+)*\//gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,maxw:/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/,minmaxwh:/\(\s*m(in|ax)\-(height|width)\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/gi,other:/\([^\)]*\)/g},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var h,i,j,k=a.document,l=k.documentElement,m=[],n=[],o=[],p={},q=30,r=k.getElementsByTagName("head")[0]||l,s=k.getElementsByTagName("base")[0],t=r.getElementsByTagName("link"),u=function(){var a,b=k.createElement("div"),c=k.body,d=l.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=k.createElement("body"),c.style.background="none"),l.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&l.insertBefore(c,l.firstChild),a=b.offsetWidth,f?l.removeChild(c):c.removeChild(b),l.style.fontSize=d,e&&(c.style.fontSize=e),a=j=parseFloat(a)},v=function(b){var c="clientWidth",d=l[c],e="CSS1Compat"===k.compatMode&&d||k.body[c]||d,f={},g=t[t.length-1],p=(new Date).getTime();if(b&&h&&q>p-h)return a.clearTimeout(i),i=a.setTimeout(v,q),void 0;h=p;for(var s in m)if(m.hasOwnProperty(s)){var w=m[s],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?j||u():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?j||u():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(n[w.rules]))}for(var C in o)o.hasOwnProperty(C)&&o[C]&&o[C].parentNode===r&&r.removeChild(o[C]);o.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=k.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,r.insertBefore(E,g.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(k.createTextNode(F)),o.push(E)}},w=function(a,b,d){var e=a.replace(c.regex.comments,"").replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},i=!f&&d;b.length&&(b+="/"),i&&(f=1);for(var j=0;f>j;j++){var k,l,o,p;i?(k=d,n.push(h(a))):(k=e[j].match(c.regex.findStyles)&&RegExp.$1,n.push(RegExp.$2&&h(RegExp.$2))),o=k.split(","),p=o.length;for(var q=0;p>q;q++)l=o[q],g(l)||m.push({media:l.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:n.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}v()},x=function(){if(d.length){var b=d.shift();f(b.href,function(c){w(c,b.href,b.media),p[b.href]=!0,a.setTimeout(function(){x()},0)})}},y=function(){for(var b=0;b<t.length;b++){var c=t[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!p[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(w(c.styleSheet.rawCssText,e,f),p[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!s||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}x()};y(),c.update=y,c.getEmValue=u,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);

=====================================================
== File: src/homepage/_site/assets/js/ie/html5shiv.js
=====================================================
/*
 HTML5 Shiv v3.6.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
*/
(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video",version:"3.6.2",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);

=====================================================
== File: src/homepage/_site/assets/js/jquery.scrolly.min.js
=====================================================
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);

=====================================================
== File: src/homepage/_site/assets/js/skel.min.js
=====================================================
/* skel.js v3.0.1 | (c) skel.io | MIT licensed */
var skel=function(){"use strict";var t={breakpointIds:null,events:{},isInit:!1,obj:{attachments:{},breakpoints:{},head:null,states:{}},sd:"/",state:null,stateHandlers:{},stateId:"",vars:{},DOMReady:null,indexOf:null,isArray:null,iterate:null,matchesMedia:null,extend:function(e,n){t.iterate(n,function(i){t.isArray(n[i])?(t.isArray(e[i])||(e[i]=[]),t.extend(e[i],n[i])):"object"==typeof n[i]?("object"!=typeof e[i]&&(e[i]={}),t.extend(e[i],n[i])):e[i]=n[i]})},newStyle:function(t){var e=document.createElement("style");return e.type="text/css",e.innerHTML=t,e},_canUse:null,canUse:function(e){t._canUse||(t._canUse=document.createElement("div"));var n=t._canUse.style,i=e.charAt(0).toUpperCase()+e.slice(1);return e in n||"Moz"+i in n||"Webkit"+i in n||"O"+i in n||"ms"+i in n},on:function(e,n){var i=e.split(/[\s]+/);return t.iterate(i,function(e){var a=i[e];if(t.isInit){if("init"==a)return void n();if("change"==a)n();else{var r=a.charAt(0);if("+"==r||"!"==r){var o=a.substring(1);if(o in t.obj.breakpoints)if("+"==r&&t.obj.breakpoints[o].active)n();else if("!"==r&&!t.obj.breakpoints[o].active)return void n()}}}t.events[a]||(t.events[a]=[]),t.events[a].push(n)}),t},trigger:function(e){return t.events[e]&&0!=t.events[e].length?(t.iterate(t.events[e],function(n){t.events[e][n]()}),t):void 0},breakpoint:function(e){return t.obj.breakpoints[e]},breakpoints:function(e){function n(t,e){this.name=this.id=t,this.media=e,this.active=!1,this.wasActive=!1}return n.prototype.matches=function(){return t.matchesMedia(this.media)},n.prototype.sync=function(){this.wasActive=this.active,this.active=this.matches()},t.iterate(e,function(i){t.obj.breakpoints[i]=new n(i,e[i])}),window.setTimeout(function(){t.poll()},0),t},addStateHandler:function(e,n){t.stateHandlers[e]=n},callStateHandler:function(e){var n=t.stateHandlers[e]();t.iterate(n,function(e){t.state.attachments.push(n[e])})},changeState:function(e){t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].sync()}),t.vars.lastStateId=t.stateId,t.stateId=e,t.breakpointIds=t.stateId===t.sd?[]:t.stateId.substring(1).split(t.sd),t.obj.states[t.stateId]?t.state=t.obj.states[t.stateId]:(t.obj.states[t.stateId]={attachments:[]},t.state=t.obj.states[t.stateId],t.iterate(t.stateHandlers,t.callStateHandler)),t.detachAll(t.state.attachments),t.attachAll(t.state.attachments),t.vars.stateId=t.stateId,t.vars.state=t.state,t.trigger("change"),t.iterate(t.obj.breakpoints,function(e){t.obj.breakpoints[e].active?t.obj.breakpoints[e].wasActive||t.trigger("+"+e):t.obj.breakpoints[e].wasActive&&t.trigger("-"+e)})},generateStateConfig:function(e,n){var i={};return t.extend(i,e),t.iterate(t.breakpointIds,function(e){t.extend(i,n[t.breakpointIds[e]])}),i},getStateId:function(){var e="";return t.iterate(t.obj.breakpoints,function(n){var i=t.obj.breakpoints[n];i.matches()&&(e+=t.sd+i.id)}),e},poll:function(){var e="";e=t.getStateId(),""===e&&(e=t.sd),e!==t.stateId&&t.changeState(e)},_attach:null,attach:function(e){var n=t.obj.head,i=e.element;return i.parentNode&&i.parentNode.tagName?!1:(t._attach||(t._attach=n.firstChild),n.insertBefore(i,t._attach.nextSibling),e.permanent&&(t._attach=i),!0)},attachAll:function(e){var n=[];t.iterate(e,function(t){n[e[t].priority]||(n[e[t].priority]=[]),n[e[t].priority].push(e[t])}),n.reverse(),t.iterate(n,function(e){t.iterate(n[e],function(i){t.attach(n[e][i])})})},detach:function(t){var e=t.element;return t.permanent||!e.parentNode||e.parentNode&&!e.parentNode.tagName?!1:(e.parentNode.removeChild(e),!0)},detachAll:function(e){var n={};t.iterate(e,function(t){n[e[t].id]=!0}),t.iterate(t.obj.attachments,function(e){e in n||t.detach(t.obj.attachments[e])})},attachment:function(e){return e in t.obj.attachments?t.obj.attachments[e]:null},newAttachment:function(e,n,i,a){return t.obj.attachments[e]={id:e,element:n,priority:i,permanent:a}},init:function(){t.initMethods(),t.initVars(),t.initEvents(),t.obj.head=document.getElementsByTagName("head")[0],t.isInit=!0,t.trigger("init")},initEvents:function(){t.on("resize",function(){t.poll()}),t.on("orientationChange",function(){t.poll()}),t.DOMReady(function(){t.trigger("ready")}),window.onload&&t.on("load",window.onload),window.onload=function(){t.trigger("load")},window.onresize&&t.on("resize",window.onresize),window.onresize=function(){t.trigger("resize")},window.onorientationchange&&t.on("orientationChange",window.onorientationchange),window.onorientationchange=function(){t.trigger("orientationChange")}},initMethods:function(){document.addEventListener?!function(e,n){t.DOMReady=n()}("domready",function(){function t(t){for(r=1;t=n.shift();)t()}var e,n=[],i=document,a="DOMContentLoaded",r=/^loaded|^c/.test(i.readyState);return i.addEventListener(a,e=function(){i.removeEventListener(a,e),t()}),function(t){r?t():n.push(t)}}):!function(e,n){t.DOMReady=n()}("domready",function(t){function e(t){for(h=1;t=i.shift();)t()}var n,i=[],a=!1,r=document,o=r.documentElement,s=o.doScroll,c="DOMContentLoaded",d="addEventListener",u="onreadystatechange",l="readyState",f=s?/^loaded|^c/:/^loaded|c/,h=f.test(r[l]);return r[d]&&r[d](c,n=function(){r.removeEventListener(c,n,a),e()},a),s&&r.attachEvent(u,n=function(){/^c/.test(r[l])&&(r.detachEvent(u,n),e())}),t=s?function(e){self!=top?h?e():i.push(e):function(){try{o.doScroll("left")}catch(n){return setTimeout(function(){t(e)},50)}e()}()}:function(t){h?t():i.push(t)}}),Array.prototype.indexOf?t.indexOf=function(t,e){return t.indexOf(e)}:t.indexOf=function(t,e){if("string"==typeof t)return t.indexOf(e);var n,i,a=e?e:0;if(!this)throw new TypeError;if(i=this.length,0===i||a>=i)return-1;for(0>a&&(a=i-Math.abs(a)),n=a;i>n;n++)if(this[n]===t)return n;return-1},Array.isArray?t.isArray=function(t){return Array.isArray(t)}:t.isArray=function(t){return"[object Array]"===Object.prototype.toString.call(t)},Object.keys?t.iterate=function(t,e){if(!t)return[];var n,i=Object.keys(t);for(n=0;i[n]&&e(i[n],t[i[n]])!==!1;n++);}:t.iterate=function(t,e){if(!t)return[];var n;for(n in t)if(Object.prototype.hasOwnProperty.call(t,n)&&e(n,t[n])===!1)break},window.matchMedia?t.matchesMedia=function(t){return""==t?!0:window.matchMedia(t).matches}:window.styleMedia||window.media?t.matchesMedia=function(t){if(""==t)return!0;var e=window.styleMedia||window.media;return e.matchMedium(t||"all")}:window.getComputedStyle?t.matchesMedia=function(t){if(""==t)return!0;var e=document.createElement("style"),n=document.getElementsByTagName("script")[0],i=null;e.type="text/css",e.id="matchmediajs-test",n.parentNode.insertBefore(e,n),i="getComputedStyle"in window&&window.getComputedStyle(e,null)||e.currentStyle;var a="@media "+t+"{ #matchmediajs-test { width: 1px; } }";return e.styleSheet?e.styleSheet.cssText=a:e.textContent=a,"1px"===i.width}:t.matchesMedia=function(t){if(""==t)return!0;var e,n,i,a,r={"min-width":null,"max-width":null},o=!1;for(i=t.split(/\s+and\s+/),e=0;e<i.length;e++)n=i[e],"("==n.charAt(0)&&(n=n.substring(1,n.length-1),a=n.split(/:\s+/),2==a.length&&(r[a[0].replace(/^\s+|\s+$/g,"")]=parseInt(a[1]),o=!0));if(!o)return!1;var s=document.documentElement.clientWidth,c=document.documentElement.clientHeight;return null!==r["min-width"]&&s<r["min-width"]||null!==r["max-width"]&&s>r["max-width"]||null!==r["min-height"]&&c<r["min-height"]||null!==r["max-height"]&&c>r["max-height"]?!1:!0},navigator.userAgent.match(/MSIE ([0-9]+)/)&&RegExp.$1<9&&(t.newStyle=function(t){var e=document.createElement("span");return e.innerHTML='&nbsp;<style type="text/css">'+t+"</style>",e})},initVars:function(){var e,n,i,a=navigator.userAgent;e="other",n=0,i=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(RegExp.$1),!1):void 0}),t.vars.browser=e,t.vars.browserVersion=n,e="other",n=0,i=[["ios",/([0-9_]+) like Mac OS X/,function(t){return t.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(t){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(t){return t.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null]],t.iterate(i,function(t,i){return a.match(i[1])?(e=i[0],n=parseFloat(i[2]?i[2](RegExp.$1):RegExp.$1),!1):void 0}),t.vars.os=e,t.vars.osVersion=n,t.vars.IEVersion="ie"==t.vars.browser?t.vars.browserVersion:99,t.vars.touch="wp"==t.vars.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),t.vars.mobile="wp"==t.vars.os||"android"==t.vars.os||"ios"==t.vars.os||"bb"==t.vars.os}};return t.init(),t}();!function(t,e){"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?module.exports=e():t.skel=e()}(this,function(){return skel});

=====================================================
== File: src/homepage/_site/assets/js/lity.min.js
=====================================================
/*! Lity - v2.2.2 - 2016-12-14
* http://sorgalla.com/lity/
* Copyright (c) 2015-2016 Jan Sorgalla; Licensed MIT */
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(c){return b(a,c)}):"object"==typeof module&&"object"==typeof module.exports?module.exports=b(a,require("jquery")):a.lity=b(a,a.jQuery||a.Zepto)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a){var b=B();return N&&a.length?(a.one(N,b.resolve),setTimeout(b.resolve,500)):b.resolve(),b.promise()}function d(a,c,d){if(1===arguments.length)return b.extend({},a);if("string"==typeof c){if("undefined"==typeof d)return"undefined"==typeof a[c]?null:a[c];a[c]=d}else b.extend(a,c);return this}function e(a){for(var b,c=decodeURI(a.split("#")[0]).split("&"),d={},e=0,f=c.length;e<f;e++)c[e]&&(b=c[e].split("="),d[b[0]]=b[1]);return d}function f(a,c){return a+(a.indexOf("?")>-1?"&":"?")+b.param(c)}function g(a,b){var c=a.indexOf("#");return-1===c?b:(c>0&&(a=a.substr(c)),b+a)}function h(a){return b('<span class="lity-error"/>').append(a)}function i(a,c){var d=c.opener()&&c.opener().data("lity-desc")||"Image with no description",e=b('<img src="'+a+'" alt="'+d+'"/>'),f=B(),g=function(){f.reject(h("Failed loading image"))};return e.on("load",function(){return 0===this.naturalWidth?g():void f.resolve(e)}).on("error",g),f.promise()}function j(a,c){var d,e,f;try{d=b(a)}catch(a){return!1}return!!d.length&&(e=b('<i style="display:none !important"/>'),f=d.hasClass("lity-hide"),c.element().one("lity:remove",function(){e.before(d).remove(),f&&!d.closest(".lity-content").length&&d.addClass("lity-hide")}),d.removeClass("lity-hide").after(e))}function k(a){var c=J.exec(a);return!!c&&o(g(a,f("https://www.youtube"+(c[2]||"")+".com/embed/"+c[4],b.extend({autoplay:1},e(c[5]||"")))))}function l(a){var c=K.exec(a);return!!c&&o(g(a,f("https://player.vimeo.com/video/"+c[3],b.extend({autoplay:1},e(c[4]||"")))))}function m(a){var c=M.exec(a);return!!c&&(0!==a.indexOf("http")&&(a="https:"+a),o(g(a,f("https://www.facebook.com/plugins/video.php?href="+a,b.extend({autoplay:1},e(c[4]||""))))))}function n(a){var b=L.exec(a);return!!b&&o(g(a,f("https://www.google."+b[3]+"/maps?"+b[6],{output:b[6].indexOf("layer=c")>0?"svembed":"embed"})))}function o(a){return'<div class="lity-iframe-container"><iframe frameborder="0" allowfullscreen src="'+a+'"/></div>'}function p(){return z.documentElement.clientHeight?z.documentElement.clientHeight:Math.round(A.height())}function q(a){var b=v();b&&(27===a.keyCode&&b.close(),9===a.keyCode&&r(a,b))}function r(a,b){var c=b.element().find(G),d=c.index(z.activeElement);a.shiftKey&&d<=0?(c.get(c.length-1).focus(),a.preventDefault()):a.shiftKey||d!==c.length-1||(c.get(0).focus(),a.preventDefault())}function s(){b.each(D,function(a,b){b.resize()})}function t(a){1===D.unshift(a)&&(C.addClass("lity-active"),A.on({resize:s,keydown:q})),b("body > *").not(a.element()).addClass("lity-hidden").each(function(){var a=b(this);void 0===a.data(F)&&a.data(F,a.attr(E)||null)}).attr(E,"true")}function u(a){var c;a.element().attr(E,"true"),1===D.length&&(C.removeClass("lity-active"),A.off({resize:s,keydown:q})),D=b.grep(D,function(b){return a!==b}),c=D.length?D[0].element():b(".lity-hidden"),c.removeClass("lity-hidden").each(function(){var a=b(this),c=a.data(F);c?a.attr(E,c):a.removeAttr(E),a.removeData(F)})}function v(){return 0===D.length?null:D[0]}function w(a,c,d,e){var f,g="inline",h=b.extend({},d);return e&&h[e]?(f=h[e](a,c),g=e):(b.each(["inline","iframe"],function(a,b){delete h[b],h[b]=d[b]}),b.each(h,function(b,d){return!d||(!(!d.test||d.test(a,c))||(f=d(a,c),!1!==f?(g=b,!1):void 0))})),{handler:g,content:f||""}}function x(a,e,f,g){function h(a){k=b(a).css("max-height",p()+"px"),j.find(".lity-loader").each(function(){var a=b(this);c(a).always(function(){a.remove()})}),j.removeClass("lity-loading").find(".lity-content").empty().append(k),m=!0,k.trigger("lity:ready",[l])}var i,j,k,l=this,m=!1,n=!1;e=b.extend({},H,e),j=b(e.template),l.element=function(){return j},l.opener=function(){return f},l.options=b.proxy(d,l,e),l.handlers=b.proxy(d,l,e.handlers),l.resize=function(){m&&!n&&k.css("max-height",p()+"px").trigger("lity:resize",[l])},l.close=function(){if(m&&!n){n=!0,u(l);var a=B();if(g&&(z.activeElement===j[0]||b.contains(j[0],z.activeElement)))try{g.focus()}catch(a){}return k.trigger("lity:close",[l]),j.removeClass("lity-opened").addClass("lity-closed"),c(k.add(j)).always(function(){k.trigger("lity:remove",[l]),j.remove(),j=void 0,a.resolve()}),a.promise()}},i=w(a,l,e.handlers,e.handler),j.attr(E,"false").addClass("lity-loading lity-opened lity-"+i.handler).appendTo("body").focus().on("click","[data-lity-close]",function(a){b(a.target).is("[data-lity-close]")&&l.close()}).trigger("lity:open",[l]),t(l),b.when(i.content).always(h)}function y(a,c,d){a.preventDefault?(a.preventDefault(),d=b(this),a=d.data("lity-target")||d.attr("href")||d.attr("src")):d=b(d);var e=new x(a,b.extend({},d.data("lity-options")||d.data("lity"),c),d,z.activeElement);if(!a.preventDefault)return e}var z=a.document,A=b(a),B=b.Deferred,C=b("html"),D=[],E="aria-hidden",F="lity-"+E,G='a[href],area[href],input:not([disabled]),select:not([disabled]),textarea:not([disabled]),button:not([disabled]),iframe,object,embed,[contenteditable],[tabindex]:not([tabindex^="-"])',H={handler:null,handlers:{image:i,inline:j,youtube:k,vimeo:l,googlemaps:n,facebookvideo:m,iframe:o},template:'<div class="lity" role="dialog" aria-label="Dialog Window (Press escape to close)" tabindex="-1"><div class="lity-wrap" data-lity-close role="document"><div class="lity-loader" aria-hidden="true">Loading...</div><div class="lity-container"><div class="lity-content"></div><button class="lity-close" type="button" aria-label="Close (Press escape to close)" data-lity-close>&times;</button></div></div></div>'},I=/(^data:image\/)|(\.(png|jpe?g|gif|svg|webp|bmp|ico|tiff?)(\?\S*)?$)/i,J=/(youtube(-nocookie)?\.com|youtu\.be)\/(watch\?v=|v\/|u\/|embed\/?)?([\w-]{11})(.*)?/i,K=/(vimeo(pro)?.com)\/(?:[^\d]+)?(\d+)\??(.*)?$/,L=/((maps|www)\.)?google\.([^\/\?]+)\/?((maps\/?)?\?)(.*)/i,M=/(facebook\.com)\/([a-z0-9_-]*)\/videos\/([0-9]*)(.*)?$/i,N=function(){var a=z.createElement("div"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return b[c];return!1}();return i.test=function(a){return I.test(a)},y.version="2.2.2",y.options=b.proxy(d,y,H),y.handlers=b.proxy(d,y,H.handlers),y.current=v,b(z).on("click.lity","[data-lity]",y),y});

=====================================================
== File: src/homepage/_site/assets/js/util.js
=====================================================
(function($) {

	/**
	 * Generate an indented list of links from a nav. Meant for use with panel().
	 * @return {jQuery} jQuery object.
	 */
	$.fn.navList = function() {

		var	$this = $(this);
			$a = $this.find('a'),
			b = [];

		$a.each(function() {

			var	$this = $(this),
				indent = Math.max(0, $this.parents('li').length - 1),
				href = $this.attr('href'),
				target = $this.attr('target');

			b.push(
				'<a ' +
					'class="link depth-' + indent + '"' +
					( (typeof target !== 'undefined' && target != '') ? ' target="' + target + '"' : '') +
					( (typeof href !== 'undefined' && href != '') ? ' href="' + href + '"' : '') +
				'>' +
					'<span class="indent-' + indent + '"></span>' +
					$this.text() +
				'</a>'
			);

		});

		return b.join('');

	};

	/**
	 * Panel-ify an element.
	 * @param {object} userConfig User config.
	 * @return {jQuery} jQuery object.
	 */
	$.fn.panel = function(userConfig) {

		// No elements?
			if (this.length == 0)
				return $this;

		// Multiple elements?
			if (this.length > 1) {


=====================================================
== File: src/homepage/_site/assets/js/jquery.scrollex.min.js
=====================================================
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);

=====================================================
== File: src/homepage-docker/Dockerfile
=====================================================
FROM ruby:2.6.8-buster

RUN apt-get update \
  && apt-get install -y \
    nodejs \
    python-pygments \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/

RUN gem install \
  github-pages \
  jekyll \
  jekyll-feed \
  jekyll-redirect-from \
  jekyll-seo-tag \
  kramdown \
  rdiscount \
  rouge

# Copy the script
COPY compile.sh /root/compile.sh

# Define the entrypoint
WORKDIR /james-project
ENTRYPOINT ["/root/compile.sh"]

=====================================================
== File: src/homepage-docker/compile.sh
=====================================================
#!/bin/sh -e
#

printUsage() {
   echo "Usage : "
   echo "./compile.sh SHA1"
   echo "    SHA1: SHA1 to build (optional)"
   exit 1
}

ORIGIN=/origin
DESTINATION=/destination

for arg in "$@"
do
   case $arg in
      -*)
         echo "Invalid option: -$OPTARG"
         printUsage
         ;;
      *)
         if ! [ -z "$1" ]; then
            SHA1=$1
         fi
         ;;
   esac
   if [ "0" -lt "$#" ]; then
      shift
   fi
done

if [ -z "$SHA1" ]; then
   SHA1=master
fi

# Sources retrieval
git clone $ORIGIN/.
git checkout $SHA1

# Compilation /james-project/src/jekyll/_site

jekyll build --source src/homepage --destination $DESTINATION


=====================================================
== File: src/site-docker/Dockerfile
=====================================================
# Build James
#
# VERSION	1.0

FROM eclipse-temurin:11-jdk-focal

# Install git
RUN apt-get update
RUN apt-get install -y git wget unzip

# Install Maven
WORKDIR /root
RUN wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
RUN tar -xvf apache-maven-3.6.3-bin.tar.gz
RUN ln -s /root/apache-maven-3.6.3/bin/mvn /usr/bin/mvn

# Copy the script
COPY compile.sh /root/compile.sh

# Define the entrypoint
WORKDIR /james-project
ENTRYPOINT ["/root/compile.sh"]

=====================================================
== File: src/site-docker/compile.sh
=====================================================
#!/bin/sh -e
#

printUsage() {
   echo "Usage : "
   echo "./compile.sh SHA1"
   echo "    SHA1: SHA1 to build (optional)"
   exit 1
}

ORIGIN=/origin
DESTINATION=/destination

for arg in "$@"
do
   case $arg in
      -*)
         echo "Invalid option: -$OPTARG"
         printUsage
         ;;
      *)
         if ! [ -z "$1" ]; then
            SHA1=$1
         fi
         ;;
   esac
   if [ "0" -lt "$#" ]; then
      shift
   fi
done

if [ -z "$SHA1" ]; then
   SHA1=master
fi

# Sources retrieval
git clone $ORIGIN/.
git checkout $SHA1

# Compilation

export MAVEN_OPTS="-Xmx7168m -Xms2048m -XX:+UseConcMarkSweepGC -XX:-UseGCOverheadLimit"

mvn clean install -DskipTests
mvn site:site -Dmaven.javadoc.skip=true -DskipTests -pl .,mpt/core
mkdir /tmp/website-generation
mvn site:stage -DstagingDirectory=/tmp/website-generation -pl .,mpt/core

cp -r /tmp/website-generation/* $DESTINATION/

=====================================================
== File: src/adr/0026-removing-configured-additional-mailboxListeners.md
=====================================================
# 26. Removing a configured additional MailboxListener

Date: 2020-04-03

## Status

Accepted (lazy consensus)

Not implemented yet.

Superseded by [35. Distributed Mailbox Listener Configuration](0035-distributed-listeners-configuration.md)

## Context

James enables a user to register additional mailbox listeners.

The distributed James server is handling mailbox event processing (mailboxListener execution) using a RabbitMQ work-queue
per listener.

The distributed James server then declares a queue upon start for each one of these user registered listeners, that it
binds to the main event exchange. 

More information about this component, and its distributed, RabbitMQ based implementation, can be found in 
[ADR 0036](0037-eventbus.md).

If the user unconfigures the listener, the queue and the binding are still present but not consumed. This results in 
unbounded queue growth eventually causing RabbitMQ resource exhaustion and failure.

## Vocabulary

A **required group** is a group configured within James additional mailbox listener or statically binded via Guice. We 
should have a queue for that mailbox listener binded to the main exchange.

A **registered group** is a group whose queue exists in RabbitMQ and is bound to the exchange, independently of its James 
usage. If it is required, a consumer will consume the queue. Otherwise the queue might grow unbounded.

## Decision

We need a clear consensus and auditability across the James cluster about **required groups** (and their changes). Thus 
Event sourcing will maintain an aggregate tracking **required groups** (and their changes). Audit will be enabled by 
adding host and date information upon changes. A subscriber will perform changes (binds and unbinds) in registered groups 
following the changes of the aggregate.

Event sourcing is desirable as it allows:
 - Detecting previously removed MailboxListener upon start
 - Audit of unbind decisions
 - Enables writing more complex business rules in the future

The event sourcing system will have the following command:


=====================================================
== File: src/adr/0032-distributed-mail-queue-cleanup.md
=====================================================
# 32. Distributed Mail Queue Cleanup

Date: 2020-04-13

## Status

Accepted (lazy consensus) and implemented

## Context

Read [Distributed Mail Queue](0031-distributed-mail-queue.md) for full context.

**enqueuedMailsV3** and **deletedMailsV2** is never cleaned up and the corresponding blobs are always referenced. This is not
ideal both from a privacy and space storage costs point of view.

Note that **enqueuedMailsV3** and **deletedMailsV2** rely on timeWindowCompactionStrategy.

## Decision

Add a new `contentStart` table referencing the point in time from which a given mailQueue holds data, for each mail queue.

The values contained between `contentStart` and `browseStart` can safely be deleted.

We can perform this cleanup upon `browseStartUpdate`: once finished we can browse then delete content of **enqueuedMailsV3**
and **deletedMailsV2** contained between `contentStart` and the new `browseStart` then we can safely set `contentStart` 
to the new `browseStart`.

Content before `browseStart` can safely be considered deletable, and is applicatively no longer exposed. We don't need an
additional grace period mechanism for `contentStart`.

Failing cleanup will lead to the content being eventually updated upon next `browseStart` update.

We will furthermore delete blobStore content upon dequeue, also when the mail had been deleted or purged via MailQueue
management APIs.

## Consequences

All Cassandra SSTable before `browseStart` can safely be dropped as part of the timeWindowCompactionStrategy.

Updating browse start will then be two times more expensive as we need to unreference passed slices.

Eventually this will allow reclaiming Cassandra disk space and enforce mail privacy by removing dandling metadata.

## Alternative

A [proposal](https://github.com/linagora/james-project/pull/3291#pullrequestreview-393501339) was made to piggy back 
cleanup upon dequeue/delete operations. The dequeuer/deleter then directly removes the related metadata from 
`enqueuedMailsV3` and `deletedMailsV2`. This simpler design however have several flaws:

 - if the cleanup fails for any reason then it cannot be retried in the future. There will be no way of cleaning up the 

=====================================================
== File: src/adr/0007-distributed-task-cancellation.md
=====================================================
# 7. Distributed Task cancellation

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

A `Task` could be run on any node of the cluster. To interrupt it we need to notify all nodes of the cancel request.

## Decision

* We will add an EventHandler to broadcast the `CancelRequested` event to all the workers listening on a RabbitMQ broadcasting exchange.

* The `TaskManager` should register to the exchange and will apply `cancel` on the `TaskManagerWorker` if the `Task` is waiting or in progress on it.

## Consequences

* The task manager's event system should be bound to the RabbitMQ exchange which publish the `TerminationEvent`s
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)

=====================================================
== File: src/adr/0043-avoid-elasticsearch-on-critical-reads.md
=====================================================
# 43. Avoid ElasticSearch on critical reads

Date: 2020-11-11

## Status

Accepted (lazy consensus) & implemented

Scope: Distributed James

## Context

A user willing to use a webmail powered by the JMAP protocol will end up doing the following operations:
 - `Mailbox/get` to retrieve the mailboxes. This call is resolved against metadata stored in Cassandra.
 - `Email/query` to retrieve the list of emails. This call is nowadays resolved on ElasticSearch for Email search after
 a right resolution pass against Cassandra.
 - `Email/get` to retrieve various levels of details. Depending on requested properties, this is either
 retrieved from Cassandra alone or from ObjectStorage.

So, ElasticSearch is queried on every JMAP interaction for listing emails. Administrators thus need to enforce availability and good performance
for this component.

Relying on more services for every read also harms our resiliency as ElasticSearch outages have major impacts.

Also we should mention our ElasticSearch implementation in Distributed James suffers the following flaws:
 - Updates of flags lead to updates of the all Email object, leading to sparse segments
 - We currently rely on scrolling for JMAP (in order to ensure messageId uniqueness in the response while respecting limit & position)
 - We noticed some very slow traces against ElasticSearch, even for simple queries.

Regarding Distributed James data-stores responsibilities:
 - Cassandra is the source of truth for metadata, its storage needs to be adapted to known access patterns.
 - ElasticSearch allows resolution of arbitrary queries, and performs full text search.

## Decision

Provide an optional view for most common `Email/query` requests both on Draft and RFC-8621 implementations.
This includes filters and sorts on 'sentAt'.

This view will be stored into Cassandra, and updated asynchronously via a MailboxListener.

## Consequences

A migration task will be provided for new adopters.

Administrators would be offered a configuration option to turn this view on and off as needed.

If enabled, given clients following well defined Email/query requests, administrators would no longer need
to ensure high availability and good performances for ElasticSearch to ensure availability of basic usages
(mailbox content listing).


=====================================================
== File: src/adr/0068-mutualize-cassandra-storge-for-quota.md
=====================================================
# 68. Mutualize Cassandra storage for Quota

Date: 2023-08-18

## Status

Accepted (lazy consensus).

Implemented.

## Context

One generic threat is resource abuse. Meaning a user uses an unfair amount of resources.

Similarily resource limitation is a way to decrease operating costs.

Quota, standardized in IMAP via [RFC-9208](https://www.rfc-editor.org/rfc/rfc9208.html) and in JMAP via
[RFC-9425](https://datatracker.ietf.org/doc/rfc9425/) are a mechanism designed to keep track of
user current usage of the resource and match it against the stored limit.

Resource limitation is a broad use case that we might want to better enforce in Apache James. This is especially
important when operating in SaaS mode, and actual users might be badly intentionned. See
[ADR-67 Quota for JMAP uploads](0067-quota-for-jmap-uploads.md).

As such, there is duplication, especially at the storage layers. Similar features might benefit from mutualized storage.

Especially, it is worth mentionning that Cassandra tables do not come for free: we have a strong incentive to reduce their count.
See [The Last Pickle blog post on this topic](https://thelastpickle.com/blog/2020/11/25/impacts-of-many-tables-on-cassandra.html).

In particular (quote from the above article):

```
If some tables share the same columns, it could be interesting to merge them into a single one, 
adding a column to the partition key to distinguish data belonging to different tables.
```

## Decision

Add Cassandra storage helpers, exposing a generic interface for Cassandra quota implementation of various services to mutualize their
storage. This relies on a part of the primary key allowing to distinguish the component.

![Architecture diagram for quota related features](img/adr-68-architecture-diagram.png)

The helper will consist of 2 tables:
- One composed of counters to track current value
- One composed of regular `long` to track limits

(one can not mix counters and regular values in the same table in Cassandra).

Port exising Cassandra implementations of quota for various services to use those helpers. Namely the Cassandra mailbox, Sieve storage. Use those

=====================================================
== File: src/adr/0066-modular-user-data-deletion.md
=====================================================
# 66. Deleting user data

Date: 2023-05-11

## Status

Accepted (lazy consensus).

Implemented.

## Context

Regulation like European GDPR involves being able to delete all user data upon requests. Currently there exist some APIs
for deleting some data relative for the users but the overall process is complex, requires a good knowlege of James data structures.

The data is scattered across the database and some sensible items might not be deletable.

## Decision

Define a single endpoint to delete all data relative to a user.

James being modular, we decided to form it under a webadmin task with a modular design.

Each feature storing user data would then implement `UserDeletionTaskStep`.

This modular design for migration steps could help developers easier to manage/test each step, and help other tailor 
James servers can implement their own steps as well.

Today, implemented deletion steps are:

- `RecipientRewriteTableUserDeletionTaskStep`: deletes all rewriting rules related to this user.
- `FilterUserDeletionTaskStep`: deletes all filters belonging to the user.
- `DelegationUserDeletionTaskStep`: deletes all delegations from / to the user.
- `MailboxUserDeletionTaskStep`: deletes mailboxes of this user, all ACLs of this user, as well as his subscriptions.
- `WebPushUserDeletionTaskStep`: deletes push data registered for this user.
- `IdentityUserDeletionTaskStep`: deletes identities registered for this user.
- `VacationUserDeletionTaskStep`: deletes vacations registered for this user.


We introduce `fromStep` query parameter that allows skipping previous steps, allowing the operator to resume the user deletion from a failed step.
This option could ease operators in case the data migration fails in the middle.

## Consequences

- Makes it easier to claim GDPR compliance on top of James.
- Modular design for deleting users is extension friendly for tailor James servers.

## Alternatives

Only deleting the user from the UsersRepository only "disable" the user without affecting the underlying data.

=====================================================
== File: src/adr/0039-distributed-blob-garbage-collector.md
=====================================================
# 39. Distributed blob garbage collector

Date: 2020-02-18

## Status

Proposed, not implemented yet.

Work had been started on this topic.

An alternative is proposed in [Deduplicated blobs GC with bloom filters](0049-deduplicated-blobs-gs-with-bloom-filters.md)
and implemented.

## Context

The body, headers, attachments of the mails are stored as blobs in a blob store.
In order to save space in those stores, those blobs are de-duplicated using a hash of their content.
To attain that the current blob store will read the content of the blob before saving it, and generate its id based on
a hash of this content. This way two blobs with the same content will share the same id and thus be saved only once.
This makes the safe deletion of one of those blobs a non trivial problem as we can't delete one blob without ensuring
that all references to it are themselves deleted. For example if two messages share the same blob, when we delete
one message there is at the time being no way to tell if the blob is still referenced by another message.

## Decision

To address this issue, we propose to implement a distributed blob garbage collector built upon the previously developed
Distributed Task Manager.
The de-duplicating blob store will keep track of the references pointing toward a blob in a `References` table.
It will also keep track of the deletion requests for a blob in a `Deletions` table.
When the garbage collector algorithm runs it will fetch from the `Deletions` table the blobs considered to be effectively deleted,
and will check in the `References` table if there are still some references to them. If there is no more reference to a blob,
it will be effectively deleted from the blob store.

To avoid concurrency issues, where we could garbage collect a blob at the same time a new reference to it appear,
a `reference generation` notion will be added. The de-duplicating id of the blobs which before where constructed
using only the hash of their content,  will now include this `reference generation` too.
At a given interval a new `reference generation` will be emitted, since then all new blobs will point to this new generation.

So a `garbage collection iteration` will run only on the `reference generation` `n-2` to avoid concurrency issues.

The switch of generation will be triggered by a task running on the distributed task manager. This task will
emit an event into the event sourcing system to increment the `reference generation`.


## Alternatives

Not de-duplicating the blobs' content, this simple approach which involves storing the same
blob a lot of times can in some scenario be really slow and costly. Albeit it can in some case be preferred for the sake of
simplicity, data security...


=====================================================
== File: src/adr/0030-separate-attachment-content-and-metadata.md
=====================================================
# 30. Separate attachment content and metadata

Date: 2020-04-13

## Status

Accepted (lazy consensus) & implemented

## Context

Some mailbox implementations of James store already parsed attachments for faster retrieval.

This attachment storage capabilities are required for two features:

 - JMAP attachment download
 - JMAP message search "attachment content" criteria
 
Only Memory and Cassandra backends can be relied upon as a JMAP backend.

Other protocols relies on dynamic EML parsing to expose message subparts (IMAP)

Here are the POJOs related to these attachments:

 - **Attachment** : holds an attachmentId, the attachment content, as well as the content type
 - **MessageAttachment** : composes an attachment with its disposition within a message (cid, inline and name)
 - **Message** exposes its list of MessageAttachment when it is read with FetchType Full.
 - **Blob** represents some downloadable content, and can be either an attachment or a message. Blob has a byte array 
 payload too.
 
The following classes work with the aforementioned POJOs:
 
 - **AttachmentMapper** and **AttachmentManager** are responsible of storing and retrieving an attachment content.
 - **BlobManager** is used by JMAP to allow blob downloads.
 - Mailbox search exposes attachment content related criteria. These criteria are used by the JMAP protocol.

This organisation causes attachment content to be loaded every time a message is fully read (which happens for instance
when you open a message using JMAP) despite the fact that it is not needed, as attachments are downloadable through a 
separate JMAP endpoint, their content is not attached to the JMAP message JSON.

Also, the content being loaded "at once", we allocate memory space to store the whole attachment, which is sub-optimal. We
want to keep the consumed memory low per-message because a given server should be able to handle a high number of messages 
at a given time.

To be noted that JPA and maildir mailbox implementations do not support attachment storage. To retrieve attachments of a 
message, these implementations parse the messages to extract their attachments.

Cassandra mailbox prior schema version 4 stored attachment and its metadata in the same table, but from version 5 relies 
on the blobStore to store the attachment content.

## Decision

=====================================================
== File: src/adr/0055-rspamd-spam-filtering.md
=====================================================
# 55. RSPAMD

Date: 2022-08-10

## Status

Accepted (lazy consensus).

Implemented. 

## Context

In order to detect spam, James provide 3 mechanisms: 

- SMTP Hook: decide to reject or not before spooling on the SMTP level
- Mailet: custom the mailet pipeline for changing the mail processing when detect spam mail.
- Mailbox listener:  based on user action, eg: move in/out the message to Inbox/Spam mailbox, then decide to report spam or not to separate Spam filtering system.

For basic, we can base on username, DSN filter, domains, IP... for configuring black or grey list.
If we want to analyse deeper in each message content, we need a more complex system.
Currently, James is integrated with [SpamAssassin](https://spamassassin.apache.org/) to tackle this problem.
We found it hard to operate SpamAssassin, and we had a performance issue.

For more selection, James's repository provides the Rspamd extension, which provides the same way as SpamAssassin but another system - [Rspamd](https://github.com/rspamd/rspamd)

A quick introduction about Rspamd:

```
Rspamd is an advanced spam filtering system and email processing framework that allows evaluation of messages by a number of rules including regular expressions, statistical analysis and custom services such as URL black lists. Each message is analysed by Rspamd and given a verdict that might be used by MTA for further processing (e.g. to reject a message, or add a special header indicating spam) along with other information, such as possible DKIM signature or modifications suggested for a message.

Rspamd can act as a Milter allowing direct interaction with popular MTA systems, such as Postfix or Sendmail.

Rspamd is designed to process hundreds of messages per second simultaneously, and provides a number of useful features including a comprehensive Lua API that allows access to messages processing in various aspects as well as asynchronous network API to access external resources, such as DNS, HTTP or even generic TCP/UDP services.
```

## Decision 

Set up a new maven project dedicated to rspamd extension. This allows to be embedded in a James server as a soft dependency
using the external-jar loading mechanism. With this way, the extension could be dropped in one's James installation, and not a runtime dependency.

Based on James' support for custom mailets, listeners, web admin routes, Rspamd extension can be done via:

- `RspamdScanner` mailet: with each mail income, this mailet will query to Rspamd for getting a spam or ham result, then append new headers to the mail with status/flag spam.
By setting up with `IsMarkedAsSpam` matcher, the mail will be rejected or not.
This mailet will be configured in [mailetcontainer.xml](/server/apps/distributed-app/sample-configuration/mailetcontainer.xml).

- Web admin route: to create feeding ham/spam messages task (batch mechanism). It helps spam classify learning.

- `RspamdListener`: the listener will handle mailbox events, based on `MessageMoveEvent`, `MailboxEvents.Added` to detect if the mail is spam or ham, then report to Rspamd,
enrich data to Rspamd, thus we will get more exact results in the next query.

=====================================================
== File: src/adr/0044-against-the-use-of-cassandra-lightweight-transactions.md
=====================================================
# 44. Against the use of Lightweight Transaction in Cassandra code base

Date: 2020-11-11

## Status

Accepted (lazy consensus).

Scope: Distributed James

Implemented.

## Context

As any kind of server James needs to provide some level of consistencies.

Strong consistency can be achieved with Cassandra by relying on LightWeight transactions. This enables
optimistic transactions on a single partition key.

Under the hood, Cassandra relies on the PAXOS algorithm to achieve consensus across replica allowing us
to achieve linearizable consistency at the entry level. To do so, Cassandra tracks consensus in a system.paxos
table. This `system.paxos` table needs to be checked upon reads as well in order to ensure the latest state of the ongoing
consensus is known. This can be achieved by using the SERIAL consistency level.

Experiments on a distributed James cluster (4 James nodes, having 4 CPU and 8 GB of RAM each, and a 3 node Cassandra 
cluster of 32 GB of RAM, 8 CPUs, and SSD disks) demonstrated that the system.paxos table was by far the most read 
and compacted table (ratio 5). 

The table triggering the most reads to the `system.paxos` table was the `acl` table. Deactivating LWT on this table alone
(lightweight transactions & SERIAL consistency level) enabled an instant 80% throughput, latencies reductions
as well as softer degradations when load breaking point is exceeded.

## Decision

Rely on `event sourcing` to maintain a projection of ACLs that do not rely on LWT or SERIAL consistency level. 

Event sourcing is thus responsible for handling concurrency and race conditions as well as governing denormalization
for ACLs. It can be used as a source of truth to re-build ACL projections. 

Note that the ACL projection tables can end up being out of synchronization from the aggregate but we still have a 
non-questionable source of truth handled via event sourcing.

## Consequences

We expect a better load handling, better response time, and cheaper operation costs for Distributed James while not
compromising the data safety of ACL operations.

ACL updates being a rare operation, we do not expect significant degradation of write performance by relying on 
`eventSourcing`.


=====================================================
== File: src/adr/0050-jmap-web-push.md
=====================================================
# 50. Implement web push for JMAP

Date: 2021-10-18

## Status

Accepted (lazy consensus).

Implemented.

## Context

**Notification for newly received emails** is a common feature of modern mail applications. Furthermore,
**real time** updates across devices are a common feature. We wish to provide support for this on top
of Apache James JMAP implementation for a large variety of devices.

Dealing with mobile devices yield a unique set of challenges at the protocol level, including 
low bandwidth connection, long latencies, and the need to save battery. As such, mobile devices 
operating systems tend to limit background connections for applications. Thus, in order to receive
notifications when the application is running on the background, one cannot rely on 
[ADR 0047](0047-jmap-push-over-websockets.md) (JMAP websocket push) - as it would imply 
the application maintaining a persistent connection to the server, which is battery/network
consuming.

As such, [RFC-8620 section 7.2](https://jmap.io/spec-core.html#pushsubscription) `JMAP specification for web push`
introduces the use of [RFC-8030](https://datatracker.ietf.org/doc/html/rfc8030) `Generic Event Delivery Using HTTP Push`
using an intermediate push server: a Push Gateway is used by the device to multiplex all push of all applications on a 
single connection. The device then register the URL of its push gateway on the application server (here JMAP server) for
it to forward `StateChange` events to the push gateway.

## Decision

Implement [RFC-8620 section 7.2](https://jmap.io/spec-core.html#pushsubscription) `JMAP specification for web push`.

We will store StateChanges, provide a Cassandra implementation of this storage for the Distributed application.

We will implement a PushClient based on reactor-netty to send events to the push gateway.

We will rely on a Group listener plugged on the JMAP event bus to handle the web push - See 
[ADR 37: Event bus](0037-eventbus.md).

We will implement the `PushSubscription/get` and `PushSubscription/set` JMAP methods.

We will also implement the verification code mechanism (a first round-trip to verify the push gateway works well).

We also decided to allow a single push subscription per devideId (which includes device and APP identifier...)

## Consequences

The notification traffic transits by some third party infrastructure which can both be a security and privacy risk. 

=====================================================
== File: src/adr/0002-make-taskmanager-distributed.md
=====================================================
# 2. Make TaskManager Distributed

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

In order to have a distributed version of James we need to have an homogeneous way to deal with `Task`.

Currently, every James nodes of a cluster have their own instance of `TaskManager` and they have no knowledge of others, making it impossible to orchestrate task execution at the cluster level.
Tasks are scheduled and ran on the same node they are scheduled.

We are also unable to list or access to the details of all the `Task`s of a cluster.

## Decision

Create a distribution-aware implementation of `TaskManager`.

## Consequences

 * Split the `TaskManager` part dealing with the coordination (`Task` management and view) and the `Task` execution (located in `TaskManagerWorker`)
 * The distributed `TaskManager` will rely on RabbitMQ to coordinate and the event system to synchronize states
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)

=====================================================
== File: src/adr/0012-jmap-partial-reads.md
=====================================================
# 12. Projections for JMAP Messages

Date: 2019-10-09

## Status

Accepted (lazy consensus) & implemented

## Context

JMAP core RFC8620 requires that the server responds only properties requested by the client.

James currently computes all of the properties regardless of their cost, and if it had been asked by the client.

Clearly we can save some latencies and resources by avoiding reading/computing expensive properties that had not been explicitly requested by the client.

## Decision

Introduce two new datastructures representing JMAP messages:
 - One with only metadata
 - One with metadata + headers

Given the properties requested by the client, the most appropriate message datastructure will be computed, on top of 
existing message storage APIs that should remain unchanged.

Some performance tests will be run in order to evaluate the improvements.

## Consequences

GetMessages with a limited set of requested properties no longer result necessarily in full database message read. We
thus have a significant improvement, for instance when only metadata are requested.

Given the following scenario played by 5000 users per hour (constant rate)
 - Authenticate
 - List mailboxes
 - List messages in one of their mailboxes
 - Get 10 times the mailboxIds and keywords of the given messages

We went from:
 - A 20% failure and timeout rate before this change to no failure
 - Mean time for GetMessages went from 27 159 ms to 27 ms (1000 time improvment), for all operation from
 27 591 ms to 60 ms (460 time improvment)
 - P99 is a metric that did not make sense because the initial simulation exceeded Gatling (the performance measuring tool 
 we use) timeout (60s) at the p50 percentile. After this proposal p99 for the entire scenario is of 1 383 ms

## References

 - /get method: https://tools.ietf.org/html/rfc8620#section-5.1
 - [JIRA](https://issues.apache.org/jira/browse/JAMES-2919)
 * [PR discussing this ADR](https://github.com/apache/james-project/pull/170)

=====================================================
== File: src/adr/0038-distributed-eventbus.md
=====================================================
# 38. Distributed Event bus

Date: 2020-05-25

## Status

Accepted (lazy consensus) & implemented

## Context

Read [Event Bus ADR](0037-eventbus.md) for context.

Given several James servers, we need them to share a common EventBus.

This:
 - Ensures a better load balancing for `group mailbox listners`.
 - Is required for correctness of notifications (like IMAP IDLE).

## Decision

Provide a distributed implementation of the EventBus leveraging RabbitMQ.

Events are emitted to a single Exchange.

Each group will have a corresponding queue, bound to the main exchange, with a default routing key. Each eventBus
will consume this queue and execute the relevant listener, ensuring at least once execution at the cluster level.

Retries are managed via a dedicated exchange for each group: as we need to count retries, the message headers need to 
be altered and we cannot rely on rabbitMQ build in retries. Each time the execution fails locally, a new event is emitted 
via the dedicated exchange, and the original event is acknowledged.

Each eventBus will have a dedicated exclusive queue, bound to the main exchange with the `registrationKeys` used by local 
notification mailboxListeners (to only receive the corresponding subset of events). Errors are not retried for 
notifications, failures are not persisted within `DeadLetter`, achieving at most once event delivery.

## Related ADRs

The implementation of the the distributed EventBus suffers from the following flows:

 - [Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md)
 - [Distributed Mailbox Listeners Configuration](0035-distributed-listeners-configuration.md) also covers more in details
 topology changes and supersedes ADR 0026. 
 
The following enhancement have furthermore been contributed:

 - [EventBus error handling upon dispatch](0027-eventBus-error-handling-upon-dispatch.md)

## References

* [JIRA 1](https://issues.apache.org/jira/browse/MAILBOX-367)

=====================================================
== File: src/adr/0031-distributed-mail-queue.md
=====================================================
# 31. Distributed Mail Queue

Date: 2020-04-13

## Status

Accepted (lazy consensus) & implemented

## Context

MailQueue is a central component of SMTP infrastructure allowing asynchronous mail processing. This enables a short 
SMTP reply time despite a potentially longer mail processing time. It also works as a buffer during SMTP peak workload
to not overload a server. 

Furthermore, when used as a Mail Exchange server (MX), the ability to add delays to be observed before dequeing elements
allows, among others:

 - Delaying retries upon MX delivery failure to a remote site.
 - Throttling, which could be helpful for not being considered a spammer.

A mailqueue also enables advanced administration operations like traffic review, discarding emails, resetting wait 
delays, purging the queue, etc.

Spring implementation and non distributed implementations rely on an embedded ActiveMQ to implement the MailQueue. 
Emails are being stored in a local file system. An administrator wishing to administrate the mailQueue will thus need 
to interact with all its James servers, which is not friendly in a distributed setup.

Distributed James relies on the following third party softwares (among other):

 - **RabbitMQ** for messaging. Good at holding a queue, however some advanced administrative operations can't be 
implemented with this component alone. This is the case for `browse`, `getSize` and `arbitrary mail removal`.
 - **Cassandra** is the metadata database. Due to **tombstone** being used for delete, queue is a well known anti-pattern.
 - **ObjectStorage** (Swift or S3) holds byte content.

## Decision

Distributed James should ship a distributed MailQueue composing the following softwares with the following 
responsibilities:

 - **RabbitMQ** for messaging. A rabbitMQ consumer will trigger dequeue operations.
 - A time series projection of the queue content (order by time list of mail metadata) will be maintained in **Cassandra** (see later). Time series avoid the 
aforementioned tombstone anti-pattern, and no polling is performed on this projection.
 - **ObjectStorage** (Swift or S3) holds large byte content. This avoids overwhelming other softwares which do not scale
 as well in term of Input/Output operation per seconds.
 
Here are details of the tables composing Cassandra MailQueue View data-model:

 - **enqueuedMailsV3** holds the time series. The primary key holds the queue name, the (rounded) time of enqueue 
designed as a slice, and a bucketCount. Slicing enables listing a large amount of items from a given point in time, in an 
fashion that is not achievable with a classic partition approach. The bucketCount enables sharding and avoids all writes 

=====================================================
== File: src/adr/0004-distributed-tasks-listing.md
=====================================================
# 4. Distributed Tasks listing

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

By switching the task manager to a distributed implementation, we need to be able to `list` all `Task`s running on the cluster.

## Decision

 * Read a Cassandra projection to get all `Task`s and their `Status`

## Consequences

 * A Cassandra projection has to be done
 * The `EventSourcingSystem` should have a `Listener` updating the `Projection`
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)

=====================================================
== File: src/adr/0027-eventBus-error-handling-upon-dispatch.md
=====================================================
# 27. EventBus error handling upon dispatch

Date: 2020-04-03

## Status

Accepted (lazy consensus) & implemented

## Context

James allows asynchronous processing for mailbox events via MailboxListener. This processing is abstracted by the 
EventBus.

If the processing of an event via a mailbox listener fails, it is retried, until it succeeds. If a maxRetries parameter 
is exceeded, the event is stored in deadLetter and no further processing is attended.

The administrator can then look at the content of deadLetter to diagnose processing issues and schedule a reDelivery in 
order to retry their processing via webAdmin APIs.

However no such capabilities are supported upon dispatching the event on the eventbus. A failed dispatch will result in message loss.

More information about this component can be found in [ADR 0036](0037-eventbus.md).

## Decision

Upon dispatch failure, the eventBus should save events in dead letter using a dedicated group.

Reprocessing this group an admin can re-trigger these events dispatch.

In order to ensure auto healing, James will periodically check the corresponding group in deadLetter is empty. If not a
re-dispatching of these events will be attempted. 

## Consequence

In distributed James Guice project an administrator have a way to be eventually consistent upon rabbitMQ failure.

## References

 - [JIRA](https://issues.apache.org/jira/browse/JAMES-3139)

=====================================================
== File: src/adr/0021-cassandra-acl-inconsistency.md
=====================================================
# 21. Cassandra ACL inconsistencies

Date: 2020-02-27

## Status

Proposed

Not implemented yet.

## Context

Mailboxes ACLs are denormalized in Cassandra in order to:

 - given a mailbox, list its ACL (enforcing rights for example)
 - discover which mailboxes are delegated to a given user (used to list mailboxes)

Here is the tables organisation:

 - `acl` stores the ACLs of a given mailbox
 - `UserMailboxACL` stores which mailboxes had been delegated to which user

Failures during the denormalization process will lead to inconsistencies between the two tables.

This can lead to the following user experience:

```
ALICE delegates her INBOX mailbox to BOB
The denormalisation process fails
ALICE INBOX does not appear in BOB mailbox list

Given a delegated mailbox INBOX.delegated
ALICE undo the sharing of her INBOX.delegated mailbox
The denormalisation process fails
ALICE INBOX.delegated mailbox still appears in BOB mailbox list
When BOB tries to select it, he is being denied
```

## Decision

We can adopt a retry policy of the `UserMailboxACL` projection update as a mitigation strategy.

Using `acl` table as a source of truth, we can rebuild the `UserMailboxACL` projection:

 - Iterating `acl` entries, we can rewrite entries in `UserMailboxACL`
 - Iterating `UserMailboxACL` we can remove entries not referenced in `acl`
 - Adding a delay and a re-check before the actual fix can decrease the occurrence of concurrency issues

We will expose a webAdmin task for doing this.


=====================================================
== File: src/adr/0023-cassandra-mailbox-counters-inconsistencies.md
=====================================================
# 23. Cassandra Mailbox Counters inconsistencies

Date: 2020-03-07

## Status

Accepted (lazy consensus) & implemented

## Context

Cassandra maintains a per mailbox projection for message count and unseen message count.

As with any projection, it can go out of sync, leading to inconsistent results being returned to the client, which is not acceptable.

Here is the table organisation:

 - `mailbox` Lists the mailboxes
 - `messageIdTable` Holds mailbox and flags for each message, lookup by mailbox ID + UID
 - `imapUidTable` Holds mailbox and flags for each message, lookup by message ID and serves as a source of truth
 - `mailboxCounters` Holds messages count and unseen message count for each mailbox.
 
Failures during the denormalization process will lead to inconsistencies between the counts and the content of `imapUidTable`

This can lead to the following user experience:

 - Invalid message count can be reported in the Mail User Agent (IMAP & JMAP)
 - Invalid message unseen count can be reported in the Mail User Agent (IMAP & JMAP)

## Decision

Implement a webadmin exposed task to recompute mailbox counters.

This endpoints will:

 - List existing mailboxes
 - List their messages using `messageIdTable`
 - Check them against their source of truth `imapUidTable`
 - Compute mailbox counter values
 - And reset the value of the counter if needed in `mailboxCounters`

## Consequences

This endpoint is subject to data races in the face of concurrent operations. Concurrent increments & decrements will be 
ignored during a single mailbox processing. However the source of truth is unaffected hence, upon rerunning the task, 
the result will be eventually correct. To be noted that Cassandra counters can't be reset in an atomic manner anyway.

We rely on the "listing messages by mailbox" projection (that we recheck). Missing entries in there will
be ignored until the given projection is healed (currently unsupported). 

We furthermore can piggy back a partial check of the message denormalization described in 

=====================================================
== File: src/adr/0063-temporary-file-leaks.md
=====================================================
# 63. Prevent temporary file leaks

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

In order to reduce memory allocation, Apache James buffers big emails into temporary files, in both SMTP
and during the email processing.

This means that all James entities relying on `Mail` object needs to have resource management in place
to prevent temporary file leaks. If not this can result in both unreasonable disk occupation and file
descriptor leaks.

Core components were found to badly manage those resources. Some mailets (bounce), mail queue APIs, mail 
repository APIs were found to be causing temporary file leaks.

James allows users to define custom mailets, that them too can badly manage emails. If insiders tend to
commit such errors, then we should expect our users to commit them too.

This points toward the need of a systematic approach to detect and mitigate temporary file leaks.

Similar leak detection is performed by other libraries. One can mention here Netty buffer libraries,
which relies on phantom references to detect leaks. Phantom references allows the Java garbage collector
to report recently GCed object. Upon phantom reference allocation, a check can then be done to check recently 
GCed object, and release related resources if need be.

## Decision

Implement a leak detector "a la Netty" using phantom references.

Allow several modes:
 - Off: does nothing which is James 3.6.x behaviour.
 - Simple: logs leaks and deletes associated files
 - Advanced: Same as simple but with the allocation stack trace which comes at a performance cost.
 Useful for diagnostic.
 - Testing: Assertion errors upon leaks. Can be used to streangthen test suite and detect leaks as part 
 of a build.

## Consequences

Makes James core components "leak proofed".

Allows user to safely write extensions involving emails (eg duplication / sending).


=====================================================
== File: src/adr/0069-crowdsec-IP-filtering.md
=====================================================
# 69. Crowdsec

Date: 2022-10-26

## Status

Accepted (lazy consensus).

Implemented. 

## Context

Currently, there is no mechanism to check harmful IP addresses implementing attacks like bruteforce attacks, dictionary attacks, etc.

- Bruteforce attack: A hacker attempts to guess the user's login credentials.
- Dictionary attacks: A dictionary attack tries to find out the list of valid mail addresses.

## Decision 

To that end, we will integrate James with [Crowdsec](https://www.crowdsec.net/). Crowdsec will check James logs, based on defined scenarios, Crowdsec can detect malevolent behaviors, and block them from accessing James at various levels (infrastructure - firewall, system, applicative). To ease end user configuration, and propose a bundled experience independent from end user infrastructure, we implement Crowdsec remediations at application level. Willing users can very well set up remediations based on their underlying infrastructure.

A quick introduction about Crowdsec:

```
CrowdSec Security Engine is an open-source and lightweight software that allows you to detect peers with malevolent behaviors and block them from accessing your systems at various levels (infrastructural, system, applicative).

To achieve this, the Security Engine reads logs from different sources (files, streams ...) to parse, normalize and enrich them before matching them to threats patterns called scenarios. 
```

CrowdSec ships by default with scenarios (brute force, port scan, web scan, etc.) adapted for most contexts, but we can easily extend it by picking more of them from the [HUB](https://app.crowdsec.net/hub/collections). It is also easy to adapt an existing one or create one ourselves.

Set up a new maven project dedicated to Crowdsec extension. This allows to be embedded in a James server as a soft dependency
using the external-jar loading mechanism. With this way, the extension could be dropped in one's James installation, and not a runtime dependency.

### How does Crowdsec apply?
- Many attacks on James via IMAP, SMTP, JMAP can be detected by Crowdsec
- Crowdsec analyzes logs from James, then based on their patterns in parsers, it can detect each behavior in James. 
- Scenarios are YAML files that allow to detect a specific behavior, usually an attack. With James, we detect bruteforce login attack and Dictionary attack.![img.png](img/adr-69-scenario-diagram.png)
- Each line log is an event in Crowdsec. If an event triggers the condition in Crowdsec, Crowdsec will send an alert to the Local API, and make a decision (ban)
- James connects to Crowdsec via https protocol with reactor http client to query the decision from Crowdsec

## Consequences

- James will be more secure by blocking threats at various levels (applicative, system, infrastructural).
- We can document and share Crowdsec scenario thus allowing users to benefit from each other decisions. Also we can get dangerous IP detected by community via using Central API
- Crowdsec natively supports distributed deployments (reference: ) by setting up an agent per node gathering logs of local containers and forwarding them to the crowdsec API that decides if remediations should be applied. 
- This architecture is not horizontally scalable in itself but should already be able to analyse over 1000 relevant logs per seconds (metric obtained by discussing with Crowdsec team), which should allow leveraging very large scale James deployments.

## Alternatives


=====================================================
== File: src/adr/0037-eventbus.md
=====================================================
# 37. Event bus

Date: 2020-05-05

## Status

Accepted (lazy consensus) & implemented

## Context

Many features rely on behaviors triggered by interactions with the mailbox API main interfaces (`RightManager`,
`MailboxManager`, `MessageManager`, `MessageIdManager`). We need to provide a convenient extension mechanism for 
organizing the execution of these behaviours, provide retries and advanced error handling.

Also, protocols enable notifications upon mailbox modifications. This is for instance the case for `RFC-2177 IMAP IDLE`,
leveraged for `RFC-3501 IMAP unsolicitated notifications` when selecting a Mailbox, as well as maintaining the 
`IMAP Message Sequence Number <-> Unique IDentifier` MSN <-> UID mapping. Changes happening for a specific entity 
(mailbox) need to be propagated to the relevant listeners.

## Decision

James mailbox component, a core component of James handling the storage of mails and mailboxes, should use an event 
driven architecture. 

It means every meaningful action on mailboxes or messages triggers an event for any component to react to that event.

`MailboxListener` allows executing actions upon mailbox events. They could be used for a wide variety of purposes, like 
enriching mailbox managers features or enabling user notifications upon mailboxes operations performed by other devices 
via other protocol sessions.

Interactions happen via the managers (`RightManager`, `MailboxManager`, `MessageManager`, `MessageIdManager`) which emit an
event on the `EventBus`, which will ensure the relevant `MailboxListener`s will be executed at least once.

`MailboxListener` can be registered in a work queue fashion on the `EventBus`. Each work queue corresponds to a given 
MailboxListener class with the same configuration, identified by their group. Each event is executed at least once
within a James cluster, errors are retried with an exponential back-off delay. If the execution keeps failing, the event
 is stored in `DeadLetter` for later reprocessing, triggered via WebAdmin.

Guice products enable the registration of additional mailbox listeners. A user can furthermore define its own 
mailboxListeners via the use of `extension-jars`.

MailboxListener can also be registered to be executed only on events concerning a specific entity (eg. a mailbox). The 
`registrationKey` is identifying entities concerned by the event. Upon event emission, the manager will indicate the 
`registrationKey` this event should be sent to. A mailboxListener will thus only receive the event for the registration 
key it is registered to, in an at least once fashion.

## Consequences

We need to provide an `In VM` implementation of the EventBus for single server deployments.


=====================================================
== File: src/adr/0049-deduplicated-blobs-gs-with-bloom-filters.md
=====================================================
# 49. Deduplicated blobs garbage collection with bloom filters

Date: 2021-07-21

## Status

Accepted (lazy consensus).

Implemented.

Proposes a simple way to implement an alternative to  [39. Distributed blob garbage collector](0039-distributed-blob-garbage-collector.md)

### Changes

2021-08-25: Edited to mention Cuckoo filters (Alternative).

## Context

The body, headers, attachments of the mails are stored as blobs in a blob store.

In order to save space in those stores, those blobs are de-duplicated using a hash of their content.

To attain that the current blob store will read the content of the blob before saving it, and generate its id based on
a hash of this content. This way two blobs with the same content will share the same id and thus be saved only once.

This makes the safe deletion of one of those blobs a non-trivial problem as we can't delete one blob without ensuring
that all references to it are themselves deleted. For example if two messages share the same blob, when we delete
one message there is at the time being no way to tell if the blob is still referenced by another message.

## Decision

To solve this, we will propose a simple two steps algorithms to provide a background deduplication job.

The **first step** consists in building a bloom filter using the entities referencing the blobs.

In the **second step** we iterate over blobs and check in the bloom filter to predict if they are referenced on not.

**Bloom filters** are probabilistic data structures. Here the reference prediction can produce false positives: we might 
skip some non referenced blobs that should have been garbage collected. However, the associated probability can be tuned 
and by adding a salt we can ensure subsequent runs will have different sets of false positives and thus that all blobs is
eventually garbage collected.

To avoid concurrency issues, where we could garbage collect a blob at the same time a new reference to it appear,
a `reference generation` notion will be added. The de-duplicating id of the blobs which before where constructed
using only the hash of their content,  will now include this `reference generation` too. To avoid synchronization 
issues, the `generation` will be time based.

So only blobs belonging to the `reference generation` `n-2` will be eligible for garbage collection to avoid 
concurrency issues, and allow for a clock skew.


=====================================================
== File: src/adr/0024-polyglot-strategy.md
=====================================================
# 24. Polyglot codebase

Date: 2020-03-17

## Status

Proposed

We rely on scala in parts of the code base.

## Context & Problem Statement

James is written in Java for a very long time. In recent years, Java modernized a lot after a decade of slow progress.

However, in the meantime, most software relying on the JVM started supporting alternative JVM languages to keep being relevant.

It includes Groovy, Clojure, Scala and more recently Kotlin, to name a few.

Not being open to those alternative languages can be a problem for James adoption.

## Decision drivers

Nowadays, libraries and framework targeting the JVM are expected to support usage of one or several of these alternative languages.

James being not only a mail server but also a development framework needs to reach those expectations.

At the same time, more and more developers and languages adopt Function Programming (FP) idioms to solve their problems.

## Considered options

### Strategies

1. Let the users figure out how to make polyglot setups
2. Document the usage of polyglot mailets for some popular languages
3. Document the usage of polyglot components for some popular languages
4. Actually implement some mailets in some popular languages
5. Actually implement some components in some popular languages

### Languages:

[upperroman]
I. Clojure
II. Groovy
III. Kotlin
IV. Scala

## Decision

We decide for options 4, 5 and IV.


=====================================================
== File: src/adr/0060-adopt-bounded-elastic.md
=====================================================
# 60. Adopt bounded elastic

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

See description of blocking vs reactive programming odel described in [ADR-57](0057-reactive-imap.md).

Sometimes reactive code needs to execute blocking tasks. 

 - This is the case when inter-operating with blocking libraries
 - James reactive adoption is progressive, some parts of our application
 are thus not reactive yet, which can result in reactive code calling
 blocking code calling reactive code.
 
Historically James used the elastic scheduler for scheduling such blocking calls. This scheduler
starts a thread for each task submitted (and attempt to reuse threads when possible) and results
in high thread count.

That is why project reactor deprecated the elastic scheduler in favor of bounded-elastic (similar to
a thread pool).

## Decision

Migrate from elastic scheduler to bounded-elastic scheduler.

## Consequences

We expect a reduction in used threads under load from such a change.

Also, getting rid of elastic scheduler might be a requirement to upgrade to reactor 3.5 upward.

Associated risk:
 - In some places, James protocol code is reactive, calls blocking intermediates API, to 
 end up calling reactive data access code. This results in nested blocking calls. Nested blocking
 calls, when using the same scheduler with a bounded thread cap, can result in a dead lock.

To prevent such a dead-lock code executed on bounded-elastic should not depend on scheduling nested
blocking call on bounded-elastic scheduler for its completion. We can thus avoid such a situation by 
using a scheduler dedicated by nested blocking calls.

## Alternatives

Alternatives to the "blocking call wrapper" scheduler described above includes a full reactive 

=====================================================
== File: src/adr/0058-upgrade-to-netty-4.md
=====================================================
# 58. Upgrade to netty 4

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

James 3.7.0 uses Netty 3 for its TCP stacks (IMAP, SMTP, LMTP, MANAGESIEVE, POP3).

Latests Netty 3 minor releases dates from 20XX. This brings concerns regarding security
(unmaintained dependency).

Netty 4 delivers many enhancements compared to Netty 3. 

 - We can mention here the buffer APIs
 - Netty 4 empowers the use of native SSL, native event loops
 

## Decision

Upgrade James to Netty 4.

## Consequences

Significant rewrite of the protocol stack. Though the count of lines of code involved is low, the code is
tricky and would need several iteration to be stabilized. For this reason, James 3.7.0 was released prior
the Netty 4 adoption.
 
Associated risk:
 - Buffer leaks. Manual buffer management can be error prone. Netty project includes relevant 
 tooling.
 - We encountered issues with write ordering (when execute on, or outside of, the event loop)

Benefits: Netty 4 natively supports graceful shutdown, which enables easily implementing such a feature in 
James.

Netty 4 upgrades was also the opportunity to significantly improve test coverage for IMAP protocol stacks
and IMAP 4 extensions, which allowed fixing numerous bugs. To be mentioned:
 - COMPRESSION
 - STARTTLS and SSL
 - IMAP IDLE
 - QRESYNC and CONDSTORE
 
To be noted that Netty version used by James needs to be aligned with those of our dependencies:
 - S3 driver

=====================================================
== File: src/adr/0042-applicative-read-repairs.md
=====================================================
# 42. Applicative read repairs (POC mailbox & mailbox-counters)

Date: 2020-09-25

## Status

Adopted (lazy consensus) & implemented

Completes [20. Cassandra Mailbox object consistency](0020-cassandra-mailbox-object-consistency.md),
[23. Cassandra Mailbox Counters inconsistencies](0023-cassandra-mailbox-counters-inconsistencies.md)

## Context

Cassandra eventual consistency is all about "replication", but "denormalization" consistency needs
to be handled at the applicative layer (due to the lack of transactions in a NoSQL database).

In the past we did set up "Solve inconsistency" tasks that can be assimilated to Cassandra repairs. Such
tasks, after being scheduled, ensure that the according entity denormalization is correctly denormalized.

However, the inconsistencies persist between runs. We experienced inconsistencies in some production platform
for both the mailbox entity, and the mailbox counter entity (whose table structure is exposed in
[these](0020-cassandra-mailbox-object-consistency.md), [ADRs](0023-cassandra-mailbox-counters-inconsistencies.md)).
Monitoring is required to detect when to run them and is time consuming for the platform administrator.
Given a large dataset, it could even be impossible to run such tasks in a timely fashion.

Another classic eventual consistency mechanism, that enables auto-healing is read-repair. Randomly piggy back upon reads
synchronous or asynchronous consistency checks. If missed a repair is performed.

In order to achieve denormalization auto-healing, we thus need to implement "applicative read repairs".

## Decision

Provide a Proof of concept for "Applicative read repairs" for the mailbox and mailbox-counters entities.

This enables read path simplification (and performance enhancements) for the mailbox object.

IMAP LIST should not read mailbox counters. This information is uneeded and we should avoid paying the
price of read repairs for this operation.

Provide a comprehensive documentation page regarding "Distributed James consistency model".

## Consequences

The expected **auto-healing** inconsistencies on existing deployments (at a limited configuration cost).
This should ease operation of the Distributed James server.

A configuration for James Distributed server will be added to control read repairs, per entity.

## Alternatives


=====================================================
== File: src/adr/0048-cleanup-jmap-uploads.md
=====================================================
# 48. Cleanup of JMAP uploads

Date: 2021-07-21

## Status

Accepted (lazy consensus).

Implemented.

Overridden by [Quota for JMAP uploads](0067-quota-for-jmap-uploads.md)

## Context

JMAP allows users to upload binary content called blobs to be later referenced via method calls. This includes but is not
limited to `Email/set` for specifying the blobId of attachments and `Email/import`.

The [specification](https://jmap.io/spec-core.html#binary-data) strongly encourages enforcing the cleanup of these uploads:

```
A blob that is not referenced by a JMAP object (e.g., as a message attachment) MAY be deleted by the server to free up 
resources. Uploads (see below) are initially unreferenced blobs.

[...] An unreferenced blob MUST NOT be deleted for at least 1 hour from the time of upload; if reuploaded, the same 
blobId MAY be returned, but this SHOULD reset the expiry time.
```

Deleting such uploads in a timely manner is important as:

 - It enables freeing server resources.
 - failing to do so may compromise privacy: content the user have uploaded and long forgotten might still be accessible
 in the underlying data-store. Failing to delete uploads in a timely fashion may jeopardize for instance GDPR compliance.
 
Today, uploads are stored along side email attachments. This means:
 - We can hardly apply a specific lifecycle that cleans up uploads, as distinguishing attachment from uploads is not 
 trivial.
 - We currently have a complex right resolution system on attachment, handling both the upload case (were the attachment
 is linked to a user) and the 'true' attachment case (linked to a message, those who can access the message can access 
 the attachment). This leads to sub-optimal code (slow).

## Decision

We need to create a separate interface `UploadRepository` in `data-jmap` to store uploads for each user. We would provide a memory 
implementation as well as a distributed implementation of it.

The distributed implementation would host metadata of the upload in Cassandra, and the content using the BlobStore API,
so object storage.

This `UploadRepository` would be used by JMAP RFC-8620 to back uploads (instead of the attachment manager), we will 
provide a `BlobResolver` to enable interactions with the uploaded blob. Similarly, we will use the `UploadRepository` to

=====================================================
== File: src/adr/0015-objectstorage-blobid-list.md
=====================================================
# 15. Persist BlobIds for avoiding persisting several time the same blobs within ObjectStorage

Date: 2019-10-09

## Status

Rejected (leads to concurrency issues)

Adoption needs to be backed by some performance tests.

## Context

A given mail is often written to the blob store by different components. And mail traffic is heavily duplicated (several recipients receiving similar email, same attachments). This causes a given blob to often be persisted several times.

Cassandra was the first implementation of the blobStore. Cassandra is a heavily write optimized NoSQL database. One can assume writes to be fast on top of Cassandra. Thus we assumed we could always overwrite blobs.

This usage pattern was also adopted for BlobStore on top of ObjectStorage.

However writing in Object storage:
 - Takes time
 - Is billed by most cloud providers

Thus choosing a right strategy to avoid writing blob twice is desirable.

However, ObjectStorage (OpenStack Swift) `exist` method was not efficient enough to be a real cost and performance saver.

## Decision

Rely on a StoredBlobIdsList API to know which blob is persisted or not in object storage. Provide a Cassandra implementation of it. 
Located in blob-api for convenience, this it not a top level API. It is intended to be used by some blobStore implementations
(here only ObjectStorage). We will provide a CassandraStoredBlobIdsList in blob-cassandra project so that guice products combining
object storage and Cassandra can define a binding to it. 

 - When saving a blob with precomputed blobId, we can check the existence of the blob in storage, avoiding possibly the expensive "save".
 - When saving a blob too big to precompute its blobId, once the blob had been streamed using a temporary random blobId, copy operation can be avoided and the temporary blob could be directly removed.

Cassandra is probably faster doing "write every time" rather than "read before write" so we should not use the stored blob projection for it

Some performance tests will be run in order to evaluate the improvements.

## Consequences

We expect to reduce the amount of writes to the object storage. This is expected to improve:
 - operational costs on cloud providers
 - performance improvement
 - latency reduction under load

As id persistence in StoredBlobIdsList will be done once the blob successfully saved, inconsistencies in StoredBlobIdsList
will lead to duplicated saved blobs, which is the current behaviour.


=====================================================
== File: src/adr/0017-file-mail-queue-deprecation.md
=====================================================
# 17. FileMailQueue deprecation

Date: 2019-12-04

## Status

Accepted (lazy consensus) & removed

## Context

James offers several implementation for MailQueue, a component allowing asynchronous mail processing upon smtp mail 
reception. These includes:
 - Default embedded ActiveMQ mail queue implementation, leveraging the JMS APIs and using the filesystem.
 - RabbitMQMailQueue allowing several James instances to share their MailQueue content.
 - And FileMailQueue directly leveraging the file system.

We introduced a junit5 test contract regarding management features, concurrency issues, and FileMailQueue do not meet this 
contract. This results in some tests being disabled and in an unstable test suite.

FileMailQueue tries to implement a message queue within James code, which does not really makes sense as some other projects
already provides one.

## Decision

Deprecate FileMailQueue components.

Disable FileMailQueue tests.

Target a removal as part of 3.6.0.

## Consequences

FileMailQueue is not exposed to the end user, be it over Spring or Guice, the impact of this deprecation + removal should
be limited.

We also expect our test suite to be more stable.

## Reference

Issues listing FileMailQueue defects:

 - https://issues.apache.org/jira/browse/JAMES-2298 Unsupported remove management feature
 - https://issues.apache.org/jira/browse/JAMES-2954 Incomplete browse implementation + Mixing concurrent operation might lead to a deadlock and missing fields
 - https://issues.apache.org/jira/browse/JAMES-2979 dequeue is not thread safe

=====================================================
== File: src/adr/0020-cassandra-mailbox-object-consistency.md
=====================================================
# 20. Cassandra Mailbox object consistency

Date: 2020-02-27

## Status

Accepted (lazy consensus) & implemented

## Context

Mailboxes are denormalized in Cassandra in order to access them both by their immutable identifier and their mailbox 
path (name):

 - `mailbox` table stores mailboxes by their immutable identifier
 - `mailboxPathV2` table stores mailboxes by their mailbox path

We furthermore maintain two invariants on top of these tables:
 - **mailboxPath** unicity. Each mailbox path can be used maximum once. This is ensured by writing the mailbox path first
 using Lightweight Transactions.
 - **mailboxId** unicity. Each mailbox identifier is used by only a single path. We have no real way to ensure a given mailbox
 is not referenced by two paths.

Failures during the denormalization process will lead to inconsistencies between the two tables.

This can lead to the following user experience:

```
BOB creates mailbox A
Denormalization fails and an error is returned to A

BOB retries mailbox A creation
BOB is being told mailbox A already exist

BOB tries to access mailbox A
BOB is being told mailbox A does not exist
```

## Decision

We should provide an offline (meaning absence of user traffic via for exemple SMTP, IMAP or JMAP) webadmin task to 
solve mailbox object inconsistencies.

This task will read `mailbox` table and adapt path registrations in `mailboxPathV2`:
 - Missing registrations will be added
 - Orphan registrations will be removed
 - Mismatch in content between the two tables will require merging the two mailboxes together.

## Consequences

As an administrator, if some of my users reports the bugs mentioned above, I have a way to sanitize my Cassandra 

=====================================================
== File: src/adr/0047-jmap-push-over-websockets.md
=====================================================
# 47. JMAP PUSH over WebSockets

Date: 2021-01-26

## Status

Accepted (lazy consensus).

Implemented.

Relates to [45. Support JMAP Push with Mailbox/changes implementation](0045-support-jmap-push-with-mailbox-changes-implementation.md)

Requires [46. Generalize EventBus](0046-generalize-event-bus.md)

## Context

JMAP Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server. 

In order to support this, we need to have the server emit newest state changes to the client over a PUSH channel.

## Decision

We will implement [RFC-8887 - A JSON Meta Application Protocol (JMAP) Subprotocol for WebSocket](https://tools.ietf.org/html/rfc8887) 
as a transport mechanism for PUSH notifications.

We will [generalize EventBus](0046-generalize-event-bus.md) in order to achieve an out-of-the box Publish-Subscribe 
system for JMAP related events, that does not fit in the mailbox API.

We will implement listeners registered on the JMAP event bus for WebSocket clients in order to carry over state changes
to the client.

## Consequences

We expect clients using the PUSH to lead to a drastic performance enhancement, as less data needs to be transmitted upon
resynchronisation.

As mentioned in RFC-8887 the usage of webSockets allows other performance optimizations:
 - Requests can easily be compressed, which is not doable over HTTP for most available implementation (HTTP request 
compression is not ubiquitous).
 - WebSockets being connected, authentication can be performed once, when establishing the connection. This can allow to
reduce the load, if needed, on authentication systems. It might ease the use for instance of custom OpenId connect 
providers.

People deploying JMAP need to be aware that load-balancing webSockets requires session stickiness.

## Sequence

 1. Bob authenticates against the `ws://` endpoints. Upgrade to websockets is granted.
 2. Bob registers Email and Mailbox updates. A listener listens for state changes related to Bob account.
 3. Bob receives a mail. The MailboxManager adds it to Bob's mailbox. An `Added` event is fired on the mailbox event bus.

=====================================================
== File: src/adr/0009-disable-elasticsearch-dynamic-mapping.md
=====================================================
# 9. Disable ElasticSearch dynamic mapping

Date: 2019-10-10

## Status

Accepted (lazy consensus) & implemented

## Context

We rely on dynamic mappings to expose our mail headers as a JSON map. Dynamic mapping is enabled for adding not yet encountered headers in the mapping.

This causes a serie of functional issues:
 - Maximum field count can easily be exceeded
 - Field type 'guess' can be wrong, leading to subsequent headers omissions [1]
 - Document indexation needs to be paused at the index level during mapping changes to avoid concurrent changes, impacting negatively performance.

## Decision

Rely on nested objects to represent mail headers within a mapping

## Consequences

The index needs to be re-created. Document reIndexation is needed.

This solves the aforementionned bugs [1].

Regarding performance:
 - Default message list performance is unimpacted
 - We noticed a 4% performance improvment upon indexing throughput
 - We noticed a 7% increase regarding space per message

## References

 - [1]: https://github.com/linagora/james-project/pull/2726 JAMES-2078 Add an integration test to prove that dynamic mapping can lead to ignored header fields
 - [JIRA](https://issues.apache.org/jira/browse/JAMES-2078)
 * [PR discussing this ADR](https://github.com/apache/james-project/pull/171)

=====================================================
== File: src/adr/0006-task-serialization.md
=====================================================
# 6. Task serialization

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

By switching the task manager to a distributed implementation, we need to be able to execute a `Task` on any node of the cluster.
We need to have a way to describe the `Task` to be executed and serialize it in order to be able to store it in the `Created` event. Which will be persisted in the Event Store, and will be send in the event bus.

At this point in time a `Task` can contain any arbitrary code. It's not an element of a finite set of actions.

## Decision

 * Create a `Factory` for one `Task`
 * Inject a `Factory` `Registry` via a Guice Module
 * The `Task` `Serialization` will be done in JSON, We will get inspired by `EventSerializer`
 * Every `Task`s should have a specific integration test demonstrating that serialization works
 * Each `Task` is responsible of eventually dealing with the different versions of the serialized information


## Consequences

 * Every `Task`s should be serializable.
 * Every `Task`s should provide a `Factory` which would be responsible to deserialize the task and instantiate it.
 * Every `Factory` should be registered through a Guice module to be created for each project containing a `Factory`
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)

=====================================================
== File: src/adr/0057-reactive-imap.md
=====================================================
# 57. Reactive IMAP

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

Classic java programming involves doing some blocking calls. When performing some input-output, the
thread performing the tasks at hand will hang until a response is received. This means that a server 
performing IOs, which is the case of James, would end up with a high number of threads: for an IMAP
server, one IMAP request in flight equals one thread.

The widely documented issue with such an approach is that, in Java threads correspond to system threads,
and are expensive. Typically, each thread takes up to ~1MB of memory. To cap the count of threads at 
hand, the Thread Pool model is used to cap the count of threads. Process at most N IMAP requests with
N threads, and queue requests that cannot yet be handled.

The blocking thread pool model was the concurrency paradigm used by James IMAP implementation in 3.7.x.

Reactive programming instead does not perform blocking operation, thus one thread can handle several
IO tasks. This can be seen as callbacks executed once the request is received. Reactive programming model,
amongst others, leads to efficient resource usage. It helps keeping the count of applicative threads 
low, helps reduce context switches.

James have been, among the past few years, transitioning to a reactive programming model using the
Reactor library. Migrated components involves:
 - Cassandra/Distributed storage
 - JMAP protocol stacks
 - Some (webadmin) tasks also relies on Reactor

It is to be noted that our IMAP network stack uses Netty 4.x library that allows handling requests
asynchronously.

## Decision

Migrate IMAP to a reactive model.

Implement a way to limit IMAP concurrency to protect James server from bursts.

## Consequences

Significant rewrite of the IMAP stack.

Going reactive on the IMAP stacks yields the following improvements:
 - Reduced thread count. IMAP request handling can now be dealt with from the Netty IO threads.

=====================================================
== File: src/adr/0051-oidc.md
=====================================================
# 51. Integrate James with OIDC

Date: 2021-12-06

## Status

Accepted (lazy consensus).

Implemented.

Complemented by [ADR-62](0062-oidc-token-introspection.md).

## Context

Authentication is a critical item regarding security. The overall internet community have been refining authentication
standards in order to improve overall safety. We can mention here 
[OIDC standard](https://openid.net/specs/openid-connect-core-1_0.html), based on OAUTH, that 
[RFC-7628](https://datatracker.ietf.org/doc/html/rfc7628) allows applying on IMAP and SMTP.

Regarding HTTP applications (including JMAP clients) the industry commonly requires "Single Sign On" and "Single Log 
Out" features.

Nowadays, James only supports plain auth for IMAP, SMTP. In JMAP, we do support HTTP basic authentication, and a set of
custom authentication methods, one being based on custom JWT. None matches the constraints mentioned above.

We believe having more control on authentication methods, and the option to choose state-of-the-art authentication
methods would ultimately increase the overall security of the James server and ease adoption.

## Decision

Provide OIDC integration for the following email protocols: IMAP, SMTP, JMAP.

Regarding JMAP, we propose ourselves to make authentication methods extensible and configurable. We will provide a 
simple authentication method blindly following the value of the `X-User` header. This would allow us to configure an 
API gateway in front of James and delegate it the OIDC management. 

Regarding IMAP and SMTP we will implement RFC-7628 within James. We will validate the validity of the Authorization 
Bearer token against the public exposed by the JWKS endpoint. 

We will document such a setup, and provide a working example under the form of a docker-compose using 
[Keycloack](https://www.keycloak.org/) as an OIDC provider and [Krakend](https://www.krakend.io/) as an API gateway.

We will allow configuring and un-configuring any of the configuration mechanism. For instance, it will be possible to 
operate an OIDC-only James server.

## Consequences

The `X-User` authentication mechanism should be enabled with care as it allows the API gateway to bypass authentication
with the James server. Given such an OIDC setup, an attacker gaining direct access to the James server would trivially
access user accounts. Client headers propagation furthermore needs to be done with care.

=====================================================
== File: src/adr/0019-reactor-netty-adoption.md
=====================================================
# 19. Reactor-netty adoption for JMAP server implementation

Date: 2020-02-28

## Status

Accepted (lazy consensus) & implemented

## Context

After adopting the last specifications of JMAP (see 
[new JMAP specifications adoption ADR](https://github.com/apache/james-project/blob/master/src/adr/0018-jmap-new-specs.md)), 
it was agreed that we need to be able to serve both `jmap-draft` and the new `jmap` with a reactive server. 

The current outdated implementation of JMAP in James is currently using a non-reactive [Jetty server](https://www.eclipse.org/jetty/).

There are many possible candidates as reactive servers. Among the most popular ones for Java:

* [Spring](https://spring.io)
* [Reactor-netty](https://github.com/reactor/reactor-netty)
* [Akka HTTP](https://doc.akka.io/docs/akka-http/current/introduction.html)
* ...

## Decision

We decide to use `reactor-netty` for the following reasons:

* It's a reactive server
* It's using [Reactor](https://projectreactor.io/), which is the same technology that we use in the rest of our codebase
* Implementing JMAP does not require high level HTTP server features

## Consequences

* Porting current `jmap-draft` to use a `reactor-netty` server instead of a Jetty server
* The `reactor-netty` server should serve as well the new `jmap` implementation
* We will be able to refactor and get end-to-end reactive operations for JMAP, unlocking performance gains

## References

* JIRA: [JAMES-3078](https://issues.apache.org/jira/browse/JAMES-3078)
* JMAP new specifications adoption ADR: https://github.com/apache/james-project/blob/master/src/adr/0018-jmap-new-specs.md

=====================================================
== File: src/adr/0054-elasticsearch-search-overrides.md
=====================================================
# 54. ElasticSearch search overrides

Date: 2022-05-16

## Status

Accepted (lazy consensus).

Implemented.

## Context

IMAP SEARCH requests can of course be used for user searches. But many applications (eg Samsung email client) also uses
IMAP SEARCH for resynchronization.

The use of ElasticSearch in the context of resynchronization is a problem as:

 - Resynchronization incurs many requests that ElasticSearch is not made to cope with.
 - This has a performance impact, and some 60+ seconds can be spotted.
 - ElasticSearch indexing is asynchronous which is not ideal for resynchronization
 - An ElasticSearch downtime would imply a full downtime for these clients.
 
Those resynchronization queries would better be served by the metadata database

## Decision

Define an API, `SearchOverride` that can be called on matching search queries and thus offload ElasticSearch.

Provide an extension mechanism for search overrides, where potentially custom implementations can be loaded from the
configuration.

Provide well targeted `SearchOverride`, implemented on top of `Cassandra` database.

## Consequences

We expect to :

 - Observe less IMAP SEARCH slow requests
 - ElasticSearch downtime should not impact IMAP clients using IMAP SEARCH like IMAP Samsung application
 - Thus also be able to support a higher IMAP workload as Cassandra is more suited to resynchronisation requests

## Sample IMAP requests


```
SearchOperation{key=SearchKey{type=TYPE_UID, date=null, size=0, value=null, seconds=-1, modSeq=-1, uids=[IdRange : TYPE: FROM UID: MessageUid{uid=1}:MessageUid{uid=9223372036854775807}], sequences=null, keys=Optional.empty}, options=[]}
```

```
SearchOperation{key=SearchKey{type=TYPE_AND, date=null, size=0, value=null, seconds=-1, modSeq=-1, uids=null, sequences=null, keys=Optional[[

=====================================================
== File: src/adr/0040-quality-levels-definitions.md
=====================================================
# 40. Quality levels definition

Date: 2020-06-21

## Status

Accepted (lazy consensus)

## Context

We hereby define as an artifact compiled artifact that external people consumes. This includes:

 - libraries
 - Mail servers
 - Extensions for James Mail Servers
 - Command line tools

We designate as a feature an optional, opt-in behaviour of a James server that can be configured by 
user willing to rely on it.

James as a project delivers several artifacts, and features. In order for project users to better
understand the underlying quality of the artifact they use, as well as the level of risk associated,
we need to better define some quality levels.

## Decision

For a given artifact or feature, by **mature** we mean that:

 - *interfaces* in components need a contract test suite
 - *interfaces* have several implementations
 - *implementation* of these interfaces need to pass this contract test suite which provides unit tests
 - Decent integration tests coverage is needed
 - Performance tests need to be conducted out
 - Quality Assurance with external clients needs to be conducted out
 - known existing production deployments/usages
 - usable documentation

This is the maximum quality level delivered by the James project. Users should feel confident using these
artifacts or features.

By **experimental** we designate an artifact or feature not matching yet the above requirements. However some
active contributors are willing to raise the quality level of this component, and eventually make it 
mature. Or at least are willing to support users.

Users should have low expectations regarding experimental artifacts or features. They are encouraged to contribute to them 
in order to raise its quality.

By **unsupported** we mean that an artifact or feature do not match most of the *mature* quality conditions. Active 
contributors do not feel confident delivering support for it. This artifact or feature might be deprecated and 
removed from future James releases. Users are strongly encouraged to contribute to the artifact development.

=====================================================
== File: src/adr/0056-opensearch-migration.md
=====================================================
# 56. OpenSearch migration

Date: 2022-08-11

## Status

Accepted (lazy consensus).

Implemented. 

Migration from OpenSearch high-level-rest-client to OpenSearch rest-client remains to be done.

## Context

James distributed server historically uses ElasticSearch software to empower search features. As off Apache James
3.7.0, we relied on ElasticSearch 7.10.

However, [ElasticSearch changed their licenses terms](https://www.elastic.co/pricing/faq/licensing), both for the servers
and driver libraries, choosing the SSPL (Server Side Public License), a [non-OSI compliant license](https://opensource.org/node/1099). 
As such, this clashes from a requirement for Apache projects to rely on ASF v2 compatible client libraries. Similarly, 
requiring a non-free software as a dependency would have been allowed but is a clear infringement to the ASF philosophy 
when free-er alternatives are available.

Alternative forks have emerged from ElasticSearch 7.10, one could mention 
[Open Distro for ElasticSearch](https://opendistro.github.io/for-elasticsearch/) which was renamed 
[OpenSearch](https://opensearch.org/), whose 1.x release line is fully compatible with ElasticSearch 7.10 driver, 
meaning that Apache James 3.7.0 users can use OpenSearch as an alternative to OpenSearch.

However, to fix security issues in its dependencies, we need to upgrade the ElasticSearch driver, which cannot be done
without license infringement and hurting OpenSearch compatibility.

Similarly, OpenSearch 2.x introduces subtle differences that makes its driver no longer compatible with ElasticSearch 7.10.

## Decision

Switch to OpenSearch drivers and fully adopt OpenSearch as the search backend for the Distributed James server.

First, conduct the easy migration toward OpenSearch high-level-rest-client (with dependencies to the whole openSearch 
eco-system), then conduct the more expensive migration to the rest-client (only dependencies to an http client and JSON 
parsing libraries).

## Consequences

Users are expected to deploy and use OpenSearch. Configuration need to be adapted too.

Users will not be able to use James Distributed server on top of ElasticSearch product anymore.

## Alternatives

Not upgrading exposes us to security vulnerabilities and as such is not an option.

=====================================================
== File: src/adr/0042-james-cli-based-on-webadmin.md
=====================================================
# 42. James CLI based on webadmin API

Date: 2020-10-05

## Status

Accepted (lazy consensus).

Partially implemented.

## Context

James servers offer a command-line interface in order to interact with the server. However, it relies on the JMX protocol, which is known to be insecure. The JMX server embedded in Apache James, also used by the command line client is exposed to a java de-serialization issue according to [NVD-CVE-2017-12628 Detail](https://nvd.nist.gov/vuln/detail/CVE-2017-12628), and thus can be used to execute arbitrary commands. 

Besides, the current CLI interface is also not optimal for users. It places actions in front of entities with contiguous syntax, making it harder for the user to remember the command (for example, which entity the GET action command can interact with). If we design to place the entity first and the outgoing actions can interact with that entity afterward, the user will easily imagine what he/she can do with each entity. This creates an intuitive interface that is easier to remember.

Webadmin APIs use HTTP protocol, which is more secure than JMX protocol to interact with James servers.

Webadmin command-line interface is an upcoming replacement for the outdated, security-vulnerable JMX command-line interface. 

## Decision

We decided to write a new CLI client, running on top of the JVM, communicating with James via the webadmin protocol, using http.

* What libraries will we use? 

  * http client: ***Feign library***. We used it as an http client in other parts of James so we continue to use it.

  * CLI: ***Picocli library***. Picocli is a one-file command line parsing framework written in Java that allows us to create command line applications with almost no code. It allows mixing Options with positional Parameters (Eg: no need to the follow order Options then Parameters), [automatic type conversion](https://picocli.info/#_strongly_typed_everything) of command line arguments to the type of the annotated field, provide Automatic Help and better Subcommand Support, easily handle Exceptions.

* How will we limit breaking changes this new CLI will cause?

  * Work on a wrapper to adapt the old CLI API.

* Where will we locate this cli code?

  * server/protocols/webadmin-cli

* Write a man page.

  * Picocli generates beautiful documentation for our CLI (HTML, PDF and Unix man pages).

* We decided to adopt a more modern, modular CLI syntax:

```   
$ ./james-cli [OPTION] ENTITY ACTION {ARGUMENT}
```
where

    OPTION: optional parameter when running the command line,

=====================================================
== File: src/adr/0003-distributed-workqueue.md
=====================================================
# 3. Distributed WorkQueue

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

Superceded by [16. Distributed WorkQueue](0016-distributed-workqueue.md)

## Context

By switching the task manager to a distributed implementation, we need to be able to run a `Task` on any node of the cluster.

## Decision

  For the time being we will keep the sequential execution property of the task manager.
  This is an intermediate milestone toward the final implementation which will drop this property.

 * Use a RabbitMQ queue as a workqueue where only the `Created` events are pushed into.
   This queue will be exclusive and events will be consumed serially. Technically this means the queue will be consumed with a `prefetch = 1`.
   The queue will listen to the worker on the same node and will ack the message only once it is finished (`Completed`, `Failed`, `Cancelled`).

## Consequences

 * It's a temporary and not safe to use in production solution: if the node promoted to exclusive listener of the queue dies, no more tasks will be run
 * The serial execution of tasks does not leverage cluster scalability.
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)


=====================================================
== File: src/adr/0009-java-11-migration.md
=====================================================
# 9. Migration to Java Runtime Environment 11

Date: 2019-10-24

## Status

Accepted & implemented

## Context

Java 11 is the only "Long Term Support" java release right now so more and more people will use it exclusively.

James is known to build with Java Compiler 11 for some weeks.

## Decision

We adopt Java Runtime Environment 11 for James as a runtime to benefits from a supported runtime and new features
of the languages and the platform.

## Consequences

* It requires the upgrade of Spring to 4.3.x.
* All docker images should be updated to adoptopenjdk 11.
* The documentation should be updated accordingly.

## References

* [Mailing list thread](https://www.mail-archive.com/server-dev@james.apache.org/msg62611.html)
* [Mailing list thread](https://www.mail-archive.com/server-dev@james.apache.org/msg61335.html)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/171)

=====================================================
== File: src/adr/0065-changing-username.md
=====================================================
# 65. Changing username

Date: 2023-03-17

## Status

Accepted (lazy consensus).

Implemented.

## Context
Changing username is a desired feature for an email server. It is a common practice especially when a user marries or divorces. For example:

Alice MARTINEZ have an email address `alice.martinez@domain.tld` and gets married to Bob ERNANDEZ. She thus wants to
change her email address to `alice.ernandez@domain.tld` while preserving her email data.

Nowadays, James uses username as an identifier for user data. Therefore, this feature is hard to implement because of changing
directly identifier to another value is difficult and could break data consistency if we do not do it carefully.

## Decision
We decided to do changing username with two steps: first, create new username, then migrate the old user's data to the new account -
the way we expect that is less dangerous to current data consistency. The data in the old account need to be truncated after migrating to the new account.

For the data migration step, we decided to form it under a webadmin task with a modular design. A big data migration task contains
many small tasks that implement `UsernameChangeTaskStep` interface. This modular design for migration steps could help developers easier
to manage/test each step, and help other tailor James servers can implement their own steps as well.

Today, implemented migration steps are:

- `ForwardUsernameChangeTaskStep`: creates forward from the old user to the new user and migrates existing forwards
- `FilterUsernameChangeTaskStep`: migrates users filtering rules
- `DelegationUsernameChangeTaskStep`: migrates delegations where the impacted user is either delegatee or delegator
- `MailboxUsernameChangeTaskStep`: migrates mailboxes belonging to the old user to the account of the new user. It also
  migrates users' mailbox subscriptions.
- `ACLUsernameChangeTaskStep`: migrates ACLs on mailboxes the migrated user has access to and updates subscriptions accordingly.

We introduce `fromStep` query parameter that allows skipping previous steps, allowing the operator to resume the username change from a failed step.
This option could ease operators in case the data migration fails in the middle.

## Consequences
- Add one more useful feature to James rich feature set: Users can change their name while preserving their email data.
- Modular design for changing username is extension friendly for tailor James servers.
- Users would be aware that they have a new account through a new username/password. No implicit migration without user attention is archived today.
- JMAP Identity data is not migrated because they are tightly coupled to the old username, users should create identities again themselves.
- Some data considered not critical like Push subscription, Vacation response,... are not migrated today. Contributions for them are welcome.

## Alternatives
We could have another choice for implementing this topic: create an account identifier not linked directly to the username (e.g a hash value points to a username),
so changing the pointer value would be easier than changing the pointer itself. However, that approach has two great concerns:
- Huge refactoring/breaking change is required: nowadays username as an identifier is used everywhere in tables schema and code.

=====================================================
== File: src/adr/0025-cassandra-blob-store-cache.md
=====================================================
# 25. Cassandra Blob Store Cache

Date: 2020-04-03

## Status

Accepted (lazy consensus) & implemented

Supercedes [14. Add storage policies for BlobStore](0014-blobstore-storage-policies.md)

## Context

James exposes a simple BlobStore API for storing raw data. However such raw data often vary in size and access patterns.

As an example:

 - Mailbox message headers are expected to be small and frequently accessed
 - Mailbox message body are expected to have sizes ranging from small to big but are unfrequently accessed
 - DeletedMessageVault message headers are expected to be small and unfrequently accessed

The access pattern of some of these kind of blobs does not fit Object Storage characteristics: good at storing big blobs, but 
it induces high latencies for reading small blobs. We observe latencies of around 50-100ms while Cassandra latency is of 4ms.

This gets some operations slow (for instance IMAP FETCH headers, or listing JMAP messages).

## Decision

Implement a write through cache to have better read latency for smaller objects.

Such a cache needs to be distributed in order to be more efficient.

Given that we don't want to introduce new technologies, we will implement it using Cassandra.

The cache should be implemented as a key-value table on a dedicated 'cache' keyspace, with a replication factor of 1, 
and be queried with a consistency level of ONE. 

We will leverage a configurable TTL as an eviction policy. Cache will be populated upon writes and missed read, if the 
blob size is below a configurable threashold. We will use the TimeWindow compaction strategy.

Failure to read the cache, or cache miss will result in a read in the object storage.

## Consequences

Metadata queries are expected not to query the object storage anymore.

[Performance tests](https://github.com/linagora/james-project/pull/3031#issuecomment-572865478) proved such strategies
to be highly effective. We expect comparable performance improvements compared to an un-cached ObjectStorage blob store.

HybridBlobStore should be removed.


=====================================================
== File: src/adr/0029-Cassandra-mailbox-deletion-cleanup.md
=====================================================
# 29. Cassandra mailbox deletion cleanup

Date: 2020-04-12

## Status

Accepted (lazy consensus) & implemented

## Context

Cassandra is used within distributed James product to hold messages and mailboxes metadata.

Cassandra holds the following tables:
 - mailboxPathV2 + mailbox allowing to retrieve mailboxes informations
 - acl + UserMailboxACL hold denormalized information
 - messageIdTable & imapUidTable allow to retrieve mailbox context information
 - messageV2 table holds message metadata
 - attachmentV2 holds attachments for messages
 - References to these attachments are contained within the attachmentOwner and attachmentMessageId tables
 
Currently, the deletion only deletes the first level of metadata. Lower level metadata stay unreachable. The data looks 
deleted but references are actually still present.

Concretely:
 - Upon mailbox deletion, only mailboxPathV2 & mailbox content is deleted. messageIdTable, imapUidTable, messageV2, 
 attachmentV2 & attachmentMessageId metadata are left undeleted.
 - Upon mailbox deletion, acl + UserMailboxACL are not deleted.
 - Upon message deletion, only messageIdTable & imapUidTable content are deleted. messageV2, attachmentV2 & 
 attachmentMessageId metadata are left undeleted.

This jeopardize efforts to regain disk space and privacy, for example through blobStore garbage collection.

## Decision

We need to cleanup Cassandra metadata. They can be retrieved from dandling metadata after the delete operation had been 
conducted out. We need to delete the lower levels first so that upon failures undeleted metadata can still be reached.

This cleanup is not needed for strict correctness from a MailboxManager point of view thus it could be carried out 
asynchronously, via mailbox listeners so that it can be retried.

## Consequences

Mailbox listener failures lead to eventBus retrying their execution, we need to ensure the result of the deletion to be 
idempotent. 

## References

 - [JIRA](https://issues.apache.org/jira/browse/JAMES-3148)

=====================================================
== File: src/adr/0064-account-delegation.md
=====================================================
# 64. Account Delegation

Date: 2022-11-15

## Status

Accepted (lazy consensus).

Implemented.

## Context

The account delegation is a feature that gives another permission to access your account.
The user that had been granted access begin accessing that account then read, send, respond to, and delete email messages... on your behalf.
This feature is useful for VIP (who have secretaries), admins, etc...
James currently supports account delegation in IMAP / SMTP through SASL OIDC as well as SASL AUTH PLAIN (https://github.com/apache/james-project/blob/master/src/adr/0061-delegation.md)

Current now James support `urn:apache:james:params:jmap:mail:shares extension`, but it only affects the mailbox scope.

## Decision

Based on DelegationStore API, provide a James specific JMAP extension for managing delegation.

- Provide JMAP methods:
  - Delegate/get: list email addresses can the user access
  - Delegate/set (create/delete): please note that only the owner of the account should be able to interact with the delegation settings
    + Delegate my account to other people
    + Revoke delegation of my account on another person's account (revoke a right given to me)
    + Revoke delegation of another people's account on my account (revoke a right given to others)
  - DelegatedAccount/get: the method for getting delegated accounts
  - DelegatedAccount/set-delete: the method for delete delegated account

JMAP endpoints should support being called with accountIds of delegated accounts and needs to proceed authorization logic according to delegations.

## Consequences
The account delegation will help owner and delegated account:

- Multi-users can use a shared account
- Can give different limited access to each user
- Bring some commonly expected collaborative features
- We would need a way to "list accounts delegated to me" in the delegation store. We could use Cassandra LOGGED batch to keep this eventually consistent
- The mailboxSession needs to cary over information regarding logged-in user to allow restricting access to the delegation JMAP methods to only the account owner.

## References

- [JIRA](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-3756)
- [JMAP Sharing](https://datatracker.ietf.org/doc/draft-ietf-jmap-sharing/)
- [James Delegation](https://github.com/apache/james-project/blob/master/src/adr/0061-delegation.md)

=====================================================
== File: src/adr/0046-generalize-event-bus.md
=====================================================
#46. Generalize EventBus

Date: 2020-06-11

## Status

Implemented, used for JMAP notifications, however not yet used on top of the user entity as 
described in this document.

## Context

User email storage usage is limited both in size and count via quotas (IMAP RFC-2087). In order to ease administrating large user bases, the quota search extension allows administrator
to retrieve all users whose email usages are exceeding a given occupation ratio.

When searching for users by quota ratio if we set the value of the parameters to 0, for example: `/quotas/users?minOccupationRatio=0&maxOccupationRatio=0`, the search feature is supposed to return newly created users
who have not received any email yet at that point. However, this is not the case because the quotas are currently being initialized only after
a user has received the first email.

We need to initialize user quotas upon user creation time. The problem is: there is currently no event at user creation 
and since the quota-search feature is a plugin of James, it cannot be hardwired into the domain logic of user management to initialize the quota for a just created user.

## Decision

For quota-search to be initialized/removed for a given user while keeping this feature as a plugin, we decided to adopt the Event Driven pattern we already use in Mailbox-api. 
We can create new events related to user management (UserCreated, UserRemoved and so on).

To achieve that, we will extract the EventBus out of mailbox-api in order to make it a utility component (eventbus-api), then we will make both mailbox-api and data-api depend on that new module. 

## Consequences

Mailbox-api would leverage the EventBus to keep exposing the mailbox-listener-api without changes on top of the generified EventBus. We need to define a common Event interface in eventbus-api, 
then each EventBus usage will define its own sealed event hierarchy implementing Event.

DeadLetter storage needs to be reworked in order to store events of various EventBus separately (which is needed for knowing which EventBus the event should be reprocessed on 
and knowing which sealed hierarchy an event belongs to.)

As a consequence, we will need a Cassandra data migration to add the EventBus name as part of the EventDeadLetter primary key. 

We could rely on the EventBus reliability for building any feature in James.

=====================================================
== File: src/adr/0001-record-architecture-decisions.md
=====================================================
# 1. [JAMES-2909] Record architecture decisions

Date: 2019-10-02

## Status

Proposed

## Context

In order to be more community-oriented, we should adopt a process to have a structured way to have open architectural decisions.

Using an Architectural Decision Records-based process as a support of discussion on the developers mailing-lists.

## Decision

We will use Architecture Decision Records, as [described by Michael Nygard](https://web.archive.org/web/20190824074401/http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).

Each ADR will be discussed on the Apache James' developers mailing-list before being accepted.

Following [Apache Decision Making process](https://community.apache.org/committers/decisionMaking.html), we provide the following possible status, with their associated meaning:
 - `Proposed`: The decision is being discussed on the mailing list.
 - `Accepted (lazy consensus)` : the architecture decision was proposed on the mailing list, and a consensus emerged from people involved in the discussion on the mailing list.
 - `Accepted (voted)` : the architecture undergo a voting process.
 - `Rejected` : Consensus built up against that proposal.


## Consequences

See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools).

We should provide in a mutable `References` section links to related JIRA meta-ticket (not necessarily to all related sub-tickets) as well as a link to the mail archive discussion thread.

JIRA tickets implementing that architecture decision should also link the related Architecture Decision Record.

## References

 * [JAMES-2909](https://jira.apache.org/jira/browse/JAMES-2909)
 * [PR discussing this ADR](https://github.com/apache/james-project/pull/166)

=====================================================
== File: src/adr/0034-mailbox-api-visibility-and-usage.md
=====================================================
# 34. Mailbox API visibility and usage

Date: 2020-04-27

## Status

Accepted (lazy consensus) & implemented

## Context

All mailboxes implementations rely on `mailbox-store` module that defines some common tools to implement the `mailbox-api`
(representing the API defining how to use a mailbox). 

For example, a `CassandraMailboxmanager` has to extend `StoreMailboxManager` (that implements `Mailboxmanager` from the 
`mailbox-api`) that requires the implementation of some `Mapper`s.

`Mapper`s are designed to provide low-level functions and methods on mailboxes. It's recurrent that we are tempted in 
James, outside of the `mailbox` modules, to rely on some of those common tools located in `mailbox-store` to have an 
easier access on some user's mailboxes or messages. 

Like for example, using a `Mapper` outside to be able to retrieve a message with only its `MessageId`, which is not 
currently possible at the `Manager`'s level, which tends to violate `mailbox-api`'s role and primary mission.

As a matter of fact, we have currently such uses of `mailbox-store` in James:

* `mailbox-adapter` because `Authenticator` and `Authorizator` are part of the `mailbox-store`

The manager layer do further validation including right checking, event dispatching (resulting in message search index 
indexing, current quota calculation mainly), quota validation. Not relying on the manager layer is thus error prone 
and can lead to security vulnerabilities.

## Decision

We should never rely on classes defined in `mailbox-store` outside of the `mailbox` modules (except on some cases 
limited to the test scope). The right way would be to always rely on the `Manager`s defined in `mailbox-api` module to 
access mailboxes and messages, as the `mailbox-api` module defines the API on how to use a mailbox.

We should ensure the correctness of `Manager`s implementations by providing contract tests and not by sharing abstract 
classes.

Regarding the modules wrongly relying already on `mailbox-store`, we can:

* `mailbox-adapter`: move `Authenticator` and `Authorizator` to `mailbox-api`

## Consequences

We need to introduce some refactorings to be able to rely fully on `mailbox-api` in new emerging cases. For example, 
our `mailbox-api` still lacks APIs to handle messages by their MessageId. It 
creates some issues for rebuilding a single message fast view projection, or the reindexation of a single message.


=====================================================
== File: src/adr/0018-jmap-new-specs.md
=====================================================
# 18. New JMAP specifications adoption

Date: 2020-02-06

## Status

Accepted (lazy consensus) & partially implemented

## Context

Historically, James has been an early adopter for the JMAP specification, and a first partial implementation was conducted when JMAP was just a draft. 
But with time, the IETF draft went with radical changes and the community could not keep this implementation up to date with the spec changes.

As of summer 2019, JMAP core ([RFC 8620](https://tools.ietf.org/html/rfc8620)) and JMAP mail ([RFC 8621](https://tools.ietf.org/html/rfc8621)) have been officially published. 
Thus we should implement these new specifications to claim JMAP support.

We need to keep in mind though that part of the community actively relies on the actual 'draft' implementation of JMAP existing in James. 

## Decision

We decided to do as follow:

* Rename packages `server/protocols/jmap*` and guice packages `server/container/guice/protocols/jmap*` to `jmap-draft`. `JMAPServer` should also be renamed to `JMAPDraftServer` (this has already been contributed [here](https://github.com/apache/james-project/pull/164), thanks to @cketti).
* Port `jmap-draft` to be served with a reactive technology
* Implement a JMAP meta project to select the JMAP version specified in the accept header and map it to the correct implementation
* Create a new `jmap` package
* Implement the new JMAP request structure with the [echo](https://jmap.io/spec-core.html#the-coreecho-method) method
* Implement authentication and session of the new JMAP protocol
* Implement protocol-level error handling
* Duplicate and adapt existing mailbox methods of `jmap-draft` to `jmap`
* Duplicate and adapt existing email methods of `jmap-draft` to `jmap`
* Duplicate and adapt existing vacation methods of `jmap-draft` to `jmap`
* Support uploads/downloads

Then when we finish to port our existing methods to the new JMAP specifications, we can implement these new features:

* Accounts
* Identities
* EmailSubmission
* Push and queryChanges
* Threads

We decided to support `jmap` on top of memory-guice and distributed-james products for now. 

We should ensure no changes is done to `jmap-draft` while implementing the new `jmap` one.

Regarding the versioning in the accept headers:

* `Accept: application/json;jmapVersion=draft` would redirect to `jmap-draft`
* `Accept: application/json;jmapVersion=rfc-8621` would redirect to `jmap`

=====================================================
== File: src/adr/0035-distributed-listeners-configuration.md
=====================================================
# 35. Distributed Mailbox Listeners Configuration

Date: 2020-04-23

## Status

Proposed

Supercedes [26. Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md)

Not implemented yet.

## Context

James enables a user to register additional mailbox listeners.

The distributed James server is handling mailbox event processing (mailboxListener execution) using a RabbitMQ work-queue
per listener.

Mailbox listeners can be registered to be triggered every time an event is generated by user interaction with their 
mailbox. They are being executed in a distributed fashion following the workqueue messaging pattern. The "group" is an 
attribute of the mailbox listener identifying to which work queue they belong.

More information about this component can be found in [ADR 0036](0037-eventbus.md).

Currently, mailbox listeners are determined by the guice bindings of the server and additional mailbox listeners defined
via configuration files.

While the configuration might be specific for each James server, what actually is defined in RabbitMQ is common. 
Heterogeneous configuration might then result in unpredictable RabbitMQ resource status. This was left as a limitation
of [26. Removing a configured additional MailboxListener](0026-removing-configured-additional-mailboxListeners.md).

## Decision

We need to centralize the definition of mailbox listeners.

An event sourcing system will track the configured mailbox listeners.

It will have the following commands:

 - **AddListener**: Add a given listener. This should be rejected if the group is already used.
 - **RemoveListener**: Remove a given listener.
 
Configuration changes are not supported. The administrator is expected to remove the given listener, then add it again.

It will have the following events:

 - **ListenerAdded**: A mailbox listener is added
 - **ListenerRemoved**: A mailbox listener is removed


=====================================================
== File: src/adr/0062-oidc-token-introspection.md
=====================================================
# 62. OIDC token introspection

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

Complements [ADR 51](0051-oidc.md).

## Context

[ADR 51](0051-oidc.md) describes work required for OIDC adoption within James.

This work enables the uses of an OIDC access token to authenticate using IMAP and SMTP.
It validates the signature of the token using cryptographic materials exposes by the 
Identity Provider server through the mean of a JWKS endpoint. Yet no effort is made to
see if the access token in question was revoked or not, which can pause a security threat.

OIDC ecosystem can support the following mechanisms to determine if an access token had been 
revoked:

 - Use of an introspection endpoint: the application asks the OIDC server to validate the token
 through an HTTP call. This result in load on the identity provider, which becomes central to the
 authentication process. This can be assimilated to a 'synchronous' mode.
 - Use of back-channel upon token revocation. The OIDC provider is then responsible to call an 
 applicative endpoint to invalidate a token. Invalidated tokens are then stored by the application
 and access token are challenged against that storage. This approach scales better yet is harder 
 to implement and can be seen as less secure (a network incident can prevent revoked token 
 propagation to applications for instance). This can be seen as an 'asynchronous' mode.
 
Also, we need to keep in mind that OIDC validation is only done upon establishing the connection in 
IMAP/SMTP (as they are connected protocols) which defers from stateless protocols like HTTP. Performance
impact of token introspection is thus lower for connected protocols.

## Decision

Allow opt-in use of an introspection endpoint to further secure IMAP/SMTP OIDC implementation.

## Consequences

Security gains for the IMAP/SMTP OIDC implementation in James.

## References

- [JIRA JAMES-3755](https://issues.apache.org/jira/browse/JAMES-3755)
- [RFC-7628](https://www.rfc-editor.org/rfc/rfc7628.html) SASL OATH mechanism for SMTP and IMAP: https://datatracker.ietf.org/doc/html/rfc7628
- [RFC-7662](https://datatracker.ietf.org/doc/html/rfc7662) OAUTH token introspection

=====================================================
== File: src/adr/0041-replace-jcloud-with-s3.md
=====================================================
# 41. Replace JCloud-based ObjectStorage backend with AWS-S3 SDK backend 

Date: 2020-02-11

## Status

Accepted (lazy consensus) & implemented

Adoption had been backed by some performance tests.

## Context

James has an interface called blob-store that allows to choose how Blobs are stored between several implementations.

For Distributed product, the default backend is Cassandra because it's fast and it doesn't require yet another
server. 

When storage cost concerns are more important than raw performances, James can store Blobs in S3 or Swift 
Object Storage technologies.

Object Storage is known to be cheap and yet offers guarantee about durability.

When we implemented Object Storage blob-store in the past, we decided to implement it with 
[Apache jcloud library](https://jclouds.apache.org/) because we wanted to target both S3 and Swift API.

However, we found that our implementation was complex and it didn't fit the Reactive style we now have in the codebase.
It also contribute negatively to the project build time.

At the same time, we figured out Swift was providing a good compatibility layer for S3 and that we may drop
our Swift code without dropping Swift support at the same time. 

## Decision

* Use AWS S3 v2 SDK to implement a Reactive S3 blob-store (`blobstore-s3`).
* Replace current `blob-store-objectstorage` with `blobstore-s3` 
* Run load tests to ensure there's no penalty when switching from Swift to S3 over Swift

## Consequences

* We have to document carefully how to transition from `blob-store-objectstorage` with `blobstore-s3`  in the
configuration and how to handle existing data

* We need to work on a new implementation of blob encryption.

## References

* [JAMES](https://issues.apache.org/jira/browse/JAMES-3028)
* [Pull request tree](https://github.com/linagora/james-project/pull/3773)

=====================================================
== File: src/adr/0036-against-use-of-conditional-statements-in-guice-modules.md
=====================================================
# 36. Against the use of conditional statements in Guice modules

Date: 2019-12-29

## Status

Accepted (lazy consensus) & implemented

## Context

James products rely historically on Spring for dependency injection. It doesn't use last major Spring version (4.x instead of 5.x).
James uses Spring in a way that enables overriding any class via a configuration file thus endangering overall correctness by giving too much 
power to the user.

James proposes several implementations for each of the interfaces it defines. The number of possible combinations of
implementations is thus really high (like factorial(n) with n > 10). It makes it unpractical to run tests for each 
possible component combination. We run integration tests for combinations that we decide brings the more value to
the users. Spring product defeats this testing logic 
by allowing the user arbitrary classes combination, which is likely not being tested.

Instead of having a single product allowing all component combination, we rather have 
several products each one exposing a single component combination. Components are defined by code in a static fashion. 
We thus can provide a decent level of QA for these products. Overriding components requires explicit code modification 
and recompilation, warning the user about the impact of the choices he does, and lowering the project's responsibility. 
Guice had been enacted as a way to reach that goal.

With Guice we expose only supported, well tested combinations of components, thus addressing the combination issue.

Spring application often bring dependencies conflicts, for example between Lucene and ElasticSearch 
components, leading to potential runtime or compile time issues. Instead of having a single big application being able 
to instantiate each and every component application, we have several products defining their dependencies in a 
minimalistic way, relying only on the components implementation that are needed.

Here is the list of products we provide:

 - In-Memory: A memory based James server, mainly for testing purposes
 - Distributed James: A scalable James server, storing data in various data stores. Cassandra is used for metadata, 
 ElasticSearch for search, RabbitMQ for messaging, and ObjectStorage for blobs.
 - Cassandra: An implementation step toward Distributed James. It does not include messaging and ObjectStorage and 
 should not be run in a cluster way but is still relevant for good performance.
 - JPA: A JPA and Lucene based implementation of James. Only Derby driver is currently supported.
 - JPA with SMTP only using Derby: A minimalist SMTP server based on JPA storage technology and Derby driver
 - JPA with SMTP only using MariaDB: A minimalist SMTP server based on JPA storage technology and MariaDB driver

Some components however do have several implementations a user can choose from in a given product. This is the case for:

 - BlobExport: Exporting a blob from the blobStore to an external user. Two implementations are currently supported: 
 localFiles and LinShare.
 - Text extraction: Extracting text from attachment to enable attachment search. There is a Tika implementation, but 
 lighter JSOUP based, as well as no text extraction options are also available.

=====================================================
== File: src/adr/0011-remove-elasticsearch-document-source.md
=====================================================
# 11. Disable ElasticSearch source

Date: 2019-10-17

## Status

Rejected

The benefits do not outweigh the costs.

## Context

Though very handy to have around, the source field does incur storage overhead within the index. 

## Decision

Disable `_source` for ElasticSearch indexed documents.

## Consequences

Given a dataset composed of small text/plain messages, we notice a 20% space reduction of data stored on ElasticSearch.

However, patch updates can no longer be performed upon flags updates. Upon flag update we need to fully read the mail 
content, then mime-parse it, potentially html parse it, extract attachment content again and finally index again the full 
document.

Without `_source` field, flags update is two times slower, 99 percentile 4 times slower, and this impact negatively other 
requests.

Note please that `_source` allows admin flexibility like performing index level changes without downtime, amongst others:
 - Increase shards
 - Modifying replication factor
 - Changing analysers (IE allows an admin to configure FR analyser instead of EN analyser)

## References

 - https://www.elastic.co/guide/en/elasticsearch/reference/6.3/mapping-source-field.html
 - [JIRA](https://issues.apache.org/jira/browse/JAMES-2906)
 - [PR discussing this ADR](https://github.com/apache/james-project/pull/171)

=====================================================
== File: src/adr/0059-upgrade-to-cassadra-driver-4.md
=====================================================
# 59. Upgrade to Cassandra driver 4

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

Cassandra driver 3 latest release took pace in 201X. An outdated dependency pauses a security risk.

Moreover Cassandra driver 4:
 - Have prime reactive support and do not need to pass through an intermediate "CompletableFuture"
 representation which is more optimised.
 - In Cassandra driver 3, paging is blocking. Handling paging the reactive way means we do not 
 need to aggressively switch the processing to an elastic thread, which helps keeping the count of 
 threads low.
 - Cassandra driver 4 has built in support for advanced driver configuration tuning without the 
 need for the application to programmatically configure the driver. This means great flexibility without
 the need for the application to proxy the driver configuration parameters.

## Decision

Upgrade James to Cassandra driver 4.

Handle Cassandra requests callbacks on the Cassandra driver thread.

## Consequences

We expect a performance enhancement for native reactive support from the Cassandra driver, as well
as a better thread handling which translate to improved latencies/throughput.

This code change needs a rewrite of all the Cassandra data access layer.

Associated risk:
 - Blocking on the Cassandra driver thread is prohibited. Tools like Blockhound can be adapted to 
 mitigate this.
 - Blocking a Cassandra request from within a Cassandra driver thread result in a request timeout.
 - Long running computation should be switched to other threads as it can prevent other Cassandra 
 requests from being executed.
 
Mechanisms related to Cassandra driver configuration will need to be reworked. This leads to a breaking
change but our Cassandra driver configuration will be simpler and more standard.

## References

- [JIRA JAMES-3774](https://issues.apache.org/jira/browse/JAMES-3774)

=====================================================
== File: src/adr/0016-distributed-workqueue.md
=====================================================
# 16. Distributed WorkQueue

Date: 2019-12-03

## Status

Accepted (lazy consensus) & implemented

Supercedes [3. Distributed WorkQueue](0003-distributed-workqueue.md)

## Context

By switching the task manager to a distributed implementation, we need to be able to run a `Task` on any node of the cluster.

## Decision

  For the time being we will keep the sequential execution property of the task manager.
  This is an intermediate milestone toward the final implementation which will drop this property.

 * Use a RabbitMQ queue as a workqueue where only the `Created` events are pushed into.
   Instead of using the brittle exclusive queue mechanism described in [3. Distributed WorkQueue](0003-distributed-workqueue.md), we will
   now use the natively supported [Single Active Consumer](https://www.rabbitmq.com/consumers.html#single-active-consumer) mechanism. 


## Consequences

 * This solution is safer to use in production: if the active consumer dies, an other one is promoted instead.
 * This change needs RabbitMQ version to be at least 3.8.0.
 * The serial execution of tasks still does not leverage cluster scalability.
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)
* [PR discussing this ADR](https://github.com/apache/james-project/pull/259)

=====================================================
== File: src/adr/0052-pulsar-mailqueue.md
=====================================================
# 52. Pulsar MailQueue

Date: 2022-01-07

## Status

Accepted (lazy consensus).

Implemented.

Provides an alternative to [ADR-31 Distributed MailQueue (RabbitMQ + Cassandra)](0031-distributed-mail-queue.md).

## Context

### Mail Queue

MailQueue is a central component of SMTP infrastructure allowing asynchronous mail processing. This enables a short 
SMTP reply time despite a potentially longer mail processing time. It also works as a buffer during SMTP peak workload
to not overload a server. 

Furthermore, when used as a Mail Exchange server (MX), the ability to add delays being observed before dequeing elements
allows, among others:

 - Delaying retries upon MX delivery failure to a remote site.
 - Throttling, which could be helpful for not being considered a spammer.

A mailqueue also enables advanced administration operations like traffic review, discarding emails, resetting wait 
delays, purging the queue, etc.

### Existing distributed MailQueue

Distributed James currently ships a distributed MailQueue composing the following software with the following 
responsibilities:

 - **RabbitMQ** for messaging. A rabbitMQ consumer will trigger dequeue operations.
 - A time series projection of the queue content (order by time list of mail metadata) will be maintained in **Cassandra** . 
 Time series avoid the aforementioned tombstone anti-pattern, and no polling is performed on this projection.
 - **ObjectStorage** (Swift or S3) holds large byte content. This avoids overwhelming other software which do not scale
 as well in term of Input/Output operation per seconds.
 
This implementation suffers from the following pitfall:

 - **RabbitMQ** is hard to reliably operate in a cluster. Cluster queues were only added in the 3.8 release line. Consistency 
 guaranties for exchanges are unclear.
 - The RabbitMQ Java driver is boiler plate and error prone. Things like retries, 
 exponential back-offs, dead-lettering do not come out of the box. Publish confirms are tricky. Blocking calls are 
 often performed. The driver is not cluster aware and would operate connected to a single host.
 - The driver reliability is questionable: we experienced some crashed consumers that are never restarted.
 - Throughput and scalability of RabbitMQ is questionable.
 - The current implementation does not support priorities, delays.

=====================================================
== File: src/adr/0014-blobstore-storage-policies.md
=====================================================
# 14. Add storage policies for BlobStore

Date: 2019-10-09

## Status

Accepted

Adoption had been backed by some performance tests, as well as data repartition between Cassandra and object storage shifts.

## Context

James exposes a simple BlobStore API for storing raw data. However such raw data often vary in size and access patterns.

As an example:

 - Mailbox message headers are expected to be small and frequently accessed
 - Mailbox message body are expected to have sizes ranging from small to big but are unfrequently accessed
 - DeletedMessageVault message headers are expected to be small and unfrequently accessed

Also, the capabilities of the various implementations of BlobStore have different strengths:

 - CassandraBlobStore is efficient for small blobs and offers low latency. However it is known to be expensive for big blobs. Cassandra storage is expensive.
 - Object Storage blob store is good at storing big blobs, but it induces higher latencies than Cassandra for small blobs for a cost gain that isn't worth it.

Thus, significant performance and cost ratio refinement could be unlocked by using the right blob store for the right blob.

## Decision

Introduce StoragePolicies at the level of the BlobStore API.

The proposed policies include:

 - SizeBasedStoragePolicy: The blob underlying storage medium will be chosen depending on its size.
 - LowCostStoragePolicy: The blob is expected to be saved in low cost storage. Access is expected to be unfrequent.
 - PerformantStoragePolicy: The blob is expected to be saved in performant storage. Access is expected to be frequent.

An HybridBlobStore will replace current UnionBlobStore and will allow to choose between Cassandra and ObjectStorage implementations depending on the policies.

DeletedMessageVault, BlobExport & MailRepository will rely on LowCostStoragePolicy. Other BlobStore users will rely on SizeBasedStoragePolicy.

Some performance tests will be run in order to evaluate the improvements.

## Consequences

We expect small frequently accessed blobs to be located in Cassandra, allowing ObjectStorage to be used mainly for large costly blobs.

In case of a less than 5% improvement, the code will not be added to the codebase and the proposal will get the status 'rejected'.

We expect more data to be stored in Cassandra. We need to quantify this for adoption.

=====================================================
== File: src/adr/0008-distributed-task-await.md
=====================================================
# 8. Distributed Task await

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

By switching the task manager to a distributed implementation, we need to be able to `await` a `Task` running on any node of the cluster.

## Decision

 * Broadcast `Event`s in `RabbitMQ`

## Consequences

 * `RabbitMQTaskManager` should broadcast termination `Event`s (`Completed`|`Failed`|`Canceled`)
 * `RabbitMQTaskManager.await` should: first, check the `Task`'s state; and if it's not terminated, listen to RabbitMQ
 * The await should have a timeout limit
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)


=====================================================
== File: src/adr/0053-email-rate-limiting.md
=====================================================
# 53. Email rate limiting

Date: 2021-01-10

## Status

Accepted (lazy consensus).

Implemented.

## Context

Rate limiting is one of the common features expected from an email system. Examples: SaaS is
one https://www.fastmail.help/hc/en-us/articles/1500000277382-Account-limits#sending/receiving
, https://support.google.com/mail/answer/22839

They limit how many emails users can send/receive from/to each email account over a given period of time.  
We believe the rate-limiting will help James to have more benefits:

- Control of the resources
- Easy to configure dynamically the user policy.
- Complements the storage quota
- Can be a security requirement for SaaS deployments.
- Minimise impacts of Open-relay types of compression.
- Limiting the amount of emails sent to third parties can also prevent them from considering you as an open relay and can
  be beneficial as well.

## Decision

Set up a new maven project dedicated to rating limiting. This allows the rate limiting mailets to be embedded in a James
server as a soft dependency using the external-jar loading mechanism. Please note that this will take the form of an
extension jar, that could be dropped in one's James installation, and thus is optional, and not a runtime dependency.

Rate limiting will be enabled per sender, per receiver and globally. For each we will provide options for email size and
email count.

- This can be done via mailets:
    - PerSenderRateLimit is per sender
    - PerRecipientRateLimit is per recipient
    - GlobalRateLimit is for everyone. Depending on the position in the pipeline this could allow rate limiting all emails in
      transit, relayed emails or locally delivered emails.    
      The rate limit will be configured
      in [mailetcontainer.xml](/server/apps/distributed-app/sample-configuration/mailetcontainer.xml).

- Those mailets will be based on a generic RateLimiter interface. We will propose two implementations for it:
    - In memory implementation: suitable for single instance deployments.
    - [Redis](https://redis.io) based implementation: suitable for distributed deployments.

We will base on [RateLimitJ](https://github.com/mokies/ratelimitj) to provide the implementation.
It is a Java library for rate limiting, assembled using extensible storage (Redis) and application framework adaptors. 

=====================================================
== File: src/adr/0013-precompute-jmap-preview.md
=====================================================
# 13. Precompute JMAP Email preview

Date: 2019-10-09

## Status

Accepted (lazy consensus) & implemented

## Context

JMAP messages have a handy preview property displaying the firsts 256 characters of meaningful test of a message.

This property is often displayed for message listing in JMAP clients, thus it is queried a lot.

Currently, to get the preview, James retrieves the full message body, parse it using MIME parsers, removes HTML and keep meaningful text.

## Decision

We should pre-compute message preview.

A MailboxListener will compute the preview and store it in a MessagePreviewStore.

We should have a Cassandra and memory implementation.

When the preview is precomputed then for these messages we can consider the "preview" property as a metadata.

When the preview is not precomputed then we should compute the preview for these messages, and save the result for later.

We should provide a webAdmin task allowing to rebuild the projection. The computing and storing in MessagePreviewStore 
is idempotent and the task can be run in live without any concurrency problem.

Some performance tests will be run in order to evaluate the improvements.

## Consequences

Given the following scenario played by 2500 users per hour (constant rate)
 - Authenticate
 - List mailboxes
 - List messages in one of their mailboxes
 - Get 8 times the properties expected to be fast to fetch with JMAP

We went from:
 - A 7% failure and timeout rate before this change to almost no failure
 - Mean time for GetMessages went from 9 710 ms to 434 ms (22 time improvment), for all operation from
 12 802 ms to 407 ms (31 time improvment)
 - P99 is a metric that did not make sense because the initial simulation exceeded Gatling (the performance measuring tool 
 we use) timeout (60s) at the p95 percentile. After this proposal p99 for the entire scenario is of 1 747 ms

As such, this changeset significantly increases the JMAP performance.


=====================================================
== File: src/adr/0067-quota-for-jmap-uploads.md
=====================================================
# 67. Quota for JMAP uploads

Date: 2023-08-17

## Status

Accepted (lazy consensus).

Implemented.

Overrides [ADR-48 Cleaup JMAP uploads](0048-cleanup-jmap-uploads.md).

## Context

The [JMAP] protocol offers a distinct API to upload blobs, that can later be referenced when creating emails. The 
specification mentions that implementers `SHOULD` enforce a quota for this use case. For security reason this quota is 
set by user, and exceeded his quota should result in older data being deleted.

Apache James currently do not implement limitations on data being uploaded by users, meaning that authenticated user can 
essentially store unlimited amount of binary data. This is especially problematic for deployments whose users can be 
attackers (eg SAAS).

## Decision

Implement quota for JMAP uploads. We need a generic interface for JMAP upload quota current values that existing 
implementation can implement.

Store current values on a per user basis. Current value is increased upon uploads, and decreased when a blob is deleted.

Limit is set globally via the JMAP configuration. Default value: 10MB.

## Consequences

Improved security for SaaS operation.

Storing such values in Cassandra incurs a cost as it needs extra tables. The count of tables shall be limited (memory and
operational overhead per table.) We plan complementary work to expose a technical Cassandra storage interface for quota,
that can be used to implement arbitrary quota-like use cases.

Cassandra counters that would be used to keep track of users current space usage are easy to get out of synchronisation
(namely because of counters consistency level ONE usage and non-idempotence causing the driver not to retry failed 
updates). We thus need a corrective task in order to recompute the current values.

Care needs to be taken with concurrency. Given the nature of the quota, we expect data races (because 100MB of storage 
space is not much, exceeding the quota should be considered a regular operation. Clients uploading files parallely might
trigger data races upon older data deletion). In practice this means:
 - Be eventually consistent and cleanup data after the upload returns as upfront quota validation with JMAP upload 
constraints on to of Cassandra counter data model is especially prone to data races
 - Upon cleanup, free at least 50% of the space: this would decrease the frequency of updates
 - Expose a configurable probability of recomputing the upload quota

=====================================================
== File: src/adr/0028-Recompute-mailbox-quotas.md
=====================================================
# 28. Recompute mailbox quotas

Date: 2020-04-03

## Status

Accepted (lazy consensus) & implemented

## Context

JMAP custom quota extension, as well as IMAP [RFC-2087](https://tools.ietf.org/html/rfc2087) enables a user to monitor
the amount of space and message count he is allowed to use, and that he is effectively using.

To track the quota values a user is effectively using, James relies on the 
[eventBus](../site/markdown/server/manage-guice-distributed-james.md#mailbox-event-bus) to increment a Cassandra counter
corresponding to this user.

However, upon Cassandra failure, this value can be incorrect, hence the need of correcting it.

## Data model details

Table: imapUidTable: Holds mailbox and flags for each message, lookup by message ID

Table: messageV2: Holds message metadata, independently of any mailboxes. Content of messages is stored in `blobs` 
       and `blobparts` tables.
       
Table: currentQuota: Holds per quota-root current values. Quota-roots defines groups of mailboxes which share quotas 
limitations.

Operation:
 - Quota updates are done asynchronously (event bus + listener) for successful mailbox operations.
   - If the quota update is not applied, then we are inconsistent
   - EventBus errors are retried upon errors, counters being non-indempotent, this can result in inconsistent quotas

## Decision

We will implement a generic corrective task exposed via webadmin.

This task can reuse the `CurrentQuotaCalculator` and call it for each and every quotaRoot of each user.

This way, non-Cassandra implementation will also benefit from this task.

## Consequences

This task is not concurrent-safe. Concurrent operations will result in an invalid quota to be persisted.

However, as the source of truth is not altered, re-running this task will eventually return the correct result.

## References


=====================================================
== File: src/adr/0070-postgresql-adoption.md
=====================================================
# 68. Native PostgreSQL adoption

Date: 2023-10-31

## Status

Accepted (lazy consensus).

Not implemented yet.

## Context

Today, Apache James is mostly developed towards [the Distributed variant](https://james.staged.apache.org/james-distributed-app/3.8.0/index.html)
which targets big enterprises/organizations with a big and scalable deployment.

Meanwhile, there are still great needs for small/medium mail server deployments in the market.

However, nowadays, Apache James is not really great at serving that small/medium deployments. Obviously, Distributed James with the shiny big data
technologies like Apache Cassandra, OpenSearch, RabbitMQ... is too costly for that size of deployment. JPA James should be the feasible variant that
could fit those deployments. Despite the JPA implementation allowing to deploy James on top of various popular RDBMS which is useful, JPA with the
Object Relational Mapping nature which makes optimizing SQL queries hard and a backed JDBC blocking driver is usually a bad fit for applications requiring high performance like a mail server.
Besides that, JPA as an abstraction layer prevents James from using advanced features of a given RDBMS e.g. search engine, or blob storage...
From a development aspect, bad developing experience with JPA also limited James community from contributing more to JPA James e.g. JMAP is not supported for JPA James.

It has been [a long-term desire of the James community](https://issues.apache.org/jira/browse/JAMES-2586) to have a James variant that fit small/medium deployments without relying on JPA.

## Decision

We would implement a PostgresSQL-specific backend.

PostgreSQL is a rock-solid well-known, proven, and mature open source relational database with great adoption on the market.
Besides a traditional SQL database, PostgreSQL could serve as [a blob storage](https://www.postgresql.org/docs/current/largeobjects.html), [a search engine](https://www.postgresql.org/docs/current/textsearch.html) and [a message queue](https://www.postgresql.org/docs/current/sql-notify.html).

We would start implementing James mailbox backed by PostgreSQL:
- We implement it step by step on a feature branch of James called `postgresql`.
- We start from a copy of JPA modules into new Postgres ones, then migrate code step by step from JPA to Postgresql implementation. This means that during the dev process, both JPA and Postgresql implementation will cohabit until we finally get rid of the JPA code.
- The [r2dbc-postgresql](https://github.com/pgjdbc/r2dbc-postgresql) reactive client would be used, alongside [jOOQ](https://www.jooq.org/) (which supports `r2dbc-postgresql` under the hood) for higher level SQL queries.
- We at first would start with a simple connection pool implementation: 1 fixed Postgresql connection per domain.
  The connection pool implementation could be backed by [r2dbc-pool](https://github.com/r2dbc/r2dbc-pool).

- Row Level Security usage would be optional, which enforces strict tenant isolation: domain A won't access domain B data even if we screw up James access control layer.
- We would need to do some benchmarks along the road to prove the gains we get from the Postgres implementation compared to the JPA one.

Once the Postgres mailbox implementation is stable, we will continue to invest in using Postgres on other blocks:
- Blob storage implementation
- Full-text search implementation
- Message queue implementation

## Consequences


=====================================================
== File: src/adr/0022-cassandra-message-inconsistency.md
=====================================================
# 22. Cassandra Message inconsistencies

Date: 2020-02-27

## Status

Accepted (lazy consensus) & implemented

## Context

Messages are denormalized in Cassandra in order to:

 - access them by their unique identifier (messageId), for example through the JMAP protocol
 - access them by their mailbox identifier and Unique IDentifier within that mailbox (mailboxId + uid), for example 
 through the IMAP protocol

Here is the table organisation:

 - `messageIdTable` Holds mailbox and flags for each message, lookup by mailbox ID + UID
 - `imapUidTable` Holds mailbox and flags for each message, lookup by message ID

Failures during the denormalization process will lead to inconsistencies between the two tables.

This can lead to the following user experience:

```
BOB receives a message
The denormalization process fails
BOB can read the message via JMAP
BOB cannot read the message via IMAP

BOB marks a message as SEEN
The denormalization process fails
The message is SEEN in JMAP
The message is UNSEEN in IMAP
```

### Current operations

 - Adding a message:
   - (CassandraMessageMapper) First reference the message in `messageIdTable` then in `imapUidTable`.
   - (CassandraMessageIdMapper) First reference the message in `imapUidTable` then in `messageIdTable`.
 - Deleting a message:
   - (CassandraMessageMapper) First delete the message in `imapUidTable` then in `messageIdTable`.
   - (CassandraMessageIdMapper) Read the message metadata using `imapUidTable`, then first delete the message in 
   `imapUidTable` then in `messageIdTable`.
 - Copying a message:
   - (CassandraMessageMapper) Read the message first, then first reference the message in `messageIdTable` then
    in `imapUidTable`.
 - Moving a message:

=====================================================
== File: src/adr/0005-distributed-task-termination-ackowledgement.md
=====================================================
# 5. Distributed Task termination ackowledgement

Date: 2019-10-02

## Status

Accepted (lazy consensus) & implemented

## Context

By switching the task manager to a distributed implementation, we need to be able to execute a `Task` on any node of the cluster.
We need a way for nodes to be signaled of any termination event so that we can notify blocking clients.

## Decision

 * Creating a `RabbitMQEventHandler` which publish `Event`s pushed to the task manager's event system to RabbitMQ
 * All the events which end a `Task` (`Completed`, `Failed`, and `Canceled`) have to be transmitted to other nodes

## Consequences

 * A new kind of `Event`s should be created: `TerminationEvent` which includes `Completed`, `Failed`, and `Canceled`
 * `TerminationEvent`s will be broadcasted on an exchange which will be bound to all interested components later
 * `EventSourcingSystem.dipatch` should use `RabbitMQ` to dispatch `Event`s instead of triggering local `Listener`s
 * Any node can be notified when a `Task` emits a termination event
 
## References

* [JIRA ticket](https://issues.apache.org/jira/projects/JAMES/issues/JAMES-2813)


=====================================================
== File: src/adr/0033-use-scala-in-event-sourcing-modules.md
=====================================================
# 33. Use scala in event sourcing modules

Date: 2019-12-13

## Status

Accepted (lazy consensus) & implemented

## Context

At the time being James use the scala programming language in some parts of its code base, particularily for implementing the Distributed Task Manager,
which uses the event sourcing modules.

The module `event-store-memory` already uses Scala.

## Decision

What is proposed here, is to convert in Scala the event sourcing modules.
The modules concerned by this change are:
  -  `event-sourcing-core`
  -  `event-sourcing-pojo`
  -  `event-store-api`
  -  `event-store-cassandra`

## Rationales

This will help to standardize the `event-*` modules as `event-store-memory` is already written in Scala.
This change will avoid interopability concerns with the main consumers of those modules which are already written in Scala: see the distributed task manager.
In the long run this will allow to have a stronger typing in those parts of the code and to have a much less verbose code.

## Consequences

We will have to mitigate the pervading of the Scale API in the Java code base by implementing Java facade.

## References

* [JIRA](https://issues.apache.org/jira/browse/JAMES-3009)

=====================================================
== File: src/adr/0061-delegation.md
=====================================================
# 61. Delegation

Date: 2022-09-13

## Status

Accepted (lazy consensus).

Implemented. 

## Context

Delegation is a common feature for email servers:

```
As user A I want to access mailbox of user B.
```

James currently supports a similar feature called impersonation:

```
As an administrator I want to acces mailbox of user B.
```

Impersonation can for instance be used to perform migrations with tools like IMAP-Sync.

## Decision

Implement delegation in Apache James (opt in).

Reuse APIs used for impersonation to also back delegation up. Technically if user B delegates his
account to user A then user A can impersonate user B.

Stored delegated access in a Cassandra database and expose it through webadmin.

Support delegation while logging in IMAP/SMTP. Both LOGIN/PLAIN authentication and OIDC
authentication are supported.

## Consequences

Logging traces belongs to the target user and not the user that really authenticated
though an intermediate log upon logging should allow a correlation.

Associated risk:
 - Special care needs to be paid to delegation as it can fall into the `improper authorization` 
 attack class and might result in data leaks / modification / deletion. However, as delegation 
 is performed upon logging the attack surface is limited, and typically simpler than traditional
 right management systems.

## Follow-up work

=====================================================
== File: src/adr/0045-support-jmap-push-with-mailbox-changes-implementation.md
=====================================================
# 45. Support JMAP Push with Mailbox/changes implementation

Date: 2020-12-08

## Status

Accepted (lazy consensus).

Implemented.

## Context

JMAP Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server. 

In order to support this, we need to handle the **state** property that comes with JMAP get/set request. This means that James needs to be able 
to record a new state for objects whenever a change happens as well as return the most recent state to the client when fetching objects. 

First step is to implement Mailbox/changes. 

## Decision

We will implement a mechanism to record all the changes happening to Mailbox objects in the form of a list of **mailboxId**. When an event such as  
created/updated/destroyed occur, or when message is appended to a mailbox we will store their **mailboxIds** along with a **state** object
in a Cassandra table.  

Each state will have a list of changes, and all the **mailboxId** will be stored as separated lists corresponding to the change which they represent: **created**, **updated**, **destroyed**.
For the case when messages are appended to a mailbox, it will be counted as an updated event and that mailboxId should be stored in **updated** list. 

Leveraging the **MailboxChanges** table, we can now fetch all the changes that have occurred since a particular **state**.

States are stored in Cassandra as time based UUID (**TimeUUID**). This ensures that no conflicting changes will happen in the case when two or more events occur at the same point in time.
**TimeUUID** also allows **state** to be sorted in chronological order.

Components that need to be implemented:

- MailboxChangesRepository: Allows storing and fetching the **state** along with the lists of **mailboxId** in **MailboxChanges** table.
- MailboxChangeListener: Listens to changes and triggers the record creation in **MailboxChanges** table.
- MailboxChangeMethod: Handles the **state** property, allowing client to fetch the changes since a particular state. 
- MailboxSetMethod/MailboxGetMethod needs to query the MailboxChangesRepository for their states properties.
 
## Example of a Mailbox/changes request/response

**Request**

```
[["Mailbox/changes", {
  "accountId": "29883977c13473ae7cb7678ef767cbfbaffc8a44a6e463d971d23a65c1dc4af6",
  "sinceState": "dd3721a6-b3ee-4884-8762-fccc0c576438"
}, "t0"]]
```

=====================================================
== File: src/adr/0010-enable-elasticsearch-routing.md
=====================================================
# 10 Enable ElasticSearch routing

Date: 2019-10-17

## Status

Accepted (lazy consensus) & implemented

Additional performance testing is required for adoption.

## Context

Our queries are mostly bounded to a mailbox or a user. We can easily
limit the number of ElasticSearch nodes involved in a given query by
grouping the underlying documents on the same node using a routing key.

Without a routing key, each shard needs to execute the query. The coordinator
needs also to be waiting for the slowest shard.

Using the routing key unlocks significant throughput enhancement (proportional
to the number of shards) and also a possible high percentile latency enhancement.

As most requests are restricted to a single coordination, most search requests will
hit a single shard, as opposed to non routed searches which would have hit each shards 
(each shard would return the number of searched documents, to be ordered and limited 
again in the coordination node). This allows to be more linearly scalable.

## Decision

Enable ElasticSearch routing.

Messages should be indexed by mailbox.

Quota Ratio should be indexed by user.

## Consequences

A data reindex is needed.

On a single ElasticSearch node with 5 shards, we noticed latency reduction for mailbox search (2x mean time and 3x 99 
percentile reduction)

## References

 - https://www.elastic.co/guide/en/elasticsearch/reference/6.3/mapping-routing-field.html
 - [JIRA](https://issues.apache.org/jira/browse/JAMES-2917)
 - [PR discussing this ADR](https://github.com/apache/james-project/pull/171)

=====================================================
== File: protocols/smtp/src/test/resources/a50.eml
=====================================================
Subject: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Message-ID: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
X-Sender: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
User-Agent: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

=====================================================
== File: server/README.crypto
=====================================================
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See <http://www.wassenaar.org/> for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

The following provides more details on the included cryptographic software: 
  Apache James Server uses third party cryptography software including   
      bcjmail and bcprov libraries by "The Legion of the Bouncy Castle" http://www.bouncycastle.org, 
      jasypt library by "Jasypt.org" http://www.jasypt.org/ 
      and the Java Runtime Environment.
      

=====================================================
== File: server/queue/queue-memory/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.james</groupId>
        <artifactId>james-server</artifactId>
        <version>3.9.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>james-server-queue-memory</artifactId>

    <name>Apache James :: Server :: Mail Queue :: Memory</name>

    <dependencies>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-mailet-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-core</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-queue-api</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-queue-api</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-testing</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>testing-base</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
        </dependency>
        <dependency>

=====================================================
== File: server/apps/memory-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/memory-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/memory-app/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/apps/memory-app/src/assemble/README.adoc
=====================================================
= Guice-Memory Module How-to

== Requirements

 * Java 11 SDK

== Running

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/container/guice/memory-guice/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.

You also need to generate a keystore with the following command:

[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----

Once everything is set up, you just have to run the jar with:

[source]
----
$ java -Dworking.directory=. -Dlogback.configurationFile=conf/logback.xml -Djdk.tls.ephemeralDHKeySize=2048 -jar james-server-memory-guice.jar
----

Note that binding ports below 1024 requires administrative rights.

=====================================================
== File: server/apps/memory-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add you customs Mailets/Matchers.

=====================================================
== File: server/apps/memory-app/README.md
=====================================================
# James Memory server

In order to build both the ZIP and docker packaging, run:

```
mvn clean install -DskipTests
```

## ZIP distribution

Available in `target` directory, the ZIP include detailed instructions.

## Docker distribution

To import the image locally:

```
docker image load -i target/jib-image.tar
```

Then run it:

```
docker run apache/james:memory-latest
```


For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:

```
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:memory-latest
```

In the case of quick start James without manually creating a keystore (e.g. for development),
James memory server will auto-generate keystore file with the default setting that is declared in `jmap.properties` (tls.keystoreURL, tls.secret)
Hence just run docker command:

```
docker run apache/james:memory-latest
```


Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags) 
to pass extra JVM flags. For instance:

```
docker run -e "JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m" apache/james:memory-latest
```


=====================================================
== File: server/apps/memory-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/memory-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================
# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y

=====================================================
== File: server/apps/memory-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.
james.jmx.credential.generation=true

# Disable Remote Code Execution feature from JMX

=====================================================
== File: server/apps/memory-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details

enabled=true

tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle
delay.sends.enabled=true

# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle

#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
#jwt.publickeypem.url=file://conf/jwt_publickey

# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against ElasticSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true

# If you want to specify authentication strategies for Jmap draft version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.draft=AccessTokenAuthenticationStrategy,JWTAuthenticationStrategy,QueryParameterAccessTokenAuthenticationStrategy

# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy

# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false

=====================================================
== File: server/apps/webadmin-cli/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/apps/webadmin-cli/src/test/resources/valid_token_admin_false.jwt
=====================================================
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBvcGVu
LXBhYXMub3JnIiwiYWRtaW4iOmZhbHNlLCJpYXQiOjE0ODkwNDA4Njd9.reQc3DiVvbQHF08oW1qOUyDJyv3tfzDNk8jhVZequiCdOI9vXnRlOe
-yDYktd4WT8MYhqY7MgS-wR0vO9jZFv8ZCgd_MkKCvCO0HmMjP5iQPZ0kqGkgWUH7X123tfR38MfbCVAdPDba-K3MfkogV1xvDhlkPScFr_6MxE
xtedOK2JnQZn7t9sUzSrcyjWverm7gZkPptkIVoS8TsEeMMME5vFXe_nqkEG69q3kuBUm_33tbR5oNS0ZGZKlG9r41lHBjyf9J1xN4UYV8n866d
a7RPPCzshIWUtO0q9T2umWTnp-6OnOdBCkndrZmRR6pPxsD5YL0_77Wq8KT_5__fGA

=====================================================
== File: server/apps/webadmin-cli/src/test/resources/valid_token_admin_true.jwt
=====================================================
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhZG1pbkBvcGVuL
XBhYXMub3JnIiwiYWRtaW4iOnRydWUsImlhdCI6MTQ4OTAzODQzOH0.rgxCkdWEa-92a4R-72a9Z49k4LRvQDShgci5Y7qWRUP9IGJCK-lMkrHF
4H0a6L87BYppxVW701zaZ6dNxRMvHnjLBBWnPsC2B0rkkr2hEL2zfz7sb-iNGV-J4ICx97t8-TfQ5rz3VOX0FwdusPL_rJtmlGEGRivPkR6_aBe1
kQnvMlwpqF_3ox58EUqYJk6lK_6rjKEV3Xfre31IMpuQUy6c7TKc95sL2-13cknelTierBEmZ00RzTtv9SHIEfzZTfaUK2Wm0PvnQjmU2nIdEvU
EqE-jrM3yYXcQzoO-YTQnEhdl-iqbCfmEpYkl2Bx3eIq7gRxxnr7BPsX6HrCB0w

=====================================================
== File: server/apps/webadmin-cli/README.md
=====================================================
# A WebAdmin based CLI for Apache James

## Development

Webadmin command-line interface is an upcoming replacement for the outdated, security-vulnerable JMX command-line interface. It also aims at providing a more modern and intuitive interface.

## Run the command line

## Syntax

General syntax to run the command line

```   
$ ./james-cli [OPTION] ENTITY ACTION {ARGUMENT}
```

where

    OPTION: optional parameter when running the command line,
  
    ENTITY: represents the entity to perform action on,
  
    ACTION: name of the action to perform,
  
    ARGUMENT: arguments needed for the action.

Example: 
```
$ ./james-cli --url http://127.0.0.1:9999 domain list
```

The above command lists all domain names available on domain route at address http://127.0.0.1:9999. 
It does not require any argument to execute. 

The following options can be used:

--url : Without it, the default value is http://127.0.0.1:8000.

When James server's jwt setting is enabled, jwt options are required:

--jwt-token : pass the jwt token directly as plain text. E.g: 
```
$ ./james-cli --url http://127.0.0.1:8000 --jwt-token eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJlc24iLCJhZG1pbiI6dHJ1ZSwiaWF0IjoxNjA0Mjg3OTU3fQ.IY3AWg9lQE4muXg8iRu1nbluTm786_6aLcoEylCGcbtGcEOp81Neani1-_17xGp2aF6kxBJva0_f_ADUplhfirGXwoxM8evcsdmQBhNGDfa-oXT_a-dd6n7MMPweGOFGhjxnTRvNHpyqDcfNuGGGcB8OfzOsN5epWNkhlivk2OSuY8vR8fHB9Es1Oiv1i8D5H93-K5IXParVLpAtj7uLZT9b7G-kjxlQagApH8USx6JlqIjMwhvM--79SrzPKZ2AtM59NfDT4g6GPaMNntQvXr06Xu3Leys97cot2rsXNfXY1OohorXiYiZ66-eMRcQ7pHF-NyS6dlg87rnMQlpKHw domain list
```
Commands with valid token with admin=true claim should pass James's authentication.

--jwt-from-file : pass the jwt token through a file (such as token.jwt). E.g:
```
$ ./james-cli --url http://127.0.0.1:8000 --jwt-from-file token.jwt domain list
```

=====================================================
== File: server/apps/webadmin-cli/james-cli
=====================================================
#!/bin/bash

java -jar target/james-cli.jar "$@"

=====================================================
== File: server/apps/scaling-pulsar-smtp/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      - s3
      - pulsar
      - postgres
    image: apache/james:scaling-pulsar-smtp-latest
    container_name: james
    hostname: james.local
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
      - "5005:5005"
    environment:
      #- JDK_JAVA_OPTIONS=-Dlogback.configurationFile=/root/conf/logback.xml -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0.0.0.0:5005 -Dworking.directory=/root/
      - JDK_JAVA_OPTIONS=-Dlogback.configurationFile=/root/conf/logback.xml -Dworking.directory=/root/
      - OBJECTSTORAGE_S3_ENDPOINT=http://s3.docker.test:8000/
      - OBJECTSTORAGE_S3_REGION=us-east-1
      - OBJECTSTORAGE_S3_ACCESSKEYID=accessKey1
      - OBJECTSTORAGE_S3_SECRETKEY=secretKey1
      - DATABASE_URL=jdbc:postgresql://postgres/postgres
      - DATABASE_USERNAME=postgres
      - DATABASE_PASSWORD=password
      - PULSAR_BROKER_URI=pulsar://pulsar:6650
      - PULSAR_ADMIN_URI=http://pulsar:8080/
      - PULSAR_NAMESPACE=public/default
    volumes:
      #- $PWD/mariadb-java-client-2.7.2.jar:/root/libs/mariadb-java-client-2.7.2.jar
      #- $PWD/sample-configuration/james-database.properties:/root/conf/james-database.properties
      #- $PWD/sample-configuration/pulsar.properties:/root/conf/pulsar.properties
      #- $PWD/sample-configuration/blob.properties:/root/conf/blob.properties
      #- $PWD/sample-configuration/mailetcontainer.xml:/root/conf/mailetcontainer.xml
      #- $PWD/sample-configuration/mailrepositorystore.xml:/root/conf/mailrepositorystore.xml
      #- $PWD/sample-configuration/jvm.properties:/root/conf/jvm.properties
      #- $PWD/keystore:/root/conf/keystore
      - ./sample-configuration:/root/conf

  s3:
    image: zenko/cloudserver:8.2.6
    container_name: s3.docker.test
    ports:

=====================================================
== File: server/apps/scaling-pulsar-smtp/README.adoc
=====================================================
= Pulsar backed SMTP processing

== App goals

This app provides an easily scalable SMTP processing module based on Apache Pulsar for small to large deployments. The idea being that it is easy enough to operate this assembly at a "reasonable" cost in the cloud until the scale is large enough to warrant switching to the fully distributed app.

In order to support such small deployments destined to grow this app relies on :
- Apache pulsar as there are cost-efficient SAAS deployments that make this app easy to deploy
- A Blobstore (for mail repository) as they are very cost-efficient and available at most providers in the Cloud market.
- A PostgresSQL database for reference data (domain list, recipient rewrite table and users). PostgreSQL databases as a service is available on multiple cloud platform and for this kind of information entry tiers should allow to operate a reasonable service. 

== Building

In order to build the docker packaging, run:

----
mvn clean install -DskipTests

----

== ZIP distribution

Available in `target` directory, the ZIP include detailed instructions.

== Docker distribution

To import the image locally:

----
docker image load -i target/jib-image.tar

----

Then run it:

----
docker run apache/james:scaling-pulsar-smtp-latest

----

For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:

----
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:scaling-pulsar-smtp-latest
----

In the case of quick start James without manually creating a keystore (e.g. for development), just input the command argument `--generate-keystore` when running,
James will auto-generate keystore file with the default setting that is declared in `jmap.properties` (tls.keystoreURL, tls.secret)


=====================================================
== File: server/apps/scaling-pulsar-smtp/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/pulsar.properties
=====================================================
#broker.uri=pulsar://pulsar:6650
broker.uri=${env:PULSAR_BROKER_URI}
#admin.uri=http://pulsar:8080/
admin.uri=${env:PULSAR_ADMIN_URI}
#namespace=public/default
namespace=${env:PULSAR_NAMESPACE}

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/scriptFile.scala
=====================================================
<?xml version="1.0"?>

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be di  sposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
#sun.rmi.dgc.server.gcInterval=3600000000
#sun.rmi.dgc.client.gcInterval=3600000000

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />

</configuration>

=====================================================
== File: server/apps/scaling-pulsar-smtp/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details

# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3

# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false

# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1

# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days

# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false

# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479

# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.

# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=false


=====================================================
== File: server/apps/spring-app/README.crypto
=====================================================
This distribution includes cryptographic software. The country in which you currently reside may have restrictions on the import, possession, use, and/or re-export to another country, of encryption software. BEFORE using any encryption software, please check your country's laws, regulations and policies concerning the import, possession, or use, and re-export of encryption software, to see if this is permitted. See <http://www.wassenaar.org/> for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS), has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1, which includes information security software using or performing cryptographic functions with asymmetric algorithms. The form and manner of this Apache Software Foundation distribution makes it eligible for export under the License Exception ENC Technology Software Unrestricted (TSU) exception (see the BIS Export Administration Regulations, Section 740.13) for both object code and source code.

The following provides more details on the included cryptographic software: 
  Apache James Server uses third party cryptography software including   
      bcjmail and bcprov libraries by "The Legion of the Bouncy Castle" http://www.bouncycastle.org, 
      jasypt library by "Jasypt.org" http://www.jasypt.org/ 
      and the Java Runtime Environment.
      

=====================================================
== File: server/apps/spring-app/src/main/resources/log4j2.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO" monitorInterval="30">
    <Properties>
        <Property name="logDir">${sys:app.home}/log</Property>
        <Property name="logLayoutTomcat">%d{dd-MMM-yyyy HH:mm:ss.SSS} %level [%t] %C.%M:%L - %msg%n</Property>
        <Property name="logLayout1">%d %-7level %logger{36} - %msg%n</Property>
        <Property name="logLayout2">%d %-7level [%t] %C.%M:%L - %msg%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${logLayoutTomcat}" />
        </Console>
        <RollingFile name="SpringFramework" fileName="${logDir}/springframework.log"
                     filePattern="${logDir}/springframework.%d{yyyy-MM-dd}-%i.log.gz"
                     ignoreExceptions="false">
            <PatternLayout pattern="${logLayoutTomcat}"
                           charset="UTF-8" />
            <Policies>
                <!-- <OnStartupTriggeringPolicy /> -->
                <!-- <SizeBasedTriggeringPolicy size="20 MB" /> -->
                <!-- <TimeBasedTriggeringPolicy /> -->
            </Policies>
            <!-- 			<DefaultRolloverStrategy> -->
            <!-- 				<Delete basePath="${logDir}" maxDepth="2"> -->
            <!-- 					<IfFileName -->
            <!-- 						glob="target/log4j2/roll-by-time-and-size/app.*.log.gz" /> -->
            <!-- 					<IfLastModified age="20d" /> -->
            <!-- 				</Delete> -->
            <!-- 			</DefaultRolloverStrategy> -->
        </RollingFile>
        <RollingFile name="openjpa" fileName="${logDir}/openjpa.log"
                     filePattern="${logDir}/openjpa.%d{yyyy-MM-dd}-%i.log.gz"
                     ignoreExceptions="false">
            <PatternLayout pattern="${logLayoutTomcat}"
                           charset="UTF-8" />
            <Policies>
                <!-- <OnStartupTriggeringPolicy /> -->
                <!-- <SizeBasedTriggeringPolicy size="20 MB" /> -->
                <!-- <TimeBasedTriggeringPolicy /> -->
            </Policies>
            <!-- 			<DefaultRolloverStrategy> -->
            <!-- 				<Delete basePath="${logDir}" maxDepth="2"> -->
            <!-- 					<IfFileName -->
            <!-- 						glob="target/log4j2/roll-by-time-and-size/app.*.log.gz" /> -->
            <!-- 					<IfLastModified age="20d" /> -->
            <!-- 				</Delete> -->
            <!-- 			</DefaultRolloverStrategy> -->
        </RollingFile>
        <RollingFile name="James" fileName="${logDir}/james.log"

=====================================================
== File: server/apps/spring-app/src/main/resources/jmxremote.access
=====================================================
james-admin readwrite

=====================================================
== File: server/apps/spring-app/src/main/resources/jmxremote.password
=====================================================
james-admin changeme

=====================================================
== File: server/apps/spring-app/src/main/licensing/app/notice-for-binary.txt
=====================================================

  =========================================================================
  ==      NOTICE file for use with the Apache License, Version 2.0,      ==
  =========================================================================
  
  Apache JAMES Server
  Copyright 1999-2011 The Apache Software Foundation
  
  This product includes software developed at
  The Apache Software Foundation (http://www.apache.org/).
      


  Download the source for:
    jakarta.mail-${version}.jar from https://github.com/eclipse-ee4j/mail/releases
	jakarta.activation-${version}.jar from https://github.com/eclipse-ee4j/jaf/releases

  This distribution contains third party resources requiring the following notices:

    
  For 
    jasypt-1.6.jar
  

        This distribution includes cryptographic software.  The country in 
        which you currently reside may have restrictions on the import, 
        possession, use, and/or re-export to another country, of 
        encryption software.  BEFORE using any encryption software, please 
        check your country's laws, regulations and policies concerning the
        import, possession, or use, and re-export of encryption software, to 
        see if this is permitted.  See http://www.wassenaar.org/ for more
        information.
        
        The U.S. Government Department of Commerce, Bureau of Industry and
        Security (BIS), has classified this software as Export Commodity 
        Control Number (ECCN) 5D002.C.1, which includes information security
        software using or performing cryptographic functions with asymmetric
        algorithms.  The form and manner of this distribution makes it 
        eligible for export under the License Exception ENC Technology 
        Software Unrestricted (TSU) exception (see the BIS Export 
        Administration Regulations, Section 740.13) for both object code and 
        source code.
        
        The following provides more details on the cryptographic software 
        used (note that this software is not included in the distribution):
        
          * The PBE Encryption facilities require the Java Cryptography 
            extensions: http://java.sun.com/javase/technologies/security/.
        
        ---------------------------------

=====================================================
== File: server/apps/spring-app/src/debian/control/control
=====================================================
Source: apache-james
Package: ${artifactId}
Version: ${project.version}
Section: contrib/java
Priority: optional
Maintainer: Apache James Team <server-dev@james.apache.org>
Uploaders: Ioan Eugen Stan <ieugen@apache.org>
Architecture: all
Homepage: http://james.apache.org
Depends: default-jre-headless | java6-runtime-headless | java-6-runtime
Provides: imap-server, mail-transport-agent, pop3-server
Conflicts: mail-transport-agent
Description: Hi-performance, modular and extensible Java based email server.
  The Apache James Project delivers a rich set of open source modules and 
 libraries, written in Java, related to Internet mail communication which build
 into an advanced enterprise mail server.
 James Server provides a mailet container: the email processing is delegated to 
 independent, extensible, pluggable agents specified by the Mailet API. Any 
 function which is not already available (from James or from a third party) can
 be developed.

=====================================================
== File: server/apps/distributed-pop3-app/docker-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# Required to locate Cassandra driver configuration
config.file=/root/conf/cassandra-driver.conf

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

=====================================================
== File: server/apps/distributed-pop3-app/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      tika:
        condition: service_started
      rabbitmq:
        condition: service_started
      s3:
        condition: service_started
    image: apache/james:distributed-pop3-latest
    container_name: james
    hostname: james.local
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
    command:
      - --generate-keystore
    networks:
      - james

  opensearch:
    image: opensearchproject/opensearch:2.1.0
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
    networks:
      james:
        aliases:
          - elasticsearch

  cassandra:
    image: cassandra:4.1.3
    ports:
      - "9042:9042"
    healthcheck:
      test: ["CMD", "cqlsh", "-e", "describe keyspaces"]

=====================================================
== File: server/apps/distributed-pop3-app/README.adoc
=====================================================
= Guice-Distributed POP3 Server How-to

This server diverges from the distributed server by only using MessageId backed by a TimeUUID as a message identifier,
thus is multi-datacenter friendly, however comes with a reduced feature set (only supports SMTP protocol).

== Requirements

 * Java 11 SDK

Firstly, create your own user network on Docker for the James environment:

    $ docker network create --driver bridge james

Third party compulsory dependencies:

 * Cassandra 4.0
 * RabbitMQ-Management 3.8.18
 * Zenko Cloudserver or AWS S3

[source]
----
$ docker run -d --network james -p 9042:9042 --name=cassandra cassandra:4.1.3
$ docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:3.12.1-management
$ docker run -d --network james --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 registry.scality.com/cloudserver/cloudserver:8.7.25
----

== Docker distribution

To import the image locally:

[source]
----
docker image load -i target/jib-image.tar
----

Then run it:

[source]
----
docker run --network james apache/james:distributed-pop3-latest
----

For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:

[source]
----
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run --network james -v $PWD/keystore:/root/conf/keystore apache/james:distributed-pop3-latest
----


=====================================================
== File: server/apps/distributed-pop3-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/distributed-pop3-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/attachment.eml
=====================================================

=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/big.eml
=====================================================

=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/distributed-pop3-app/src/test/resources/rabbitmq.properties
=====================================================
uri=amqp://james:james@rabbitmq_host:5672
management.uri=http://james:james@rabbitmq_host:15672/api/

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================

enabled=false

# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y

# Mailbox that will contain messages restored from the vault, will be created if it does not exist yet
# Optional, default 'Restored-Messages' ; must be set to INBOX for POP3
restoreLocation=INBOX

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# Required to locate Cassandra driver configuration
config.file=conf/cassandra-driver.conf

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />
        <logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />


</configuration>

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/cassandra-driver.conf
=====================================================
# James reference configuration for the DataStax Java driver for Apache Cassandra®.
#
# Unless you use a custom mechanism to load your configuration (see
# SessionBuilder.withConfigLoader), all the values declared here will be used as defaults.
#
# See https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/configuration/ for
# available options.
#
# Please note that contact point and authentication needs to be set in cassandra.properties for now.
datastax-java-driver {

  basic.request {
    timeout = 5 seconds

    consistency = QUORUM

    page-size = 5000

    serial-consistency = SERIAL
  }

  advanced.connection {
    connect-timeout = 5 seconds

    init-query-timeout = 5 seconds

    pool {
      local.size = 2

      remote.size = 2
    }

    max-requests-per-connection = 1024

    max-orphan-requests = 256

    warn-on-init-error = true
  }

  advanced.throttler {
    // class = org.apache.james.backends.cassandra.utils.LockLessConcurrencyLimitingRequestThrottler
    class = ConcurrencyLimitingRequestThrottler

    max-queue-size = 10000

    max-concurrent-requests = 192
  }

  advanced.reconnect-on-init = true


=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details

# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3

# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false

# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false

# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512

# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.

# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=false

# Cache eviction policy is TTL based. Optional and defaults to 7 days. Must be a duration.
# Valid units: ms, sec, min, hour, day, week, month, year
# cache.cassandra.ttl=7days

# Maximum size of stored objects expressed in bytes. Must be strictly positive. Defaults to 8192.
# Units: bytes, Kib, MiB, GiB, TiB
# cache.sizeThresholdInBytes=8 KiB

# ============================================== ObjectStorage ============================================


=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# Read https://james.apache.org/server/config-cassandra.html for further details
# Advanced Cassandra driver option needs to be set via cassandra-driver.conf configuration file

cassandra.nodes=cassandra
cassandra.keyspace.create=true
cassandra.keyspace=apache_james
#cassandra.user=cassandra
#cassandra.password=cassandra
cassandra.replication.factor=1
cassandra.retryConnection.maxRetries=200
cassandra.retryConnection.minDelay=5000

# Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
# Falls back to default read consistency level if the blob is missing.
# Defaults to false.
# optimistic.consistency.level.enabled=false

# Optional. Allows not to use lightweight transactions in CassandraMailRepository.
# If disabled we implement an idempotent behaviour (duplicates are overridden, missing entries upon deletes are ignored).
# Defaults to true.
# mailrepository.strong.consistency=true

=====================================================
== File: server/apps/distributed-pop3-app/sample-configuration/rabbitmq.properties
=====================================================
# RabbitMQ configuration

# Read https://james.apache.org/server/config-rabbitmq.html for further details

# Mandatory
uri=amqp://rabbitmq:5672
# If you use a vhost, specify it as well at the end of the URI
# uri=amqp://rabbitmq:5672/vhost

# Vhost to use for creating queues and exchanges
# Optional, only use this if you have invalid URIs containing characters like '_'
# vhost=vhost1

# Optional, default to the host specified as part of the URI.
# Allow creating cluster aware connections.
# hosts=ip1:5672,ip2:5672

# RabbitMQ Administration Management
# Mandatory
management.uri=http://rabbitmq:15672
# Mandatory
management.user=guest
# Mandatory
management.password=guest

# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
# Optional integer, defaults to 10
#connection.pool.retries=10
# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
# Optional integer, defaults to 100
#connection.pool.min.delay.ms=100
# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
# Optional integer, defaults to 3
#channel.pool.retries=3
# Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
# Optional integer, defaults to 30 seconds.
#channel.pool.max.delay.ms=30000
# Configure the size of the channel pool.
# Optional integer, defaults to 3
#channel.pool.size=3

# Boolean. Whether to activate Quorum queue usage for use cases that benefits from it (work queue).
# Quorum queues enables high availability.
# False (default value) results in the usage of classic queues.
#quorum.queues.enable=true

# Strictly positive integer. The replication factor to use when creating quorum queues.
#quorum.queues.replication.factor

# Parameters for the Cassandra administrative view

=====================================================
== File: server/apps/jpa-smtp-app/docker-compose.yml
=====================================================
version: '3'

# In order to start James JPA app on top of mariaDB:
# 1. Download the driver: `wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar`
# 2. Generate the keystore with the default password `james72laBalle`: `keytool -genkey -alias james -keyalg RSA -keystore keystore`
# 3. Start MariaDB: `docker-compose up -d mariadb`
# 4. Start James: `docker-compose up james`

services:

  james:
    depends_on:
      - mariadb
    image: apache/james:jpa-smtp-latest
    container_name: james
    hostname: james.local
    volumes:
      - $PWD/mariadb-java-client-2.7.2.jar:/root/libs/mariadb-java-client-2.7.2.jar
      - $PWD/sample-configuration/james-database-mariadb.properties:/root/conf/james-database.properties
      - $PWD/keystore:/root/conf/keystore

  mariadb:
    image: mariadb:10.6
    environment:
      - MARIADB_ROOT_PASSWORD=test
      - MARIADB_DATABASE=test
      - MARIADB_USER=test
      - MARIADB_PASSWORD=test

=====================================================
== File: server/apps/jpa-smtp-app/README.adoc
=====================================================
= Guice-JPA SMTP Server How-to

This server target single node James deployments. By default, the derby database is used.

This server acts as a Mail Transfer Agent and do not embed the mailbox component.

== Requirements

* Java 11 SDK

== Running

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-smtp-app/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.

You also need to generate a keystore with the following command:

[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----

Once everything is set up, you just have to run the jar with:

[source]
----
$ java -javaagent:james-server-jpa-smtp-app.lib/openjpa-3.2.0.jar \
  -Dworking.directory=. \
  -Djdk.tls.ephemeralDHKeySize=2048 \
  -Dlogback.configurationFile=conf/logback.xml \
  -jar james-server-jpa-smtp-app.jar
----

Note that binding ports below 1024 requires administrative rights.

== Docker distribution

To import the image locally:

[source]
----
docker image load -i target/jib-image.tar
----

Then run it:

[source]

=====================================================
== File: server/apps/jpa-smtp-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/jpa-smtp-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/jpa-smtp-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add you customs Mailets/Matchers.

=====================================================
== File: server/apps/jpa-smtp-app/conf/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/jpa-smtp-app/conf/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.
james.jmx.credential.generation=true

# Disable Remote Code Execution feature from JMX

=====================================================
== File: server/apps/jpa-smtp-app/conf/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />

</configuration>

=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.
james.jmx.credential.generation=true

# Disable Remote Code Execution feature from JMX

=====================================================
== File: server/apps/jpa-smtp-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />

</configuration>

=====================================================
== File: server/apps/conf/jmxremote.access
=====================================================
james-admin readwrite

=====================================================
== File: server/apps/conf/jmxremote.password
=====================================================
james-admin changeme

=====================================================
== File: server/apps/demo/initialdata.sh
=====================================================
#!/bin/bash

james-cli adddomain james.local

james-cli adduser user01@james.local 1234
james-cli adduser user02@james.local 1234
james-cli adduser user03@james.local 1234


=====================================================
== File: server/apps/demo/Dockerfile
=====================================================
# Run James
#
# VERSION	1.0

FROM apache/james:jpa-latest

# Install git
RUN apt-get update
RUN apt-get install -y git openssl

WORKDIR /root

RUN git clone https://github.com/vishnubob/wait-for-it.git wait-for-it
RUN cp /root/wait-for-it/wait-for-it.sh /usr/bin/wait-for-it.sh

COPY startup.sh /root
COPY initialdata.sh /root
COPY imapserver.xml /root/conf
COPY smtpserver.xml /root/conf
COPY pop3server.xml /root/conf

RUN chmod +x /root/startup.sh
RUN chmod +x /root/initialdata.sh

ENTRYPOINT ["./startup.sh"]

=====================================================
== File: server/apps/demo/startup.sh
=====================================================
#!/bin/bash

if [[ ! -e /root/conf/private.key ]]; then
    openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=US/ST=Apache/L=Fundation/O=/CN=james.apache.org" -keyout /root/conf/private.key -out /root/conf/private.csr
fi

wait-for-it.sh --host=localhost --port=9999 --strict --timeout=0 -- ./initialdata.sh &

java -Djdk.tls.ephemeralDHKeySize=2048 \
     -classpath '/root/resources:/root/classes:/root/libs/*' \
     -javaagent:/root/libs/openjpa-3.2.0.jar \
     -Dlogback.configurationFile=/root/conf/logback.xml \
      -Dworking.directory=/root/ org.apache.james.JPAJamesServerMain

=====================================================
== File: server/apps/cli/README.adoc
=====================================================
== Apache James Server Command Line Interface

To invoke the James CLI from shell during your development process:

[source]
----
java -jar james-server-cli.jar -h localhost -p 9999 help
----

=====================================================
== File: server/apps/distributed-app/docker-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Required to locate Cassandra driver configuration
config.file=/root/conf/cassandra-driver.conf

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

=====================================================
== File: server/apps/distributed-app/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      tika:
        condition: service_started
      rabbitmq:
        condition: service_started
      s3:
        condition: service_started
    image: apache/james:distributed-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    networks:
      - james
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"

  opensearch:
    image: opensearchproject/opensearch:2.1.0
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
    networks:
      james:
        aliases:
          - elasticsearch

  cassandra:
    image: cassandra:4.1.3
    ports:
      - "9042:9042"
    healthcheck:
      test: [ "CMD", "cqlsh", "-e", "describe keyspaces" ]

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/secrets.yaml
=====================================================
apiVersion: v1
data:
  jwt_publickey: "{{ .Values.james.secret.jwtPublicKey | b64enc }}"
  jwt_privatekey: "{{ .Values.james.secret.jwtPrivateKey | b64enc }}"
kind: Secret
type: Opaque
metadata:
  name: james-jwt-key
---
apiVersion: v1
data:
  james-user: "{{ .Values.james.secret.cassandraUser | b64enc }}"
  james-password: "{{ .Values.james.secret.cassandraPassword | b64enc }}"
kind: Secret
type: Opaque
metadata:
  name: db-cassandra-account-james
---
{{- if and (.Values.james.secret.esUser) (.Values.james.secret.esPassword) }}
apiVersion: v1
data:
  james-user: "{{ .Values.james.secret.esUser | b64enc }}"
  james-password: "{{ .Values.james.secret.esPassword | b64enc }}"
kind: Secret
type: Opaque
metadata:
  name: db-es-account-james
{{- end }}
---
apiVersion: v1
data:
  dkim.key: "{{ .Values.james.secret.dkimPrivateKey | b64enc }}"
kind: Secret
type: Opaque
metadata:
  name: dkim-private-key 
---
apiVersion: v1
data:
  OS_S3_ENDPOINT: {{ .Values.james.secret.s3.endpoint | b64enc }}
  OS_S3_REGION: {{ .Values.james.secret.s3.region | b64enc }}
  OS_S3_ACCESSKEYID: {{ .Values.james.secret.s3.accessKeyId | b64enc }}
  OS_S3_SECRETKEY: {{ .Values.james.secret.s3.secretKey | b64enc }}
kind: Secret
type: Opaque
metadata:
  name: s3-james-credentials
---
apiVersion: v1
data:

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/servicemonitor.yaml
=====================================================
{{- if .Values.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: james-service-monitor
  labels:
    {{- toYaml .Values.serviceMonitor.additionalLabels | nindent 4 }}
spec:
  jobLabel: jobLabel
  selector:
    matchLabels:
      app: james
  namespaceSelector:
    matchNames:
      - {{ .Release.Namespace }}
  endpoints:
  - port: web
    path: /metrics
{{- end }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/james-admin-ingress.yaml
=====================================================
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: james-admin
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
{{- if .Values.ingress.tls }}
  tls:
  - hosts:
    - {{ .Values.dns.adminUrl }}
    {{ toYaml .Values.ingress.tls }}
{{- end }}    
  rules:
  - host: {{ .Values.dns.adminUrl }}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service: 
            name: james-admin
            port:
              number: 8000
{{- end }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_docker-secrets.tpl
=====================================================
{{- define "imagePullSecret" }}
{{- printf "{\"auths\": {\"%s\": {\"auth\": \"%s\"}}}" .Values.dockerCredentials.registry (printf "%s:%s" .Values.dockerCredentials.username .Values.dockerCredentials.password | b64enc) | b64enc }}
{{- end }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_helpers.tpl
=====================================================
{{/*
Builds up the JAVA_TOOL_OPTIONS env variable for java tunning James
*/}}
{{- define "james.jvmOpts" -}}
{{- if .Values.james.env.glowroot.enabled }}
{{- printf "%s -javaagent:/root/glowroot/glowroot.jar" .Values.james.env.jvmOpts }}
{{- else }}
{{- .Values.james.env.jvmOpts }}
{{- end }}
{{- end }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/jmap-ingress.yaml
=====================================================
{{- if .Values.ingress.enabled }}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: jmap
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
{{- if .Values.ingress.tls }}
  tls:
  - hosts:
    - {{ .Values.dns.jmapUrl }}
    {{ toYaml .Values.ingress.tls }}
{{- end }}    
  rules:
  - host: {{ .Values.dns.jmapUrl }}
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: jmap
            port:
              number: 80
{{- end }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/deployment.yaml
=====================================================
{{- $elasticsearchUrl := include "elasticsearch.url.list" . }}
{{- $cassandraUrl := include "cassandra.url.list" . }}
{{- $jamesOpts := include "james.jvmOpts" . }}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: james-jmap
spec:
  selector:
    matchLabels:
      instance: james-jmap
  replicas: {{ .Values.james.replicaJmapInstanceCount }}
  template:
    metadata:
      labels:
        app: james
        instance: james-jmap
    spec:
    {{- if .Values.dockerCredentials }}
      imagePullSecrets:
      - name: docker-registry-secret
    {{- end }}
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                - key: app
                  operator: In
                  values:
                  - james
              topologyKey: "kubernetes.io/hostname"

      containers:
      - name: james-jmap
        image: {{ .Values.james.image }}
        readinessProbe:
          httpGet:
            path: /healthcheck/checks/Guice%20application%20lifecycle
            port: 8000
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /healthcheck/checks/Guice%20application%20lifecycle
            port: 8000
          initialDelaySeconds: 91
          periodSeconds: 30

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/service.yaml
=====================================================
kind: Service
apiVersion: v1
metadata:
  name: james-client
spec:
  selector:
    instance: james-imap-smtp
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 465
      name: "smtp-ssl"
---
apiVersion: v1
kind: Service
metadata:
  name: james-imap
spec:
  selector:
    instance: james-imap-smtp
  ports:
    - protocol: TCP
      port: 993
      name : "imap-ssl"
---
kind: Service
apiVersion: v1
metadata:
  name: james-admin
spec:
  selector:
    app: james
  ports:
    - protocol: TCP
      port: 8000
      targetPort: 8000
      name: "web"
---
kind: Service
apiVersion: v1
metadata:
  name: jmap
spec:
  selector:
    instance: james-jmap
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
      name: "web"

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/_urls.tpl
=====================================================
{{/*
Contruct a temporary URL for Cassandra. This URL ends with a comma.
*/}}
{{- define "cassandra.url.list" -}}
  {{- $port := "9042" }}
  {{- $ns := .Values.cassandra.namespace }}

  {{- if eq .Values.cassandra.deploy "as-pod" }}
    {{- $count :=  int .Values.cassandra.replicaCount }}
    {{- range $index := until $count }}
      {{- printf "cassandra-%d.%s:%s," $index $ns $port }}
    {{- end }}
  {{- else }}
    {{- range $ip := .Values.cassandra.ips }}
      {{- printf "%s:%s," $ip $port }}
    {{- end }}
  {{- end }}
{{- end -}}


{{/*
Contruct a temporary URLfor Elastic Search. This URL ends with a comma
*/}}
{{- define "elasticsearch.url.list" -}}
  {{- $port := "9200" }}
  {{- $ns := .Values.cassandra.namespace }}

  {{- if eq .Values.elasticsearch.deploy "as-pod" }}
    {{- $count :=  int .Values.elasticsearch.replicaCount }}
    {{- range $index := until $count }}
      {{- printf "elasticsearch-%d.%s:%s," $index $ns $port }}
    {{- end }}
  {{- else }}
    {{- range $ip := .Values.elasticsearch.ips }}
      {{- printf "%s:%s," $ip $port }}
    {{- end }}
  {{- end }}
{{- end -}}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/templates/configmaps.yaml
=====================================================
apiVersion: v1
kind: ConfigMap
metadata:
  name: james-configs
data:
{{ (.Files.Glob "configs/*").AsConfig | indent 2 }}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/secrets.sample.yaml
=====================================================
james:
  secret:
    jwtPublicKey: |-
      -----BEGIN PUBLIC KEY-----
      change-me
      -----END PUBLIC KEY-----
    jwtPrivateKey: |-
      -----BEGIN PUBLIC KEY-----
      change-me
      -----END PUBLIC KEY-----
    cassandraUser: change-me
    cassandraPassword: change-me
    esUser: change-me
    esPassword: change-me
    dkimPrivateKey: |-
      -----BEGIN PRIVATE KEY-----
      change-me
      -----END PRIVATE KEY-----
    s3:
      endpoint: "http://s3-us-east-1.amazonaws.com"
      region: "US"
      accessKeyId: "change-me"
      secretKey: "change-me"
      bucketNameSuffix: "change-me"
ldap:
  secret:
    ldapUser: change-me
    ldapPassword: change-me
rabbitmq:
  secret:
    jamesUser: change-me
    jamesPassword: change-me

=====================================================
== File: server/apps/distributed-app/helm-chart/james/Chart.yaml
=====================================================
apiVersion: v2
name: james
description: A Helm chart for Distributed Apache James.
type: application
version: 0.2.0

=====================================================
== File: server/apps/distributed-app/helm-chart/james/values.yaml
=====================================================
dns:
  ## Default domain for all emailing components
  emailDomain: "example.com"
  jmapUrl: "jmap.example.com"
  adminUrl: "admin.example.com"
  smtpHostname: "smtp.example.com"

# Default values for james
james:
  replicaJmapInstanceCount: 1
  replicaImapSmtpInstanceCount: 1
  image: apache/james:distributed-3.8.0
  ## Environment for James
  env:
    jamesCassandraKeyspace: sandbox_james
    jamesCassandraCacheKeyspace: sandbox_james_cache
    jamesEsMailboxIndex: "mailbox_v1"
    jamesEsClusterName: "change-me"
    jamesEsHostScheme: "http"
    jamesEsSslValidationStrategy: "default"
    jamesEsHostNameVerifier: "default"
    jamesEsNbShards: 5
    jamesEsNbReplica: 1
    jamesEsMailboxReadAlias: "read-mailbox"
    jamesEsMailboxWriteAlias: "write-mailbox"
    jamesRabbitHost: "change-me"
    jamesMessageSize: 25M
    jamesDkimSignSmtp: "dkimselector"
    jamesDkimSignDomain: "mail.example.com"
    cassandraReplicationFactor: 3
    jamesHELOMessage: "change-me"
    jvmOpts: "-Xms3g -Xmx3g"
    glowroot:
      enabled: false
    jamesResources:
      limits:
        cpu: "2000m"
        memory: "4Gi"
      requests:
        cpu: "1000m"
        memory: "4Gi"
  tls:
    secretName: the-name-of-a-secret

# Requires Prometheus Operator to be installed
serviceMonitor:
  enabled: false
  # Labels for Prometheus Operator to detect ServiceMonitor. Cannot be empty 
  additionalLabels:
    change-me: change-me

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/webadmin.properties
=====================================================
enabled=true
port=8000
cors.enable=true
cors.origin=*
jwt.enabled=true
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
                    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
                        <timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSSX</timestampFormat>
                        <timestampFormatTimezoneId>Etc/UTC</timestampFormatTimezoneId>

                        <!-- Importance for handling multiple lines log -->
                        <appendLineSeparator>true</appendLineSeparator>

                        <jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
                            <prettyPrint>false</prettyPrint>
                        </jsonFormatter>
                    </layout>
                </encoder>
        </appender>

        <root level="INFO">
                <appender-ref ref="CONSOLE" />
        </root>

        <logger name="http.jmap" level="INFO" />
        <logger name="org.apache.james.smtpserver" level="DEBUG" />
        <logger name="org.apache.mailet.base.MailetPipelineLogging" level="DEBUG" />
        <logger name="org.apache.james.mailetcontainer" level="DEBUG" />
        <logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />
        <logger name="org.apache.james.mailetcontainer" level="DEBUG" />
        <logger name="org.apache.james" level="DEBUG" />
        <logger name="org.apache.james.backends.es" level="INFO" />
        <logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />
        <logger name="com.datastax.driver.core.QueryLogger.ERROR" level="TRACE" />
        <logger name="http.jmap" level="DEBUG" />

</configuration>

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/jmap.properties
=====================================================
# Configuration file for JMAP

enabled=${env:JAMES_JMAP_ENABLED}
tls.keystoreURL=file://secrets-jwt/keystore
tls.secret=${env:JAMES_KEYSTORE_PASSWORD}

#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
jwt.publickeypem.url=file://conf/jwt_publickey
jwt.privatekeypem.url=file://conf/jwt_privatekey
jmap.port=80

view.email.query.enabled=true
email.send.max.size=${env:JAMES_MESSAGE_SIZE}
upload.max.size=${env:JAMES_MESSAGE_SIZE}

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=30
fetch.body=30
fetch.full=30
# IMAP COPY command
copy=50
# IMAP MOVE command
move=50

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
implementation=s3

# ========================================= ObjectStorage deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=true

single.save.enable=true

# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.

# Enable the cache? Optional and default to false. Must be a boolean.
cache.enable=true

# Cache eviction policy is TTL based. Optional and defaults to 7 days. Must be a duration.
# Valid units: ms, sec, min, hour, day, week, month, year
cache.cassandra.ttl=1year

# Maximum size of stored objects expressed in bytes. Must be strictly positive. Defaults to 8192.
# Units: bytes, Kib, MiB, GiB, TiB
cache.sizeThresholdInBytes=16 KiB

# ============================================== ObjectStorage ============================================

# ========================================= ObjectStorage Buckets ==========================================
# bucket names prefix
# Optional, default no prefix
# objectstorage.bucketPrefix=james-${env:NAMESPACE}-

# Default bucket name
# Optional, default is bucketPrefix + `default`
objectstorage.namespace=james-${env:JAMES_BUCKET_SUFFIX}

# ========================================= ObjectStorage on S3 =============================================
# Mandatory if you choose aws-s3 storage service, S3 authentication endpoint
objectstorage.s3.endPoint=${env:OS_S3_ENDPOINT}

# Mandatory if you choose s3 storage service, S3 region
objectstorage.s3.region=${env:OS_S3_REGION}


=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# http://james.apache.org/server/config-cassandra.html
cassandra.nodes=${env:JAMES_CASSANDRA_NODES_URLS}

cassandra.keyspace.create=true
cassandra.keyspace=${env:JAMES_CASSANDRA_KEYSPACE}
cassandra.keyspace.cache=${env:JAMES_CASSANDRA_CACHE_KEYSPACE}

cassandra.user=${env:JAMES_CASSANDRA_USER}
cassandra.password=${env:JAMES_CASSANDRA_PASSWORD}

cassandra.replication.factor=${env:JAMES_CASSANDRA_REPLICATION_FACTOR}
cassandra.retryConnection.maxRetries=10
cassandra.retryConnection.minDelay=5000


mailbox.max.retry.message.flags.update=16
mailbox.max.retry.message.id.flags.update=16
mailbox.max.retry.modseq=16
mailbox.max.retry.acl=16
mailbox.max.retry.uid=16

mailbox.read.repair.chance=0.00
mailbox.counters.read.repair.chance.max=0.000
mailbox.counters.read.repair.chance.one.hundred=0.000

chunk.size.message.read=16

mailbox.read.strong.consistency=false
message.read.strong.consistency=false
message.write.strong.consistency.unsafe=false

=====================================================
== File: server/apps/distributed-app/helm-chart/james/configs/rabbitmq.properties
=====================================================
uri=amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}

# RabbitMQ Administration Management
management.uri=http://${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_MANAGEMENT_PORT}
management.user=${env:JAMES_AMQP_USERNAME}
management.password=${env:JAMES_AMQP_PASSWORD}

# Parameters for the Cassandra administrative view

# Period of the window. Too large values will lead to wide rows while too little values might lead to many queries.
# Use the number of mail per Cassandra row, along with your expected traffic, to determine this value
# This value can only be decreased to a value dividing the current value
mailqueue.view.sliceWindow=1h
# Use to distribute the emails of a given slice within your cassandra cluster
# A good value is 2*cassandraNodeCount
# This parameter can only be increased.
mailqueue.view.bucketCount=${env:JAMES_BUCKET_COUNT}
# Determine the probability to update the browse start pointer
# Too little value will lead to unnecessary reads. Too big value will lead to more expensive browse.
# Choose this parameter so that it get's update one time every one-two sliceWindow
mailqueue.view.updateBrowseStartPace=1000
# Enables or disables the gauge metric on the mail queue size
# Computing the size of the mail queue is currently implemented on top of browse operation and thus have a linear complexity
# Metrics get exported periodically as configured in opensearch.properties, thus getSize is also called periodically
# Choose to disable it when the mail queue size is getting too big
# Note that this is as well a temporary workaround until we get 'getSize' method better optimized
# Optional, default true
mailqueue.size.metricsEnabled=false

connection.pool.retries=3
connection.pool.min.delay.ms=50
channel.pool.retries=2
channel.pool.min.delay.ms=100
channel.pool.size=10

=====================================================
== File: server/apps/distributed-app/helm-chart/README.md
=====================================================
# Helm chart for James


## Introduction

This chart bootstraps the distributed version of Apache James Mail Server on [Kubernetes](http://kubernetes.io) 
cluster using [Helm](https://helm.sh) package manager.

Documentation on how to use it can be found at [Run Kubernetes](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/run/run-kubernetes.adoc).

## Notice about mailetcontainer

You will need to add yourself manually the `mailetcontainer.xml` configuration file into
the configs folder proper to your client before installing the helm James package.

You can get the template `mailetcontainer.xml` in our [sample-configuration](https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/) folder.

NB: It should change in a near future as helm should support such an operation.

## Notice about RabbitMQ

James is linked to RabbitMQ instances for mail processing.

You need RabbitMQ to run before deploying James. The username and password for `rabbitmq-account-james` secret must be created first from RabbitMQ.

=====================================================
== File: server/apps/distributed-app/docker-compose-with-pulsar.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      rabbitmq:
        condition: service_started
      s3:
        condition: service_started
      pulsar:
        condition: service_started
    image: apache/james:distributed-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    networks:
      - james
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"
    volumes:
      - ./sample-configuration/pulsar.properties:/root/conf/pulsar.properties
      - ./sample-configuration/queue-pulsar.properties:/root/conf/queue.properties

  opensearch:
    image: opensearchproject/opensearch:2.1.0
    container_name: opensearch
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true
    networks:
      james:
        aliases:
          - elasticsearch

  cassandra:
    container_name: cassandra

=====================================================
== File: server/apps/distributed-app/README.adoc
=====================================================
= Guice-Distributed Server How-to

== Requirements

 * Java 11 SDK

Firstly, create your own user network on Docker for the James environment:

    $ docker network create --driver bridge james

Third party compulsory dependencies:

 * Cassandra 4.0
 * OpenSearch 2.1.0
 * RabbitMQ-Management 3.8.18
 * Zenko Cloudserver or AWS S3

[source]
----
$ docker run -d --network james -p 9042:9042 --name=cassandra cassandra:4.1.3
$ docker run -d --network james -p 9200:9200 --name=opensearch --env 'discovery.type=single-node' --env 'DISABLE_SECURITY_PLUGIN=true' --env 'DISABLE_INSTALL_DEMO_CONFIG=true' opensearchproject/opensearch:2.1.0
$ docker run -d --network james -p 5672:5672 -p 15672:15672 --name=rabbitmq rabbitmq:3.12.1-management
$ docker run -d --network james -p 8000:8000 --env 'REMOTE_MANAGEMENT_DISABLE=1' --env 'SCALITY_ACCESS_KEY_ID=accessKey1' --env 'SCALITY_SECRET_ACCESS_KEY=secretKey1' --name=s3 registry.scality.com/cloudserver/cloudserver:8.7.25
----

== Docker distribution

To import the image locally:

[source]
----
docker image load -i target/jib-image.tar
----

Then run it along with its dependency:

[source]
----
docker compose up -d
----

Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags)
to pass extra JVM flags. For instance:

[source]
----
  james:
    ...
    environment:
      - JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m

=====================================================
== File: server/apps/distributed-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/distributed-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/distributed-app/src/test/resources/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/distributed-app/src/test/resources/rabbitmq.properties
=====================================================
uri=amqp://james:james@rabbitmq_host:5672
management.uri=http://james:james@rabbitmq_host:15672/api/

=====================================================
== File: server/apps/distributed-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add you customs Mailets/Matchers.

=====================================================
== File: server/apps/distributed-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/distributed-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================

enabled=false

# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y

=====================================================
== File: server/apps/distributed-app/sample-configuration/queue-pulsar.properties
=====================================================
mail.queue.choice=PULSAR

=====================================================
== File: server/apps/distributed-app/sample-configuration/pulsar.properties
=====================================================
broker.uri=pulsar://pulsar:6650
admin.uri=http://pulsar:8080
authentication.type=no-auth
#authentication.basic.userId=userId
#authentication.basic.password=password
namespace=pulsar/system

=====================================================
== File: server/apps/distributed-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Required to locate Cassandra driver configuration
config.file=conf/cassandra-driver.conf

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.

=====================================================
== File: server/apps/distributed-app/sample-configuration/queue.properties
=====================================================
mail.queue.choice=RABBITMQ

=====================================================
== File: server/apps/distributed-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />
        <logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />


</configuration>

=====================================================
== File: server/apps/distributed-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details

enabled=true

tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle

# only not work for RabbitMQ mail queue
#delay.sends.enabled=true

# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle

#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
# jwt.publickeypem.url=file://conf/jwt_publickey

# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true

# If you want to specify authentication strategies for Jmap draft version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.draft=AccessTokenAuthenticationStrategy,JWTAuthenticationStrategy,QueryParameterAccessTokenAuthenticationStrategy

# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy

# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false

=====================================================
== File: server/apps/distributed-app/sample-configuration/cassandra-driver.conf
=====================================================
# James reference configuration for the DataStax Java driver for Apache Cassandra®.
#
# Unless you use a custom mechanism to load your configuration (see
# SessionBuilder.withConfigLoader), all the values declared here will be used as defaults.
#
# See https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/configuration/ for
# available options.
#
# Please note that contact point and authentication needs to be set in cassandra.properties for now.
datastax-java-driver {

  basic.request {
    timeout = 5 seconds

    consistency = QUORUM

    page-size = 5000

    serial-consistency = SERIAL
  }

  advanced.connection {
    connect-timeout = 5 seconds

    init-query-timeout = 5 seconds

    pool {
      local.size = 2

      remote.size = 2
    }

    max-requests-per-connection = 1024

    max-orphan-requests = 256

    warn-on-init-error = true
  }

  advanced.throttler {
    // class = org.apache.james.backends.cassandra.utils.LockLessConcurrencyLimitingRequestThrottler
    class = ConcurrencyLimitingRequestThrottler

    max-queue-size = 10000

    max-concurrent-requests = 192
  }

  advanced.reconnect-on-init = true


=====================================================
== File: server/apps/distributed-app/sample-configuration/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/distributed-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details

# Choose your BlobStore implementation
# Mandatory, allowed values are: cassandra, s3
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)
implementation=s3

# ========================================= Deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false

# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1

# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days

# ========================================= Encryption ========================================
# If you choose to enable encryption, the blob content will be encrypted before storing them in the BlobStore.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to all content being
# encrypted. This comes at a performance impact but presents you from leaking data if, for instance the third party
# offering you a S3 service is compromised.
# Optional, Allowed values are: true, false, defaults to false
encryption.aes.enable=false

# Mandatory (if AES encryption is enabled) salt and password. Salt needs to be an hexadecimal encoded string
#encryption.aes.password=xxx
#encryption.aes.salt=73616c7479
# Optional, defaults to PBKDF2WithHmacSHA512
#encryption.aes.private.key.algorithm=PBKDF2WithHmacSHA512

# ========================================= Cassandra BlobStore Cache ======================================
# A cassandra cache can be enabled to reduce latency when reading small blobs frequently
# A dedicated keyspace with a replication factor of one is then used
# Cache eviction policy is TTL based
# Only blobs below a given threshold will be stored.
# To be noted that blobs are stored within a single Cassandra row, hence a low threshold should be used.

# Enable the cache? Optional and default to false. Must be a boolean.

=====================================================
== File: server/apps/distributed-app/sample-configuration/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# Read https://james.apache.org/server/config-cassandra.html for further details
# Advanced Cassandra driver option needs to be set via cassandra-driver.conf configuration file

cassandra.nodes=cassandra
cassandra.keyspace.create=true
cassandra.keyspace=apache_james
#cassandra.user=cassandra
#cassandra.password=cassandra
cassandra.replication.factor=1
cassandra.retryConnection.maxRetries=200
cassandra.retryConnection.minDelay=5000

## These low level tuning options controls performance related options in Cassandra related code
## The default values are documented here. Understand the effects before editing.
# mailbox.read.repair.chance=0.1
## Maximum probability of running a read repair for the mailbox counters
# mailbox.counters.read.repair.chance.max=0.1
## Probability of running a mailbox counters read repair for 100 messages.
## Inversely proportional to the count of messages
## Formula: read_repair_chance = min(mailbox.counters.read.repair.chance.max, (100/unseens)*mailbox.counters.read.repair.chance.one.hundred)
# mailbox.counters.read.repair.chance.one.hundred=0.01
# mailbox.max.retry.acl=1000
# mailbox.max.retry.modseq=100000
# mailbox.max.retry.uid=100000
# mailbox.max.retry.message.flags.update=1000
# mailbox.max.retry.message.id.flags.update=1000
# fetch.advance.row.count=1000
# chunk.size.expunge=100
# mailbox.blob.part.size=102400

# Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
# Falls back to default read consistency level if the blob is missing.
# Defaults to false.
# optimistic.consistency.level.enabled=false

# Optional. Allows not to use lightweight transactions in CassandraMailRepository.
# If disabled we implement an idempotent behaviour (duplicates are overridden, missing entries upon deletes are ignored).
# Defaults to true.
# mailrepository.strong.consistency=true

# Optional, default to 0. Defensive value to add to uids and modseqs generated. This can be used as an heuristic to maintain
# consistency even when consensus of Lightweight Transactions is broken, exemple during a disaster recovery process.
# uid.modseq.increment=0

=====================================================
== File: server/apps/distributed-app/sample-configuration/rabbitmq.properties
=====================================================
# RabbitMQ configuration

# Read https://james.apache.org/server/config-rabbitmq.html for further details

# Mandatory
uri=amqp://rabbitmq:5672
# If you use a vhost, specify it as well at the end of the URI
# uri=amqp://rabbitmq:5672/vhost

# Vhost to use for creating queues and exchanges
# Optional, only use this if you have invalid URIs containing characters like '_'
# vhost=vhost1

# Optional, default to the host specified as part of the URI.
# Allow creating cluster aware connections.
# hosts=ip1:5672,ip2:5672

# RabbitMQ Administration Management
# Mandatory
management.uri=http://rabbitmq:15672
# Mandatory
management.user=guest
# Mandatory
management.password=guest

# Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
# Optional integer, defaults to 10
#connection.pool.retries=10
# Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
# Optional integer, defaults to 100
#connection.pool.min.delay.ms=100
# Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
# Optional integer, defaults to 3
#channel.pool.retries=3
# Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
# Optional integer, defaults to 30 seconds.
#channel.pool.max.delay.ms=30000
# Configure the size of the channel pool.
# Optional integer, defaults to 3
#channel.pool.size=3

# Boolean. Whether to activate Quorum queue usage for use cases that benefits from it (work queue).
# Quorum queues enables high availability.
# False (default value) results in the usage of classic queues.
#quorum.queues.enable=true

# Strictly positive integer. The replication factor to use when creating quorum queues.
#quorum.queues.replication.factor

# Parameters for the Cassandra administrative view

=====================================================
== File: server/apps/distributed-app/docs/ui-overrides/partials/header-content.hbs
=====================================================
<header class="header">
  <nav class="navbar">
    <div class="navbar-brand">
      <a class="navbar-item" href="{{{or site.url (or siteRootUrl siteRootPath)}}}"><img src="/_/img/james.svg" alt="james logo"> {{site.title}}</a>
      <button class="navbar-burger" data-target="topbar-nav">
        <span></span>
        <span></span>
        <span></span>
      </button>
    </div>
    <div id="topbar-nav" class="navbar-menu">
      <div class="navbar-end">
        <a class="navbar-item" href="#">Home</a>
        <div class="navbar-item has-dropdown is-hoverable">
          <a class="navbar-link" href="#">Products</a>
          <div class="navbar-dropdown">
            <div class="navbar-item"><strong>James server</strong></div>
            <a class="navbar-item" href="https://github.com/apache/james-project">Repository</a>
            <a class="navbar-item" href="https://issues.apache.org/jira/projects/JAMES/issues">Issue Tracker</a>
            <hr class="navbar-divider">
            <a class="navbar-item" href="https://james.apache.org/mime4j/index.html">Mime4J</a>
            <a class="navbar-item" href="https://james.apache.org/jsieve/index.html">jSieve</a>
            <a class="navbar-item" href="https://james.apache.org/jspf/index.html">jSPF</a>
            <a class="navbar-item" href="https://james.apache.org/jdkim/index.html">jDKIM</a>
            <a class="navbar-item" href="https://james.apache.org/hupa/index.html">HUPA</a>
          </div>
        </div>
        <div class="navbar-item has-dropdown is-hoverable">
          <a class="navbar-link" href="#">Community</a>
          <div class="navbar-dropdown">
             <!-- Not ideal but dropping the version in the href requires tweaking james-projet docs module first -->
            <a class="navbar-item" href="/james-project/3.7.3/community/mailing-lists.html">Mailing lists</a>
            <a class="navbar-item" href="https://gitter.im/apache/james-project"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 32" class="logo-gitter-sign" data-v-44ebcb1a=""><rect x="15" y="5" width="2" height="10"></rect> <rect x="10" y="5" width="2" height="20"></rect> <rect x="5" y="5" width="2" height="20"></rect> <rect width="2" height="15"></rect></svg> Gitter</a>
            <a class="navbar-item" href="https://twitter.com/ApacheJames">
              <span class="icon">
                <svg aria-hidden="true" data-icon="twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
                  <path fill="#57aaee" d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"></path>
                </svg>
              </span> Twitter
            </a>            
            <a class="navbar-item" href="#">  <svg class="octicon octicon-mark-github v-align-middle" viewBox="0 0 16 16" version="1.1" aria-hidden="true"><path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path></svg> Github</a>
          </div>
        </div>
<!--        <div class="navbar-item">
          <span class="control">
            <a class="button is-primary" href="#">Download</a>
          </span>
        </div> -->
      </div>
    </div>

=====================================================
== File: server/apps/distributed-app/docs/ui-overrides/img/james.svg
=====================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Calque_1" xmlns="http://www.w3.org/2000/svg" x="0px" y="0px"
     width="37px" height="31px" viewBox="0 0 37 31" enable-background="new 0 0 37 31" xml:space="preserve">
<g>
	<path fill="#FFFFFF" d="M37.001,4.407c-1.435-0.966-2.92-1.75-4.473-2.153c-1.552-0.412-3.151-0.315-4.63,0.3l-0.277,0.117
		l-0.139,0.062l-0.064,0.032l-0.036,0.016l-0.018,0.008l-0.008,0.004c0.008-0.007-0.028,0.016,0.02-0.012L27.37,2.783
		c-0.2,0.127-0.391,0.232-0.589,0.337c-0.392,0.207-0.796,0.391-1.216,0.543c-0.836,0.295-1.737,0.503-2.664,0.389
		c-0.458-0.061-0.913-0.222-1.3-0.489c-0.382-0.268-0.689-0.629-0.899-1.026C20.28,1.737,20.15,0.857,20.124,0
		c0.156,0.842,0.393,1.686,0.857,2.363c0.234,0.336,0.523,0.622,0.864,0.811c0.339,0.19,0.723,0.284,1.111,0.301
		c0.782,0.038,1.582-0.201,2.325-0.532c0.376-0.165,0.741-0.353,1.092-0.563c0.176-0.105,0.354-0.219,0.509-0.33l0.307-0.201
		c0.1-0.057,0.194-0.122,0.293-0.173c0.801-0.433,1.702-0.731,2.627-0.793c0.925-0.069,1.856,0.063,2.716,0.357
		c0.863,0.29,1.655,0.731,2.359,1.267C35.888,3.047,36.52,3.676,37.001,4.407z"/>
	<path fill="#FFFFFF" d="M13.25,20.418c-5.733-4.373-9.554-8.973-9.418-9.078c0.147-0.145,4.153,4.212,9.83,8.536
		c1.665,1.28,3.28,2.412,4.733,3.381c0.02-0.036,0.041-0.069,0.062-0.105c0.237-0.456,0.42-0.948,0.562-1.462
		c-1.018-2.053-3.554-4.892-6.501-7.496c-0.656-0.572-1.338-1.078-2.028-1.536c-0.151,1.223-0.452,2.098-0.453,2.096
		c0,0-0.335-1.163-0.306-2.579C9.266,11.892,8.8,11.63,8.336,11.389c-0.004,1.395-0.414,2.439-0.417,2.439
		c0,0.002-0.833-1.414-0.922-3.071c-0.002-0.01-0.002-0.021-0.002-0.031c-2.767-1.279-5.1-1.896-5.104-1.89
		C1.867,8.774,2.064,14.75,6.431,19.305c0.147-0.008,0.296-0.016,0.449-0.016c1.588,0.004,2.944,0.577,2.947,0.577
		c0-0.002-0.835,0.501-2.054,0.671c0.444,0.355,0.899,0.682,1.364,0.973c1.148-0.416,2.102-0.557,2.102-0.557
		c0-0.002-0.503,0.495-1.334,1.017c3.035,1.685,5.787,2.542,7.53,2.624c0.236-0.26,0.452-0.532,0.645-0.821
		C16.586,22.84,14.938,21.717,13.25,20.418z"/>
	<path fill="#FFFFFF" d="M33.7,4.335c-1.103,0.092-2.21,0.292-3.3,0.605c-2.173,0.623-4.31,1.725-6.062,3.396
		c-0.883,0.824-1.64,1.798-2.271,2.846c-0.614,1.059-1.109,2.191-1.43,3.363c-0.327,1.168-0.529,2.363-0.595,3.548
		c-0.02,0.291-0.031,0.596-0.039,0.9L19.995,19.4l-0.008,0.35c-0.012,0.462-0.051,0.918-0.122,1.358
		c-0.056,0.337-0.131,0.665-0.223,0.984c-0.141,0.514-0.324,1.006-0.562,1.466c-0.02,0.036-0.043,0.066-0.062,0.102
		c-0.099,0.178-0.204,0.353-0.317,0.52c-0.191,0.286-0.407,0.559-0.643,0.819c-0.17,0.186-0.348,0.366-0.544,0.541
		c-1.304,1.152-3.097,1.944-5.021,2.453c-1.931,0.518-3.995,0.788-6.091,0.934c-2.1,0.145-4.234,0.166-6.404,0.112
		c2.023,0.815,4.157,1.338,6.333,1.664c2.179,0.313,4.422,0.415,6.701,0.127c1.137-0.149,2.287-0.394,3.418-0.802
		c1.129-0.405,2.252-0.959,3.265-1.745c1.019-0.771,1.92-1.77,2.571-2.913c0.331-0.568,0.601-1.167,0.82-1.775
		c0.21-0.611,0.364-1.236,0.47-1.859c0.11-0.619,0.17-1.24,0.193-1.852c0.008-0.154,0.008-0.307,0.008-0.461v-0.398
		c0.005-0.234,0.011-0.468,0.022-0.716c0.052-0.967,0.166-1.914,0.376-2.832c0.418-1.832,1.213-3.537,2.405-5.009
		c1.192-1.472,2.767-2.711,4.552-3.706c1.79-0.994,3.765-1.774,5.862-2.355C35.917,4.247,34.808,4.238,33.7,4.335z"/>
</g>
</svg>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:objectives.adoc[]
** xref:architecture/index.adoc[]
*** xref:architecture/implemented-standards.adoc[]
*** xref:architecture/consistency-model.adoc[]
*** xref:architecture/specialized-instances.adoc[]
** xref:run/index.adoc[Run]
*** xref:run/run-java.adoc[Run with Java]
*** xref:run/run-docker.adoc[Run with Docker]
*** xref:run/run-kubernetes.adoc[Run with Kubernetes]
**** xref:run/k8s-checklist.adoc[Deployment Checklist]
**** xref:run/k8s-logsMetrics.adoc[Logs & Metrics]
**** xref:run/k8s-values.adoc[values.yaml]
**** xref:run/k8s-secrets.adoc[secrets.yaml]
** xref:configure/index.adoc[]
*** Protocols
**** xref:configure/imap.adoc[imapserver.xml]
**** xref:configure/jmap.adoc[jmap.properties]
**** xref:configure/jmx.adoc[jmx.properties]
**** xref:configure/smtp.adoc[smtpserver.xml & lmtpserver.xml]
**** xref:configure/smtp-hooks.adoc[Packaged SMTP hooks]
**** xref:configure/pop3.adoc[pop3server.xml]
**** xref:configure/webadmin.adoc[webadmin.properties]
**** xref:configure/ssl.adoc[SSL & TLS]
**** xref:configure/sieve.adoc[Sieve & ManageSieve]
*** Storage dependencies
**** xref:configure/blobstore.adoc[blobstore.properties]
**** xref:configure/cassandra.adoc[cassandra.properties]
**** xref:configure/opensearch.adoc[opensearch.properties]
**** xref:configure/rabbitmq.adoc[rabbitmq.properties]
**** xref:configure/redis.adoc[redis.properties]
**** xref:configure/tika.adoc[tika.properties]
*** Core components
**** xref:configure/batchsizes.adoc[batchsizes.properties]
**** xref:configure/dns.adoc[dnsservice.xml]
**** xref:configure/domainlist.adoc[domainlist.xml]
**** xref:configure/healthcheck.adoc[healthcheck.properties]
**** xref:configure/mailetcontainer.adoc[mailetcontainer.xml]
**** xref:configure/mailets.adoc[Packaged Mailets]
**** xref:configure/matchers.adoc[Packaged Matchers]
**** xref:configure/mailrepositorystore.adoc[mailrepositorystore.xml]
**** xref:configure/recipientrewritetable.adoc[recipientrewritetable.xml]
**** xref:configure/search.adoc[search.properties]
**** xref:configure/usersrepository.adoc[usersrepository.xml]
*** Extensions
**** xref:configure/vault.adoc[deletedMessageVault.properties]
**** xref:configure/extensions.adoc[extensions.properties]
**** xref:configure/listeners.adoc[listeners.xml]
**** xref:configure/spam.adoc[Anti-Spam setup]
**** xref:configure/remote-delivery-error-handling.adoc[About RemoteDelivery error handling]

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/architecture/implemented-standards.adoc
=====================================================
= Distributed James Server &mdash; Implemented standards
:navtitle: Implemented standards

This page details standards implemented by the distributed server.

== Message formats

 - link:https://datatracker.ietf.org/doc/html/rfc5322[RFC-5322] Internet Message Format (MIME)
 - link:https://datatracker.ietf.org/doc/html/rfc2045[RFC-2045] Format of Internet Message Bodies
 - link:https://datatracker.ietf.org/doc/html/rfc3464[RFC-3464] An Extensible Message Format for Delivery Status Notifications
   - James allow emmit DSNs from the mailet container.
 - link:https://datatracker.ietf.org/doc/html/rfc8098[RFC-8098] Message Disposition Notification

== TLS & authentication

- link:https://datatracker.ietf.org/doc/html/rfc2595.html[RFC-2595] TLS for IMAP, POP3, SMTP (StartTLS)
- link:https://datatracker.ietf.org/doc/html/rfc8314.html[RFC-8314] Implicit TLS
- link:https://www.rfc-editor.org/rfc/rfc4959.html[RFC-4959] SASL IR: Initial client response
- link:https://datatracker.ietf.org/doc/html/rfc4616[RFC-4616] SASL plain authentication
- link:https://datatracker.ietf.org/doc/html/rfc8314.html[RFC-7628] SASL for OAUTH
- Implemented for IMAP and SMTP
- Support for OIDC standard only.

== SMTP

- link:https://datatracker.ietf.org/doc/html/rfc5321[RFC-5321] SMTP Protocol
- link:https://datatracker.ietf.org/doc/html/rfc974[RFC-974] MAIL ROUTING AND THE DOMAIN SYSTEM
- link:https://www.rfc-editor.org/rfc/rfc3461[RFC-3461] Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
   - Requires extra configuration.
- link:https://datatracker.ietf.org/doc/html/rfc1652[RFC-1652] SMTP Service Extension for 8bit-MIME transport
- link:https://datatracker.ietf.org/doc/html/rfc1830[RFC-1830] SMTP Service Extensions for Transmission of Large and Binary MIME Messages
- link:https://datatracker.ietf.org/doc/html/rfc1869[RFC-1869] SMTP Service Extensions
- link:https://datatracker.ietf.org/doc/html/rfc1870[RFC-1870] SMTP Service Extension for Message Size Declaration
- link:https://datatracker.ietf.org/doc/html/rfc1891[RFC-1891] SMTP Service Extension for Delivery Status Notifications
- link:https://datatracker.ietf.org/doc/html/rfc1893[RFC-1893] Enhanced Mail System Status Codes
- link:https://datatracker.ietf.org/doc/html/rfc2034[RFC-2034] SMTP Service Extension for Returning Enhanced Error Codes
- link:https://datatracker.ietf.org/doc/html/rfc2142[RFC-2142] Mailbox Names For Common Services, Roles And Functions
- link:https://datatracker.ietf.org/doc/html/rfc2197[RFC-2197] SMTP Service Extension for Command Pipelining
- link:https://datatracker.ietf.org/doc/html/rfc2554[RFC-2554] ESMTP Service Extension for Authentication
- link:https://datatracker.ietf.org/doc/html/rfc1893[RFC-1893] Enhanced Mail System Status Codes

== LMTP

 - link:https://james.apache.org/server/rfclist/lmtp/rfc2033.txt[RFC-2033] LMTP Local Mail Transfer Protocol

== IMAP

The following IMAP specifications are implemented:

 - link:https://datatracker.ietf.org/doc/html/rfc3501.html[RFC-3501] INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/architecture/specialized-instances.adoc
=====================================================
= Distributed James Server &mdash; Specialized instances
:navtitle: Specialized instances

While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
protocols and the same responsibilities one might want to investigate in 'Specialized instances'.

This deployment topology consists of Distributed James servers with heterogeneous configurations on top of shared
data-bases. Groups of James servers will thus handle various protocols and have different responsibilities.

This approach limits cascading failures across protocols and services. Think of *OutOfMemoryErrors*, Cassandra driver 
queue overuse, CPUs starvation, etc.

However, we can't speak of micro-services here: all James instances runs the same code, James is still a monolith, and
databases need to be shared across instances.

image::specialized-instances.png[Example of Specialized instances topology]

We speak of:

 - **Front-line servers** serves protocols. James enables to easily turn protocols on and off. Typically, each protocol would 
 be isolated in its own group of James instances: james-imap, james-jmap, james-smtp, james-webadmin, etc... Refer to
 protocols configuration files to learn more.
 
 - **Back-office servers** handles other services like:

    - Mail processing.
    - Remote delivery.
    - Event processing.
    - Task execution.

Front-line servers will likely not handle back office responsibilities (but be sure to have back-office servers that do!).

  - xref:configure/mailetcontainer.adoc[Mail processing can be switched off].
  - xref:configure/listeners.adoc[Mailbox event processing can be switched off].
  - xref:configure/rabbitmq.adoc[Task execution can be switched off].
  - Remote Delivery service is not started if the RemoteDelivery mailet is not positioned in mailetcontainer.xml.
  
Of course, the above instances can be collocated at will, to reach some intermediate deployments with fewer 
instances to mitigate costs.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/architecture/index.adoc
=====================================================
= Distributed James Server &mdash; Architecture
:navtitle: Architecture

This sections presents the Distributed Server architecture.

== Storage

In order to deliver its promises, the Distributed Server leverages the following storage strategies:

image::storage.png[Storage responsibilities for the Distributed Server]

 * *Cassandra* is used for metadata storage. Cassandra is efficient for a very high workload of small queries following
a known pattern.
 * The *blob store* storage interface is responsible of storing potentially large binary data. For instance
 email bodies, headers or attachments. Different technologies can be used: *Cassandra*, or S3 compatible *Object Storage*
(S3 or Swift).
 * *OpenSearch* component empowers full text search on emails. It also enables querying data with unplanned access
patterns. OpenSearch throughput do not however match the one of Cassandra thus its use is avoided upon regular workloads.
 * *RabbitMQ* enables James nodes of a same cluster to collaborate together. It is used to implement connected protocols,
notification patterns as well as distributed resilient work queues and mail queue.
 * *Tika* (optional) enables text extraction from attachments, thus improving full text search results.
 * *link:https://spamassassin.apache.org/[SpamAssassin] or link:https://rspamd.com/[Rspamd]* (optional) can be used for Spam detection and user feedback is supported.

xref:architecture/consistency-model.adoc[This page] further details Distributed James consistency model.

== Protocols

The following protocols are supported and can be used to interact with the Distributed Server:

* *SMTP*
* *IMAP*
* xref:operate/webadmin.adoc[WebAdmin] REST Administration API
* *LMTP*
* *POP3*

The following protocols should be considered experimental:

* *JMAP* (RFC-8620 &RFC-8621 specifications and known limitations of the James implementation are defined link:https://github.com/apache/james-project/tree/master/server/protocols/jmap-rfc-8621/doc[here])
* *ManagedSieve*

The following protocols should be considered deprecated:

* *JMAP-draft* (draft specification as defined link:https://github.com/apache/james-project/tree/master/server/protocols/jmap-draft/doc[here])

Read more on xref:architecture/implemented-standards.adoc[implemented standards].

== Topology

While it is perfectly possible to deploy homogeneous James instances, with the same configuration and thus the same
protocols and the same responsibilities one might want to investigate in

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/architecture/consistency-model.adoc
=====================================================
= Distributed James Server &mdash; Consistency Model
:navtitle: Consistency Model

This page presents the consistency model used by the Distributed Server and
points to the tools built around it.

== Data Replication

The Distributed Server relies on different storage technologies, all having their own
consistency models.

These data stores replicate data in order to enforce some level of availability. We call
this process replication. By consistency, we mean the ability for all replica to hold the
same data. By availability, we mean the ability for a replica to answer a request.

In distributed systems, link:https://en.wikipedia.org/wiki/CAP_theorem[according to the CAP theorem],
as we will necessarily encounter network partitions, then trade-offs need to be made between
consistency and availability.

This section details this trade-off for data stores used by the Distributed Server.

=== Cassandra consistency model

link:https://cassandra.apache.org/[Cassandra] is an
link:https://en.wikipedia.org/wiki/Eventual_consistency[eventually consistent] data store.
This means that replica can hold diverging data, but are guaranteed to converge over time.

Several mechanisms are built in Cassandra to enforce this convergence, and need to be
leveraged by *Distributed Server Administrator*. Namely
link:https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/tools/nodetool/toolsRepair.html[nodetool repair],
link:https://cassandra.apache.org/doc/latest/operating/hints.html[Hinted hand-off] and
link:https://cassandra.apache.org/doc/latest/operating/read_repair.html[Read repair].

The Distributed Server tries to mitigate inconsistencies by relying on
link:https://docs.datastax.com/en/archived/cassandra/3.0/cassandra/dml/dmlConfigConsistency.html[QUORUM] read and write levels.
This means that a majority of replica are needed for read and write operations to be performed.

Critical business operations, like UID allocation, rely on strong consistency mechanisms brought by
link:https://www.datastax.com/blog/2013/07/lightweight-transactions-cassandra-20[lightweight transaction].

==== About multi data-center setups

As strong consistency is required for some operation, especially regarding IMAP monotic UID and MODSEQ generation,
and as lightweight transactions are slow across data centers, running James with a
link:https://docs.datastax.com/en/ddac/doc/datastax_enterprise/production/DDACmultiDCperWorkloadType.html[multi data-center]
Cassandra setup is discouraged.

However, xref:configure/cassandra.adoc[this page] enables setting alternative read level,
which could be acceptable regarding limited requirements. `LOCAL_QUORUM` coupled with `LOCAL_SERIAL`
is likely the only scalable setup. Some options were added to turn off SERIAL consistency usage for message

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/objectives.adoc
=====================================================
= Distributed James Server &mdash; Objectives and motivation
:navtitle: Objectives and motivation

The objective of the Distributed Server is to provided facilities to execute
an advanced, extendable, and distributed email system. It is intended for
organization with serious requirements, such as high-throughput or very large
data sets.

Scaling emails infrastructure is a notoriously hard problem. The intent of the Distributed server is
to implement a mail server using modern NoSQL technologies. It relies on:

* Object Storage enables scalable yet cheap storage of large amount of data
* The use of NoSQL for metadata storage enables vertical scalability
* Finally a Distributed search engine enables quick and efficient search

Replication, data availability are thus handled by battle tested technologies.

Such a data storage strategy enables:

* A centralized management of all server components, as each Distributed James server hold the same view on data.
* A better load and data repartition between email servers, as each James servers can cary out any tasks.
* Easy scaling. Handling more users or more data is as easy as adding James instances and scaling the underlying
databases.
* Easier load-balancing, as any email server can handle requests from any user. No sharding is involved.
* Rich feature, especially regarding *sharing*. Every user can delegate access to any over users.

Furthermore, this server is intended to be easily customisable so that it can easily be adapted to ones needs.

* Several packaged extensions can be xref:configure/index.adoc#_for_extensions[configured]
* It is easy to write and load xref:extending/index.adoc[your own extensions]


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/metrics.adoc
=====================================================
= Distributed James Server &mdash; Metrics
:navtitle: Metrics

James relies on the https://metrics.dropwizard.io/4.1.2/manual/core.html[Dropwizard metric library]
for keeping track of some core metrics of James.

Such metrics are made available via JMX. You can connect for instance using VisualVM and the associated
mbean plugins.

We also support displaying them via https://grafana.com/[Grafana]. Two methods can be used to back grafana display:

 - Prometheus metric collection - Data are exposed on a HTTP endpoint for Prometheus scrape.
 - ElasticSearch metric collection - This method is depreciated and will be removed in next version.
 
== Expose metrics for Prometheus collection

To enable James metrics, add ``extensions.routes`` to https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc[webadmin.properties] file:
```
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
```
Connect to james-admin url to test the result: 
....
http://james-admin-url/metrics
....

== Configure Prometheus Data source
You need to set up https://prometheus.io/docs/prometheus/latest/getting_started/[Prometheus] first to scrape James metrics. +
Add Apache James WebAdmin Url or IP address to ``prometheus.yaml`` configuration file:
....
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'WebAdmin url Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['james-webamin-url']
  - job_name: 'WebAdmin IP Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.100.10:8000'] 
....

== Connect Prometheus to Grafana

You can do this either from https://prometheus.io/docs/visualization/grafana/[Grafana UI] or from a https://grafana.com/docs/grafana/latest/datasources/prometheus/[configuration file]. +
The following `docker-compose.yaml` will help you install a simple Prometheus/ Grafana stack :
       
```
version: '3'

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/security.adoc
=====================================================
= Security checklist
:navtitle: Security checklist

This document aims as summarizing threats, security best practices as well as recommendations.

== Threats

Operating an email server exposes you to the following threats:

 - Spammers might attempt to use your servers to send their spam messages on their behalf. We speak of
*open relay*. In addition to the resources consumed being an open relay will affect the trust other mail
installations have in you, and thus will cause legitimate traffic to be rejected.
 - Emails mostly consist of private data, which shall only be accessed by their legitimate user. Failure
to do so might result in *information disclosure*.
 - *Email forgery*. An attacker might craft an email on the behalf of legitimate users.
 - Email protocols allow user to authenticate and thus can be used as *oracles* to guess user passwords.
 - *Spam*. Non legitimate traffic can be a real burden to your users.
 - *Phishing*: Crafted emails that tricks the user into doing unintended actions.
 - *Viruses*: An attacker sends an attachment that contains an exploit that could run if a user opens it.
 - *Denial of service*: A small request may result in a very large response and require considerable work on the server...
 - *Denial of service*: A malicious JMAP client may use the JMAP push subscription to attempt to flood a third party
server with requests, creating a denial-of-service attack and masking the attacker’s true identity.
 - *Dictionary Harvest Attacks*: An attacker can rely on SMTP command reply code to know if a user exists or not. This
 can be used to obtain the list of local users and later use those address as targets for other attacks.

== Best practices

The following sections ranks best practices.

=== Best practices: Must

 - 1. Configure James in order not to be an xref:configure/smtp.adoc#_about_open_relays[open relay]. This should be the
case with the default configuration.

Be sure in xref:configure/smtp.adoc[smtpserver.xml] to activate the following options: `verifyIdentity`.

We then recommend to manually test your installation in order to ensure that:

    - Unauthenticated SMTP users cannot send mails to external email addresses (they are not relayed)
    - Unauthenticated SMTP users can send mails to internal email addresses
    - Unauthenticated SMTP users cannot use local addresses in their mail from, and send emails both locally and to distant targets.

 - 2. Avoid *STARTTLS* usage and favor SSL. Upgrade from a non encrypted channel into an encrypted channel is an opportunity
for additional vulnerabilities. This is easily prevented by requiring SSL connection upfront. link:https://nostarttls.secvuln.info/[Read more...]

Please note that STARTTLS is still beneficial in the context of email relaying, which happens on SMTP port 25 unencrypted,
and enable opportunistic encryption upgrades that would not overwise be possible. We recommend keeping STARTTLS activated
for SMTP port 25.

 - 3. Use SSL for xref:configure/mailets.adoc#_remotedelivery[remote delivery] whenever you are using a gateway relaying SMTP server.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/migrating.adoc
=====================================================
= Distributed James Server &mdash; Migrating existing data
:navtitle: Migrating existing data

This page presents how operators can migrate your user mailbox and mails into the Distributed Server in order to adopt it.

We assume you have a xref:configure/index.adoc[well configured] running Distributed server
at hand. We also assume existing mails are hosted on a tier mail server which can be accessed via IMAP and supports
impersonation.

First, you want to create the domains handled by your server, as  well as the users you will be hosting. This operation
can be performed via WebAdmin or the CLI.

 * Using webadmin :
 ** Read xref:operate/webadmin.adoc#_create_a_domain[this section] for creating domains
 ** Read xref:operate/webadmin.adoc#_create_a_user[this section] for creating users
 * Using the CLI :
 ** Read xref:operate/cli.adoc#_manage_domains[this section] for creating domains
 ** Read xref:operate/cli.adoc#_managing_users[this section] for creating users

Second, you want to allow an administrator account of your Distributed Server to have write access on other user mailboxes.
This can be setted up this the *administratorId* configuration option of the xref:configure/usersrepository.adoc[usersrepository.xml] configuration file.

Then, it is time to run https://github.com/imapsync/imapsync[imapsync] script to copy the emails from the previous mail server
into the Distributed Server. Here is an example migrating a single user, relying on impersonation:

....
imapsync --host1 previous.server.domain.tld \
    --user1 user@domain.tld --authuser1 adminOldServer@domain.tld \
    --proxyauth1 --password1  passwordOfTheOldAdmin \
    --host2 distributed.james.domain.tld \
    --user2 use1@domain.tld  \
    --authuser2 adminNewServer@domain.tld --proxyauth2 \
    --password2  passwordOfTheNewAdmin
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/guide.adoc
=====================================================
= Distributed James Server &mdash; Operator guide
:navtitle: Operator guide

This guide aims to be an entry-point to the James documentation for user
managing a distributed Guice James server.

It includes:

* Simple architecture explanations
* Propose some diagnostics for some common issues
* Present procedures that can be set up to address these issues

In order to not duplicate information, existing documentation will be
linked.

Please note that this product is under active development, should be
considered experimental and thus targets advanced users.

== Basic Monitoring

A toolbox is available to help an administrator diagnose issues:

* xref:operate/logging.adoc[Structured logging into Kibana]
* xref:operate/metrics.adoc[Metrics graphs into Grafana]
* xref:operate/webadmin.adoc#_healthcheck[WebAdmin HealthChecks]

== Mail processing

Currently, an administrator can monitor mail processing failure through `ERROR` log
review. We also recommend watching in Kibana INFO logs using the
`org.apache.james.transport.mailets.ToProcessor` value as their `logger`. Metrics about
mail repository size, and the corresponding Grafana boards are yet to be contributed.

Furthermore, given the default mailet container configuration, we recommend monitoring
`cassandra://var/mail/error/` to be empty.

WebAdmin exposes all utilities for
xref:operate/webadmin.adoc#_reprocessing_mails_from_a_mail_repository[reprocessing
all mails in a mail repository] or
xref:operate/webadmin.adoc#_reprocessing_a_specific_mail_from_a_mail_repository[reprocessing
a single mail in a mail repository].

In order to prevent unbounded processing that could consume unbounded resources. We can provide a CRON with `limit` parameter.
Ex: 10 reprocessed per minute
Note that it only support the reprocessing all mails.

Also, one can decide to
xref:operate/webadmin.adoc#_removing_all_mails_from_a_mail_repository[delete
all the mails of a mail repository] or
xref:operate/webadmin.adoc#_removing_a_mail_from_a_mail_repository[delete

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/performanceChecklist.adoc
=====================================================
= Distributed James Server &mdash; Performance checklist
:navtitle: Performance checklist

This guide aims to help James operators refine their James configuration and set up to achieve better performance.

== Database setup

Cassandra, OpenSearch, RabbitMQ is a large topic in itself that we do not intend to cover here. Yet, here are some
very basic recommendation that are always beneficial to keep in mind.

We recommend:

* Running Cassandra, OpenSearch on commodity hardware with attached SSD. SAN disks are known to cause performance
issues for these technologies. HDD disks are to be banned for these performance related applications.
* We recommend getting an Object Storage SaaS offering that suites your needs. Most generalist S3 offers will suite
James needs.
* We do provide a guide on xref:[Database benchmarks] that can help identify and fix issues.

== James configuration

=== Cassandra

People tunning for performance would likely accept relaxing their consistency needs. James allows doing this.

**LightWeight Transactions (LWT)** can be disabled where they are not essential. This can be done within
xref:[cassandra.properties]:

....
mailbox.read.strong.consistency=false
message.read.strong.consistency=false
message.write.strong.consistency.unsafe=false
mailrepository.strong.consistency=false
....

Also, James allows for **Read repairs** where consistency checks are piggy backed on reads randomly. This of course
comes at a performance cost as it generates extre reads, thus minimizing read repair probability can help improving
performance. This can be done within
xref:[cassandra.properties]:

....
mailbox.read.repair.chance=0.00
mailbox.counters.read.repair.chance.max=0.000
mailbox.counters.read.repair.chance.one.hundred=0.000
....

One can also avoid some Cassandra requests by disabling ACLs (meaning users will only access to the mailboxes they own,
all mailbox-sharing features will thus not be achievable). This can be done within
xref:[cassandra.properties]:

....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/webadmin.adoc
=====================================================
= Distributed James Server &mdash; WebAdmin REST administration API
:navtitle: WebAdmin REST administration API

The web administration supports for now the CRUD operations on the domains, the users, their mailboxes and their quotas,
 managing mail repositories, performing cassandra migrations, and much more, as described in the following sections.

*WARNING*: This API allow authentication only via the use of JWT. If not
configured with JWT, an administrator should ensure an attacker can not
use this API.

By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James,
for example: Swagger documentation & James health checks.

In case of any error, the system will return an error message which is
json format like this:

....
{
    statusCode: <error_code>,
    type: <error_type>,
    message: <the_error_message>
    cause: <the_detail_message_from_throwable>
}
....

Also be aware that, in case things go wrong, all endpoints might return
a 500 internal error (with a JSON body formatted as exposed above). To
avoid information duplication, this is omitted on endpoint specific
documentation.

Finally, please note that in case of a malformed URL the 400 bad request
response will contain an HTML body.

== HealthCheck

=== Check all components

This endpoint is simple for now and is just returning the http status
code corresponding to the state of checks (see below). The user has to
check in the logs in order to have more information about failing
checks.

....
curl -XGET http://ip:port/healthcheck
....

Will return a list of healthChecks execution result, with an aggregated
result:

....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/logging.adoc
=====================================================
= Distributed James Server &mdash; Logging
:navtitle: Logging

We recommend to closely monitoring *ERROR* and *WARNING* logs. Those
logs should be considered not normal.

If you encounter some suspicious logs:

* If you have any doubt about the log being caused by a bug in James
source code, please reach us via the bug tracker, the user mailing list or our Gitter channel (see our
http://james.apache.org/#second[community page])
* They can be due to insufficient performance from tier applications (eg
Cassandra timeouts). In such case we advise you to conduct a close
review of performances at the tier level.

Leveraging filters in Kibana discover view can help to filter out
''already known'' frequently occurring logs.

When reporting ERROR or WARNING logs, consider adding the full logs, and
related data (eg the raw content of a mail triggering an issue) to the
bug report in order to ease resolution.

== Logging configuration

Distributed James uses link:http://logback.qos.ch/[logback] as a logging library
and link:https://docs.fluentbit.io/[FluentBit] as centralize logging.

Information about logback configuration can be found
link:http://logback.qos.ch/manual/configuration.html[here].

== Structured logging

=== Pushing logs to ElasticSearch
Distributed Server leverages the use of MDC in order to achieve structured logging,
and better add context to the logged information. We furthermore ship
link:https://github.com/linagora/logback-elasticsearch-appender[Logback Elasticsearch Appender]
on the classpath to easily allow direct log indexation in
link:https://www.elastic.co/elasticsearch[ElasticSearch].

Here is a sample `conf/logback.xml` configuration file for logback with the following
pre-requisites:

* Logging both in an unstructured fashion on the console and in a structured fashion in ElasticSearch
* Logging ElasticSearch Log appender logs in the console

Configuration for pushing log direct to ElasticSearch

* Logging ElasticSearch Log appender logs in the console

....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/index.adoc
=====================================================
= Distributed James Server &mdash; Operate the Distributed server
:navtitle: Operate the Distributed server

The following pages detail how to operate the Distributed server.

Once you have a Distributed James server up and running you then need to ensure it operates correctly and has a decent performance.
You may also need to perform some operation maintenance or recover from incidents. This section covers
these topics.

Read more about xref:operate/logging.adoc[Logging].

The xref:operate/webadmin.adoc[WebAdmin Restfull administration API] is the
recommended way to operate the Distributed James server. It allows managing and interacting with most
server components.

The xref:operate/cli.adoc[Command line interface] allows to interact with some
server components. However it relies on JMX technologies and its use is discouraged.

The xref:operate/metrics.adoc[metrics] allows to build latency and throughput
graphs, that can be visualized, for instance in *Grafana*.

We did put together a xref:operate/guide.adoc[detailed guide] for
distributed James operators. We also propose a xref:operate/performanceChecklist.adoc[performance checklist].

We also included a guide for xref:operate/migrating.adoc[migrating existing data] into the distributed server.

Read more about xref:operate/cassandra-migration.adoc[Cassandra data migration].

== Upgrading

This section sums up and links upgrade instructions for people willing to upgrade their Distributed server to newer versions.

.Upgrade path
|===
| Upgrade from | Recommended upgrade path to 3.7.4

| 3.7.0 - 3.7.4
| Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]

| 3.6.0 - 3.6.2
| 1. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#370-version[3.7.0 upgrade instructions]

2. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#380-version[3.8.0 upgrade instructions]

| 3.5.0
| 1. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#360-version[3.6.0 upgrade instructions]

Note: Because of ElasticSearch upgrade (6.3 -> 7.10) this migration cannot be done in a rolling fashion manner.

2. Upgrade, and apply link:https://github.com/apache/james-project/blob/master/upgrade-instructions.md#370-version[3.7.0 upgrade instructions]

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/cassandra-migration.adoc
=====================================================
= Distributed James Server &mdash; Cassandra migration
:navtitle: Cassandra migration

Cassandra upgrades implies the creation of a new table. Thus restarting James is needed, as new tables are created on restart.

Once done, we ship code that tries to read from new tables, and if not possible backs up to old tables. You can thus safely run
without running additional migrations.

On the fly migration can be enabled. However, one might want to force the migration in a controlled fashion, and update
automatically current schema version used (assess in the database old versions is no more used, as the corresponding tables are empty).
Note that this process is safe: we ensure the service is not running concurrently on this James instance, that it does not bump
version upon partial failures, that race condition in version upgrades will be idempotent, etc...

These schema updates can be triggered by xref:operate/webadmin.adoc#_cassandra_schema_upgrades[webadmin].

Note that currently the progress can be tracked by logs.

Here are the implemented migrations:

* *From V8 to V9* : Adopt a more compact representation for message properties.
* *From V9 to V10* : Handles Mailbox ACL transactionality with event-sourcing. We got read of SERIAL consistency upon
reads thus unlocking a major performance enhancement.

The xref:operate/guide.adoc#_updating_cassandra_schema_version[Operator guide] further details the migration process.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/operate/cli.adoc
=====================================================
= Distributed James Server &mdash; Command Line Interface
:navtitle: Command Line Interface

The distributed server is packed with a command line client.

To run this command line client simply execute:

....
java -jar /root/james-cli.jar -h 127.0.0.1 -p 9999 COMMAND
....

The following document will explain you which are the available options
for *COMMAND*.

Note: the above command line before *COMMAND* will be documented as _\{cli}_.

== Manage Domains

Domains represent the domain names handled by your server.

You can add a domain:

....
{cli} AddDomain domain.tld
....

You can remove a domain:

....
{cli} RemoveDomain domain.tld
....

(Note: associated users are not removed automatically)

Check if a domain is handled:

....
{cli} ContainsDomain domain.tld
....

And list your domains:

....
{cli} ListDomains
....

== Managing users

Note: the following commands are explained with virtual hosting turned
on.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/db-benchmark.adoc
=====================================================
= Distributed James Server -- Database benchmarks
:navtitle: Database benchmarks

This document provides basic performance of Distributed James' databases, benchmark methodologies as a basis for a James administrator who
can test and evaluate if his Distributed James databases are performing well.

It includes:

* A sample deployment topology
* Propose benchmark methodology and base performance for each database. This aims to help operators to quickly identify
performance issues and compliance of their databases.

== Sample deployment topology

We deploy a sample topology of Distributed James with these following databases:

- Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.
- OVH Swift S3 as an object storage

With the above system, our email service operates stably with valuable performance.
For a more details, it can handle a load throughput up to about 1000 JMAP requests per second with 99th percentile latency is 400ms.

== Benchmark methodologies and base performances
We are willing to share the benchmark methodologies and the result to you as a reference to evaluate your Distributed James' performance.
Other evaluation methods are welcome, as long as your databases exhibit similar or even better performance than ours.
It is up to your business needs. If your databases shows results that fall far from our baseline performance, there's a good chance that
there are problems with your system, and you need to check it out thoroughly.

=== Benchmark Cassandra

==== Benchmark methodology
===== Benchmark tool

We use https://cassandra.apache.org/doc/latest/cassandra/tools/cassandra_stress.html[cassandra-stress tool] - an official
tool of Cassandra for stress loading tests.

The cassandra-stress tool is a Java-based stress testing utility for basic benchmarking and load testing a Cassandra cluster.
Data modeling choices can greatly affect application performance. Significant load testing over several trials is the best method for discovering issues with a particular data model. The cassandra-stress tool is an effective tool for populating a cluster and stress testing CQL tables and queries. Use cassandra-stress to:

- Quickly determine how a schema performs.
- Understand how your database scales.
- Optimize your data model and settings.
- Determine production capacity.

There are several operation types:

- write-only, read-only, and mixed workloads of standard data
- write-only and read-only workloads for counter columns

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/james-benchmark.adoc
=====================================================
= Distributed James Server benchmark
:navtitle: James benchmarks

This document provides benchmark methodology and basic performance of Distributed James as a basis for a James administrator who
can test and evaluate if his Distributed James is performing well.

It includes:

* A sample Distributed James deployment topology
* Propose benchmark methodology
* Sample performance results

This aims to help operators quickly identify performance issues.

== Sample deployment topology

We deploy a sample topology of Distributed James with these following components:

- Distributed James: 3 Kubernetes pods, each pod has 2 OVH vCore CPU and 4 GB memory limit.
- Apache Cassandra 4 as main database: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- OpenDistro 1.13.1 as search engine: 3 nodes, each node has 8 OVH vCores CPU and 30 GB memory limit (OVH b2-30 instance).
- RabbitMQ 3.8.17 as message queue: 3 Kubernetes pods, each pod has 0.6 OVH vCore CPU and 2 GB memory limit.
- OVH Swift S3 as an object storage

== Benchmark methodology and base performance

=== Provision testing data

Before doing the performance test, you should make sure you have a Distributed James up and running with some provisioned testing
data so that it is representative of reality.

Please follow these steps to provision testing data:

* Prepare James with a custom `mailetcontainer.xml` having Random storing mailet. This help us easily setting a good amount of
provisioned emails.

Add this under transport processor
----
<mailet match="All" class="RandomStoring"/>
----

* Modify https://github.com/apache/james-project/tree/master/server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/provision.sh[provision.sh]
upon your need (number of users, mailboxes, emails to be provisioned).

Currently, this script provisions 10 users, 15 mailboxes and hundreds of emails for example. Normally to make the performance test representative, you
should provision thousands of users, thousands of mailboxes and millions of emails.

* Add the permission to execute the script:
----
chmod +x provision.sh

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/provision.sh
=====================================================
#!/bin/bash

export WEBADMIN_BASE_URL="http://localhost:8000"
export SMTP_URL="localhost:25"
export DOMAIN_NAME="domain.org"
export USERS_COUNT=10
export DUMMY_MAILBOXES_COUNT=10
export DUMMY_EMAILS_COUNT=100

# Create domain
curl -X PUT ${WEBADMIN_BASE_URL}/domains/${DOMAIN_NAME}

for i in $(seq 1 $USERS_COUNT)
do
  # Create user
   echo "Creating user $i"
   username=user${i}@$DOMAIN_NAME
   curl -XPUT ${WEBADMIN_BASE_URL}/users/$username \
     -d '{"password":"secret"}' \
     -H "Content-Type: application/json"

  # Create mailboxes for each user
   echo "Creating user $i mailboxes"
   # Create some basic mailboxes
   curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/INBOX
   curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Outbox
   curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Sent
   curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Draft
   curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/Trash

   # Create some other dummy mailboxes
   for j in $(seq 1 $DUMMY_MAILBOXES_COUNT)
   do
     dummyMailbox=MAILBOX${j}
     curl -XPUT ${WEBADMIN_BASE_URL}/users/${username}/mailboxes/$dummyMailbox
   done
done

# Create many dummy randomly messages (DUMMY_EMAILS_COUNT*4 to DUMMY_EMAILS_COUNT*8 messages range)
echo "Creating various dummy emails"
smtp-source -m ${DUMMY_MAILBOXES_COUNT} -f user1@domain.org -t user2@domain.org ${SMTP_URL}

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/benchmark/index.adoc
=====================================================
= Distributed James Server &mdash; Performance testing the Distributed server
:navtitle: Performance testing the Distributed server

The following pages detail how to do performance testing for the Distributed server also its database.

Once you have a Distributed James server up and running you then need to ensure it operates correctly and has a decent performance.
You may need to do performance testings periodically to make sure your James performs well.

We introduced xref:benchmark/james-benchmark.adoc[tools and base benchmark result for Distributed James] also xref:benchmark/db-benchmark.adoc[James database's base performance and how to benchmark them]
to cover this topic.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/index.adoc
=====================================================
= James Distributed Mail Server
:navtitle: Distributed James Application

The Distributed server offers an easy way to scale email server. Based on
noSQL solutions, it is intended to be easy to operate for large
deployments, without needing sharding and protocol aware load balancing.

The Distributed Server does assume that you have advanced
technical knowledge and is the most complex and feature-rich option.

This server is:

* Intended for use by experts only
* Used for large-scale distributed deployments
* Is designed for Mail Delivery use cases but can also carry out mail processing
* The most feature-rich server, but also by far the most complex

In this section of the documentation, we will introduce you to:

* xref:objectives.adoc[Objectives and motivation of the Distributed Server]
* xref:architecture/index.adoc[Overview of architecture]
* xref:run/index.adoc[Run the Distributed Server]
* xref:configure/index.adoc[Configure the Distributed Server]
* xref:operate/index.adoc[Operation of the Distributed Server]
* xref:extending/index.adoc[How to extend the server]


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/mail-processing.adoc
=====================================================
= Distributed James Server &mdash; Custom mail processing components
:navtitle: Custom mail processing components

When none of the matchers and mailets available in James allows us to implement what we want, extension
developers will have to write our own mailet and matcher in a separated maven project depending on James
Mailet API.

== Writing custom mailets/matchers

We will write a *IsDelayedForMoreThan* matcher with a configurable delay. If the Sent Date of incoming
emails is older than specified delay, then the emails should be matched (return all mail recipients). Otherwise,
we just return an empty list of recipients.

To ease our Job, we can rely on the *org.apache.james.apache-mailet-base* maven project, which provides us
a *GenericMatcher* that we can extend.

Here is the dependency:

....
<dependency>
  <groupId>org.apache.james</groupId>
  <artifactId>apache-mailet-base</artifactId>
</dependency>
....

The main method of a matcher is the *match* method:

....
Collection<MailAddress> match(Mail mail) throws MessagingException;
....

For us, it becomes, with *maxDelay* being previously configured:

....
private final Clock clock;
private Duration maxDelay;

@Override
public Collection<MailAddress> match(Mail mail) throws MessagingException {
Date sentDate = mail.getMessage().getSentDate();

    if (clock.instant().isAfter(sentDate.toInstant().plusMillis(maxDelay.toMillis()))) {
        return ImmutableList.copyOf(mail.getRecipients());
    }
    return ImmutableList.of();
}
....

*GenericMatcher* exposes us the condition that had been configured. We will use it to compute *maxDelay*.
We can do it in the *init()* method exposed by the generic matcher:

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/smtp-hooks.adoc
=====================================================
= Distributed James Server &mdash; Custom SMTP hooks
:navtitle: Custom SMTP hooks

SMTP hooks enable extending capabilities of the SMTP server and are run synchronously upon email reception, before the email is
enqueued in the MailQueue, and before any mail processing takes place.

== Available generic hooks

The following interfaces allows interacting with the following commands:

 * *AuthHook*: Implement this interfaces to hook in the AUTH Command.

....
    HookResult doAuth(SMTPSession session, Username username, String password);
....

 * *HeloHook*: Implement this interfaces to hook in the HELO Command

....
    HookResult doHelo(SMTPSession session, String helo);
....

 * *MailHook*: Implement this interfaces to hook in the MAIL Command

....
    HookResult doMail(SMTPSession session, MaybeSender sender);
....

 * *MailParametersHook*: Implement this interfaces to hook in the MAIL Command, this is called for specific mail arguments

....
    HookResult doMailParameter(SMTPSession session, String paramName, String paramValue);
....


 * *QuitHook*: Implement this interfaces to hook in the QUIT Command

....
    HookResult doQuit(SMTPSession session);
....

 * *RcptHook*: Implement this interfaces to hook in the RCPT Command

....
    HookResult doRcpt(SMTPSession session, MaybeSender sender, MailAddress rcpt);
....

 * *UnknownHook*: Hook for unknown commands

....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/imap.adoc
=====================================================
= Distributed James Server &mdash; Custom IMAP processing
:navtitle: Custom IMAP processing

James allows defining your own handler packages.

An Imap package is a simple class that bundles IMAP processing components:

....
public interface ImapPackage {
    Collection<ClassName> processors();

    Collection<ClassName> decoders();

    Collection<ClassName> encoders();
}
....

Processors needs to be of class `AbstractProcessor`, decoders of class `AbstractImapCommandParser`
and encoders of class `ImapResponseEncoder`. Extensions-jar mechanism can be used to load custom classes.

Custom configuration can be obtained through `ImapConfiguration` class via the `getCustomProperties` method.

A full working example is available link:https://github.com/apache/james-project/tree/master/examples/custom-imap[here].

See this page for xref:configure/imap.adoc#_extending_imap[more details on configuring IMAP extensions].

== IMAP additional Connection Checks

James allows defining your own additional connection checks to guarantee that the connecting IP is secured.

A custom connection check should implement the following functional interface:
```
@FunctionalInterface
public interface ConnectionCheck {
    Publisher<Void> validate(InetSocketAddress remoteAddress);
}
```

- `validate` method is used to check the connecting IP is secured.

Then the custom defined ConnectionCheck can be added in `imapserver.xml` file:
```
<additionalConnectionChecks>org.apache.james.CrowdsecImapConnectionCheck</additionalConnectionChecks>
```

An example for configuration is available link:https://github.com/apache/james-project/blob/master/third-party/crowdsec/sample-configuration/imapserver.xml[here].

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/webadmin-routes.adoc
=====================================================
= Distributed James Server &mdash; Custom WebAdmin routes
:navtitle: Custom WebAdmin routes

== Writing custom WebAdmin routes

An extension writer can write additional WebAdmin routes, effectively exposed over the WebAdmin API.

To do so, extend the *Routes* defined in the *james-server-webadmin-core*.

Here is the dependency:

....
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>james-server-webadmin-core</artifactId>
</dependency>
....

Here is the interface:

....
public interface Routes {
    String getBasePath();

    void define(Service service);
}
....

* *getBasePath* enables to know the prefix of your route

* *define* enables you to register endpoint is the http://sparkjava.com/[sparkjava] Service instance. HTTP *GET*, *POST*,
*PUT*, *PATCH*, etc.. verbs are supported.

== Registration

Your custom WebAdmin routes needs to be in the *extensions-jars* folder.

You need to register its fully qualified class name in xref:configure/webadmin.adoc[webadmin.properties]
using the *extensions.routes* property.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/mailbox-listeners.adoc
=====================================================
= Distributed James Server &mdash; Custom Mailbox Listeners
:navtitle: Custom Mailbox Listeners

== Writing additional listener

An extension writer can write new additional mailbox listeners.

To do so, extend the *GroupMailboxListener* defined in the *mailbox-api*.

Here is the dependency:

....
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>apache-james-mailbox-api</artifactId>
</dependency>
....

Here are the methods you can implement:

....
    void event(Event event) throws Exception;
....

allows you to specify the business logic you want to execute upon new events generation.

....
    boolean isHandling(Event event);
....

Allows to know if this event is worth execution, and should be sent on the EventBus. This avoids execution of non
handled events and can save some IOs.

== Registration of custom additional listeners

Your custom additional listener needs to be in the *extensions-jars* folder.

You need to register its fully qualified class name in xref:configure/listeners.adoc[listeners.xml]

== Events

Your listener will be called for the following events:

 - *MailboxAdded*: A new mailbox had been created
 - *MailboxDeletion*: A new mailbox had been deleted
 - *MailboxRenamed*: A mailbox was renamed
 - *MailboxACLUpdated*: The rights of a mailbox had been changed
 - *Expunged*: Some messages had been deleted
 - *FlagsUpdated*: Some message flags had been updated
 - *Added*: New messages had been added to a mailbox

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/extending/index.adoc
=====================================================
= Distributed James Server &mdash; Extending server behavior
:navtitle: Extending server behavior

== Available extension mechanisms

image::james-hexagons-extensions.png[Extension mechanisms for the Distributed Server]

The Distributed Server exposes several interfaces allowing the user to write custom extensions in
order to extend the Distributed Server behavior.

Writing *Mailets* and *Matchers* allows one to supply custom components for the
xref:extending/mail-processing.adoc[Mail Processing] and
enables to take decisions, and implement your business logic at the transport level.

Writing xref:extending/mailbox-listeners.adoc[Mailbox listeners] enables to
react to your user interaction with their mailbox. This powerful tool allows build advanced features
for mail delivery servers.

Writing xref:extending/smtp-hooks.adoc[SMTP hookd] enables to
add features to your SMTP server.

Writing xref:extending/webadmin-routes.adoc[WebAdmin routes] enables to
add features to the WebAdmin REST API.

Writing xref:extending/imap.adoc[IMAP extensions].

The link:https://github.com/apache/james-project/tree/master/examples[examples] are also a good reference.

== Handling injections for your extensions

=== Injecting core components

You can very easily inject core components into your custom extensions.

All you need is to pass them via a constructor annotated via *@Inject*.

For instance:

....
public class MyMailet extends GenericMailet {
    private final UsersRepository usersRepository;

    @Inject
    public MyMailet(UsersRepository usersRepository) {
        this.usersRepository = usersRepository;
    }

    @Override
    public void service(Mail mail) throws MessagingException {
        // Do something

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-secrets.adoc
=====================================================
== Secrets for James Helm template

Helm James has many secret values to configure before being able to use
it correctly. Those secrets are linked to the template through their
declaration in `james-secrets.yaml`. A sample with dumb secrets can be
found in the `secrets.sample.yaml` file.

This document presents a quick description of each secret field.

For more information about encrypt/descrypt secret with Helm, see:
https://github.com/jkroepke/helm-secrets

=== James secret values

[cols="<,<,<",options="header",]
|===
|Field |Mandatory or optional |Description
|jwtPublicKey |Mandatory |The JWT public key used for JWT tokens.

|jwtPrivateKey |Mandatory |The JWT private key used for JWT tokens.

|cassandraUser |Mandatory |The user for Cassandra access

|cassandraPassword |Mandatory |The password fort Cassandra access

|esUser |Optional |The user for OpenSearch access

|esPassword |Optional |The password for OpenSearch access

|dkimPrivateKey |Optional |The private key for the generated DKIM

|s3.endpoint |Mandatory |The S3 endpoint. ie:
http://s3-us-east-1.amazonaws.com

|s3.region |Mandatory |The region of the S3 object storage.

|s3.accessKeyId |Mandatory |The access key to the S3 object storage

|s3.secretKey |Mandatory |The secret key to the S3 object storage

|s3.bucketNameSuffix |Mandatory |All buckets in S3 related to james
storage start by ``james-''. This allows to have a suffix for each
tenant
|===

=== jwtPublicKey

Use `openssl` to generate self-signed certificate and convert to Java
Key Store JKS. You can find an example
https://loneidealist.medium.com/generating-signing-certificates-with-openssl-and-converting-to-java-key-store-jks-3c8185dbf8fe[here]

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-logsMetrics.adoc
=====================================================
== Logs and Metrics

=== Logs

James exposes its logs on the console. Then a fluent bit instance scraps
and collects them, before being indexed and used by Kibana, with nice
search possibilities.

The way James exposes its logs on the console is defined in the
`logback.xml` configuration file. James currently exposes logs in JSON
format using Jackson Json formatter.

=== Metrics

James exposes its metrics over an HTTP Webadmin endpoint, something like
`https://james-web-admin/metrics`. Those metrics can be scraped by
Prometheus before being visualized on Grafana.

This Helm chart exposes James metrics through Prometheus
https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/user-guides/getting-started.md#include-servicemonitors[ServiceMonitor].

You can import the dashboards for James metrics in Grafana defined
https://github.com/apache/james-project/tree/master/server/grafana-reporting/prometheus-datasource[here].

Be aware that those dashboards still need more work, as we used to
export metrics to Elasticsearch not long ago, which required to redo all
dashboards. Some enhancements are highly possible and encouraged.

Read more about xref:operate/metrics.adoc[Metrics in James].

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/run-docker.adoc
=====================================================
= Distributed James Server &mdash; Run with docker
:navtitle: Run with docker

== Running via docker-compose


Requirements: docker & docker-compose installed.

When you try James this way, you will use the most current state of James.
It will be configured to run with Cassandra & OpenSearch.
All those three components will be started with a single command.

You can retrieve the docker-compose file : ( docker-compose file and james image name should be changed) 

    $ wget https://raw.githubusercontent.com/apache/james-project/master/server/apps/distributed-app/docker-compose.yml
   

Then, you just have to start the services:

    $ docker-compose up -d

Wait a few seconds in order to have all those services start up. You will see the following log when James is available:
james           | Started : true

A default domain, james.local, has been created. You can see this by running:

    $ docker exec james james-cli -h 127.0.0.1 -p 9999 listdomains

James will respond to IMAP port 143 and SMTP port 25.
You have to create users before playing with james. You may also want to create other domains.
Follow the 'Useful commands' section for more information about James CLI.

== Run with docker

=== Requirements

Compile the whole project:

    mvn clean install -DskipTests -T 4

Then load the distributed server docker image:

    docker load -i server/apps/distributed-app/target/jib-image.tar

Alternatively we provide convenience distribution for the latest release:

    docker pull apache/james:distributed-3.8.1

=== Running
Firstly, create your own user network on Docker for the James environment:

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/run-kubernetes.adoc
=====================================================
= Distributed James Server &mdash; Run with Kubernetes
:navtitle: Run with Kubernetes

== Deploy Apache James on Kubernetes with Helm chart.

This chart bootstraps a James mail server on a link:http://kubernetes.io[Kubernetes] 
cluster using the link:https://helm.sh[Helm] package manager.

== Before Starting


Before running the Helm chart, James should have particularly accessed to the following external products:

Apache Cassandra::
- You can deploy Cassandra on Kubernetes with a link:https://github.com/bitnami/charts/tree/master/bitnami/cassandra[Cassandra chart] for testing purpose. However we would recommend running Cassandra on VirtualMachine for better stablilty.
OpenSearch::
- OpenSearch community maintains link:https://github.com/opensearch-project/helm-charts[Helm charts]
RabbitMQ::
- link:https://github.com/rabbitmq/cluster-operator[RabbitMQ Cluster Operator] is a custom Kubernetes resource designed for the lifecycle (creation, upgrade, graceful shutdown) of a RabbitMQ cluster. Using Quickstart setup is enough for James deployment.


== Configuration

=== Helm Configuration

The James helm package take parameters that will configure and determine the behavior of James.
There are 2 configuration files: 

* One contains global, non-confidential, configuration: `values.yaml`
* The other one contains secrets: `secrets.yaml`. Values are encrypted with a key stored generated by link:https://github.com/mozilla/sops[sops].

You need to pass these 2 files as parameters to the James Helm package.
To verify the coherence and avoid errors, the packages can validate the input.

This package contains a default `values.yaml` file, but that you should override with proper configuration for your deployment (`conf.yaml`).
The file `secrets.sample.yaml` will show you the possible values of the secrets file. To generate the `secrets.yaml` file, 
you will need a plugin for Helm called link:https://github.com/jkroepke/helm-secrets)[helm-scecrets].

Usually, you will save those configurations in different repositories, per deployment.

Have a look at `values.md` and `secrets.md` in our Chart link:https://github.com/apache/james-project/tree/master/server/apps/distributed-app/helm-chart/james/doc/[documents] to have more information on the configuration James is using.

You can find our Helm chart for James in link:https://github.com/apache/james-project/tree/master/server/apps/distributed-app/helm-chart[here]

=== James Configuration

The configuration files proper to James are stored in the Chart `james/configs` folder. They are being stored in a `ConfigMap` and then being mounted in the James pod at /root/conf path.

If you need to change a conf in James, this is where you need to look at.


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-values.adoc
=====================================================
== Values for Helm James template

Helm James has many visible values to configure before being able to use
it correctly. Values are injected into the deployment template as
environment variables. An example with default values can be found in
the `+values.yaml+` file.

This document presents a quick description of each value field.

=== DNS values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description
|emailDomain |mail.example.com |The domain name for your tenant’s email
addresses

|jmapUrl |jmap.example.com |The url for the ingress jmap endpoint

|adminUrl |admin.example.com |The url for the ingress admin endpoint

|smtpHostname |smtp.example.com |The SMTP Ehlo hostname
|===

=== James values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description
|replicaJmapInstanceCount |1 |The number of pods we deploy for James
JMAP instance in the cluster

|replicaImapSmtpInstanceCount |1 |The number of pods we deploy for James
IMAP/SMTP instance in the cluster

|image |apache/james:distributed-3.8.1 |The James image used for
deployment (Cassandra - RabbitMQ - LDAP distributed James flavor)
|===

=== James environment values
[cols="<,<,<",options="header",]
|===
|Field |Default value |Description

|jamesCassandraKeyspace |sandbox_james |The keyspace used for Cassandra
James data

|jamesCassandraCacheKeyspace |sandbox_james_cache |The keyspace used for
the Cassandra cache

|jamesEsMailboxIndex |mailbox_v1 |The index used for mailbox in
OpenSearch. The default value should be enough, but in case you had

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/index.adoc
=====================================================
= Distributed James Server &mdash; Run 
:navtitle: Run

This sections presents guidance to all current deployment types of Distributed James Server.

== Run with Java

Build your own Apache James Distributed artifacts and start xref:run/run-java.adoc[Running it directly on a Java Virtual Machine].

== Run with Docker

We have prepared a docker-compose for Apache James to run with Cassandra & OpenSearch.

You can start xref:run/run-docker.adoc[Running James with few simple Docker commands].

== Run with Kubernetes

A more complete - production ready deployment type.

We have packed xref:run/run-kubernetes.adoc[Apache James in a Helm chart], parameterized most of the application resources. With it you can easily deploy and test different set of configuration on a Kubernetes Cluster.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/run-java.adoc
=====================================================
= Distributed James Server &mdash; Run
:navtitle: Run

== Building

=== Requirements

* Java 11 SDK
* Docker ∕ OpenSearch 2.1.0, RabbitMQ Management 3.8.18, S3 compatible
ObjectStorage and Cassandra 4.0
* Maven 3

=== Building the artifacts

An usual compilation using maven will produce two artifacts into
server/apps/distributed-app/target directory:

* james-server-distributed-app.jar
* james-server-distributed-app.lib

You can for example run in the base of
https://github.com/apache/james-project[this git repository]:

....
mvn clean install
....

== Running

=== Requirements

* Cassandra 4.0
* OpenSearch 2.1.0
* RabbitMQ-Management 3.8.17
* Swift ObjectStorage 2.15.1 or Zenko Cloudserver or AWS S3

=== James Launch

To run james, you have to create a directory containing required
configuration files.

James requires the configuration to be in a subfolder of working
directory that is called *conf*. You can get a sample directory for
configuration from
https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/[server/apps/distributed-app/sample-configuration/].
You might need to adapt it to your needs.

You need to have a Cassandra, OpenSearch, S3 and RabbitMQ instance
running. You can either install the servers or launch them via docker:


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/run/k8s-checklist.adoc
=====================================================
= Checklist

There is some things that you must have before being able to run James on your Kubernetes Cluster.

== MUST have

Those are absolutely necessary if you want at least James to start without crashing.

- [ ] Setup RabbitMQ and create James user in it.
- [ ] Create a Kubernetes namespace for James deployment.
- [ ] A `distributed` version of James image.
- [ ] An ObjectStorage compatible with S3 APIs.
- [ ] Configure JWT keys, keystores.
- [ ] Adding the proper `mailetcontainer.xml` file with other conf files in James Helm package

With those you should be able to startup James for first tests without having it crashing. However it's still not enough to have it fully functional.

== Should have

- [ ] Cassandra nodes deployed.
- [ ] Put valid Cassandra keyspaces in the configuration.
- [ ] Have an appropriate email domain (Contact your Domain Service Provider)
- [ ] Create your Domain SPF and DKIM Record. See document [here](https://james.apache.org/howTo/)
- [ ] OpenSearch nodes deployed.
- [ ] DNS registered entries for JMAP, IMAP, SMTP, Webadmin.
- [ ] Enable Ingress and create the secret for TLS certificate used by Ingress.
 * Preproduction: Usually, we use link:https://github.com/jetstack/cert-manager[cert-manager] to request a Let's Encrypt Certificate. Remember to use the full chain certificate. You can verify that your certificate works well with `openssl` before adding 
    the name of that secret to your James values.
 * Production: Some certificates belonging to the client should exist already. See that with the team.
- [ ] Change IMAP ports to NodePort if your Cloud Provider Load Balancer has short idle timeout and we need longer connections for performance reasons (and the RFC for IMAP states also we need 30 minutes for the timeout).
  - [ ] Use an external LB (ie. HA Proxy) to redirect traffic towards James IMAP service NodePort IPs and ports.

== After setup operations

When all of this is working, normally your chain mail should be able to work. To check it you can:

* Use a mail client (ThunderBird, Outlook, ...) to test James IMAP.
* Send a mail internally from one test account to an other.
* Send a mail from James to an external mail provider (your Gmail, Yahoo account for example).
* Send a mail from an external provider to James.
* Use services like link:https://www.mail-tester.com/[mail-tester] to check your score.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-events.adoc
=====================================================
= Event collection

== Motivation

Many calendar application do add events invitation received by email directly in ones calendar.

Such behaviours requires the calendar application to be aware of the ICalendar related emails a user received.

== Design

The idea is to write a portion of mailet pipeline extracting Icalendar attachments and to hold them as attachments that
can later be sent to other applications over AMQP to be treated in an asynchronous, decoupled fashion.

== Configuration

We can achieve this goal by combining simple mailets building blocks.

Here is a sample pipeline achieving aforementioned objectives :

....
<!-- ICAL pipeline -->
<mailet match="All" class="StripAttachment">
    <mimeType>text/calendar</mimeType>
    <attribute>rawIcalendar</attribute>
</mailet>
<mailet match="All" class="MimeDecodingMailet">
    <attribute>rawIcalendar</attribute>
</mailet>
<mailet match="All" class="ICalendarParser">
    <sourceAttribute>rawIcalendar</sourceAttribute>
    <destinationAttribute>icalendar</destinationAttribute>
</mailet>
<mailet match="All" class="ICALToHeader">
    <attribute>icalendar</attribute>
</mailet>
<mailet match="All" class="ICALToJsonAttribute">
    <source>icalendar</source>
    <destination>icalendarAsJson</destination>
    <rawSource>rawIcalendar</rawSource>
</mailet>
<mailet match="All" class="AmqpForwardAttribute">
    <uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
    <exchange>james:events</exchange>
    <attribute>icalendarAsJson</attribute>
</mailet>
<!-- End of ICAL pipeline -->
....

A sample message looks like:


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/matchers.adoc
=====================================================
= Distributed James Server &mdash; Matchers
:navtitle: Matchers

This documentation page lists and documents Matchers that can be used within the
Distributed Server MailetContainer in order to write your own mail processing logic with out-of-the-box components.

== Supported matchers

include::partial$All.adoc[]

include::partial$AtLeastPriority.adoc[]

include::partial$AtMost.adoc[]

include::partial$AtMostPriority.adoc[]

include::partial$DLP.adoc[]

include::partial$FetchedFrom.adoc[]

include::partial$HasAttachment.adoc[]

include::partial$HasException.adoc[]

include::partial$HasHeader.adoc[]

include::partial$HasHeaderWithPrefix.adoc[]

include::partial$HasMailAttribute.adoc[]

include::partial$HasMailAttributeWithValue.adoc[]

include::partial$HasMailAttributeWithValueRegex.adoc[]

include::partial$HasMimeType.adoc[]

include::partial$HasMimeTypeParameter.adoc[]

include::partial$HasPriority.adoc[]

include::partial$HostIs.adoc[]

include::partial$HostIsLocal.adoc[]

include::partial$IsMarkedAsSpam.adoc[]

include::partial$IsOverQuota.adoc[]

include::partial$IsRemoteDeliveryPermanentError.adoc[]


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailets.adoc
=====================================================
= Distributed James Server &mdash; Mailets
:navtitle: Mailets

This documentation page lists and documents Mailet that can be used within the
Distributed Server MailetContainer in order to write your own mail processing logic with out-of-the-box components.

== Supported mailets

include::partial$AddDeliveredToHeader.adoc[]

include::partial$AddFooter.adoc[]

include::partial$AddSubjectPrefix.adoc[]

include::partial$AmqpForwardAttribute.adoc[]

include::partial$Bounce.adoc[]

include::partial$ContactExtractor.adoc[]

include::partial$ConvertTo7Bit.adoc[]

include::partial$DKIMSign.adoc[]

include::partial$DKIMVerify.adoc[]

include::partial$DSNBounce.adoc[]

include::partial$Expires.adoc[]

include::partial$ExtractMDNOriginalJMAPMessageId.adoc[]

include::partial$Forward.adoc[]

include::partial$ICalendarParser.adoc[]

include::partial$ICALToHeader.adoc[]

include::partial$ICALToJsonAttribute.adoc[]

include::partial$ICSSanitizer.adoc[]

include::partial$LocalDelivery.adoc[]

include::partial$LogMessage.adoc[]

include::partial$MailAttributesListToMimeHeaders.adoc[]

include::partial$MailAttributesToMimeHeaders.adoc[]


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/batchsizes.adoc
=====================================================
= Distributed James Server &mdash; batchsizes.properties
:navtitle: batchsizes.properties

This files allow to define the amount of data that should be fetched 'at once' when interacting with the mailbox. This is
needed as IMAP can generate some potentially large requests.

Increasing these values tend to fasten individual requests, at the cost of enabling potential higher load.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/batchsizes.properties[example]
to get some examples and hints.

.batchsizes.properties content
|===
| Property name | explanation

| fetch.metadata
| Optional, defaults to 200. How many messages should be read in a batch when using FetchType.MetaData

| fetch.headers
| Optional, defaults to 200. How many messages should be read in a batch when using FetchType.Header

| fetch.body
| Optional, defaults to 100. How many messages should be read in a batch when using FetchType.Body

| fetch.full
| Optional, defaults to 50. How many messages should be read in a batch when using FetchType.Full

| copy
| Optional, defaults to 200. How many messages should be copied in a batch.

| move
| Optional, defaults to 200. How many messages should be moved in a batch.

|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp-hooks.adoc
=====================================================
= Distributed James Server &mdash; SMTP Hooks
:navtitle: SMTP Hooks

This documentation page lists and documents SMTP hooks that can be used within the
Distributed Server SMTP protocol stack in order to customize the way your SMTP server
behaves without of the box components.

== DNSRBLHandler

This command handler check against https://www.wikiwand.com/en/Domain_Name_System-based_Blackhole_List[RBL-Lists]
(Real-time Blackhole List).

If getDetail is set to true it try to retrieve information from TXT Record
why the ip was blocked. Default to false.

before you enable out the DNS RBL handler documented as an example below,
please take a moment to review each block in the list.
We have included some that various JAMES committers use,
but you must decide which, if any, are appropriate
for your environment.

The mail servers hosting
@apache.org mailing lists, for example, use a
slightly different list than we have included below.
And it is likely that most JAMES committers also have
slightly different sets of lists.

The SpamAssassin user's list would be one good place to discuss the
measured quality of various block lists.

NOTA BENE: the domain names, below, are terminated
with '.' to ensure that they are absolute names in
DNS lookups.  Under some circumstances, names that
are not explicitly absolute could be treated as
relative names, leading to incorrect results.  This
has been observed on *nix and MS-Windows platforms
by users of multiple mail servers, and is not JAMES
specific.  If you are unsure what this means for you,
please speak with your local system/network admins.

This handler should be considered experimental.

Example configuration:

....
<handlerchain>
    <!-- ... -->
    <handler class="org.apache.james.smtpserver.fastfail.DNSRBLHandler">
        <getDetail>false</getDetail>
        <rblservers>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/domainlist.adoc
=====================================================
= Distributed James Server &mdash; domainlist.xml
:navtitle: domainlist.xml

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/domainlist.xml[example]
to get some examples and hints.

This configuration block is defined by the *domainlist* tag.

.domainlist.xml content
|===
| Property name | explanation

| domainnames
| Domainnames identifies the DNS namespace served by this instance of James.
These domainnames are used for both matcher/mailet processing and SMTP auth
to determine when a mail is intended for local delivery - Only applicable for XMLDomainList. The entries mentionned here will be created upon start.

|autodetect
|true or false - If autodetect is true, James wil attempt to discover its own host name AND
use any explicitly specified servernames.
If autodetect is false, James will use only the specified domainnames. Defaults to false.

|autodetectIP
|true or false - If autodetectIP is not false, James will also allow add the IP address for each servername.
The automatic IP detection is to support RFC 2821, Sec 4.1.3, address literals. Defaults to false.

|defaultDomain
|Set the default domain which will be used if an email is send to a recipient without a domain part.
If no defaultdomain is set the first domain of the DomainList gets used. If the default is not yet contained by the Domain List, the domain will be created upon start.

|read.cache.enable
|Experimental. Boolean, defaults to false.
Whether or not to cache domainlist.contains calls. Enable a faster execution however writes will take time
to propagate.

|read.cache.expiracy
|Experimental. String (duration), defaults to 10 seconds (10s). Supported units are ms, s, m, h, d, w, month, y.
Expiracy of the cache. Longer means less reads are performed to the backend but writes will take longer to propagate.
Low values (a few seconds) are advised.


|===

To override autodetected domainnames simply add explicit domainname elements.
In most cases this will be necessary. By default, the domainname 'localhost' is specified. This can be removed, if required.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/queue.adoc
=====================================================
= Distributed James Server &mdash; queue.properties
:navtitle: queue.properties

This configuration helps you configure mail queue you want to select.

== Queue Configuration

.queue.properties content
|===
| Property name | explanation

| mail.queue.choice
| Mail queue can be implemented by many type of message brokers: Pulsar, RabbitMQ,... This property will choose which mail queue you want, defaulting to RABBITMQ
|===

`mail.queue.choice` supports the following options:

* You can specify the `RABBITMQ` if you want to choose RabbitMQ mail queue
* You can specify the `PULSAR` if you want to choose Pulsar mail queue

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/dsn.adoc
=====================================================
= Distributed James Server &mdash; Delivery Submission Notifications
:navtitle: ESMTP DSN setup

DSN introduced in link:https://tools.ietf.org/html/rfc3461[RFC-3461] allows a SMTP sender to demand status messages,
defined in link:https://tools.ietf.org/html/rfc3464[RFC-3464] to be sent back to the `Return-Path` upon delivery
progress.

DSN support is not enabled by default, as it needs specific configuration of the
xref:configure/mailetcontainer.adoc[mailetcontainer.xml] to be specification compliant.

To enable it you need to:

- Add DSN SMTP hooks as part of the SMTP server stack
- Configure xref:configure/mailetcontainer.adoc[mailetcontainer.xml] to generate DSN bounces when needed

== Enabling DSN in SMTP server stack

For this simply add the `DSN hooks` in the handler chain in `smtpserver.xml` :

....
<smtpserver enabled="true">
    <...> <!-- The rest of your SMTP configuration, unchanged -->
    <handlerchain>
        <handler class="org.apache.james.smtpserver.dsn.DSNEhloHook"/>
        <handler class="org.apache.james.smtpserver.dsn.DSNMailParameterHook"/>
        <handler class="org.apache.james.smtpserver.dsn.DSNRcptParameterHook"/>
        <handler class="org.apache.james.smtpserver.dsn.DSNMessageHook"/>
        <...> <!-- other handlers, like: -->
        <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/> <!-- for instance -->
    </handlerchain>
</smtpserver>
....

== Enabling DSN generation as part of mail processing

For the below conditions to be matched we assume you follow
xref:configure/remote-delivery-error-handling.adoc[RemoteDelivery error handling for MXs], which is a
requirement for detailed RemoteDelivery error and delay handling on top of the Distributed server.

Here is a sample xref:configure/mailetcontainer.adoc[mailetcontainer.xml] achieving the following DSN generation:

- Generate a generic `delivered` notification if LocalDelivery succeeded, if requested
- Generate a generic `failed` notification in case of local errors, if requested
- Generate a specific `failed` notification in case of a non existing local user, if requested
- Generate a specific `failed` notification in case of an address rewriting loop, if requested
- Generate a `failed` notification in case of remote permanent errors, if requested. We blame the remote server...
- Generate a `delayed` notification in case of temporary remote errors we are about to retry, if requested. We blame the remote server...
- Generate a `failed` notification in case of temporary remote errors we are not going to retry (failed too many time), if requested. We blame the remote server...

....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmx.adoc
=====================================================
= Distributed James Server &mdash; jmx.properties
:navtitle: jmx.properties

== Disclaimer

JMX poses several security concerns and had been leveraged to conduct arbitrary code execution.
This threat is mitigated by not allowing remote connections to JMX, setting up authentication and pre-authentication filters.
However, we recommend to either run James in isolation (docker / own virtual machine) or disable JMX altogether.<br/>

James JMX endpoint provides command line utilities and exposes a few metrics, also available on the metric endpoint.</p>

== Configuration

This is used to configure the JMX MBean server via which all management is achieved.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/jmx.properties[example]
in GIT to get some examples and hints.

.jmx.properties content
|===
| Property name | explanation

| jmx.enabled
| Boolean. Should the JMX server be enabled? Defaults to `true`.

| jmx.address
|The IP address (host name) the MBean Server will bind/listen to.

| jmx.port
| The port number the MBean Server will bind/listen to.
|===

To access from a remote location, it has been reported that `-Dcom.sun.management.jmxremote.ssl=false` is needed as
a JVM argument.

== JMX Security

In order to set up JMX authentication, we need to put `jmxremote.password` and `jmxremote.access` file
to `/conf` directory.

- `jmxremote.password`: define the username and password, that will be used by the client (here is james-cli)

File's content example:
```
james-admin pass1
```

- `jmxremote.access`: define the pair of username and access permission

File's content example:

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/cassandra.adoc
=====================================================
= Distributed James Server &mdash; cassandra.properties
:navtitle: cassandra.properties

This configuration file allow setting some configuration properties in conjunction to
Cassandra driver native configuration.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra.properties[example]
to get some examples and hints.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra-driver.conf[example]
to get some examples and hints for Cassandra driver native configuration.

Cassandra native configuration allows configuring SSL, timeouts, logs and metrics as well as execution profiles.

== Configuration

Here are generic properties:

.cassandra.properties content
|===
| Property name | explanation

| cassandra.nodes
| List of some nodes of the cassandra's cluster in following format host:port or host, if the port is not specified we use 9042

|cassandra.keyspace.create
|Indicate if the keyspace should be created by James. Optional, default value: *false*
If set to true James will attempt to create the keyspace when starting up.

|cassandra.keyspace
|Is the name of the keyspace used by James. Optional, default value: *apache_james*

|cassandra.user
|Username used as a credential for contacting Cassandra cluster. Optional, default is absent,
required if *cassandra.password* is supplied

|cassandra.password
|Password used as a credential for contacting Cassandra cluster. Optional, default is absent,
required if <strong>cassandra.user</strong> is supplied

|cassandra.replication.factor
|Is the replication factor used upon keyspace creation. Modifying this property while the keyspace already exists
will have no effect. Optional. Default value 1.

|cassandra.local.dc
|Optional. Allows specifying the local DC as part of the load balancing policy. Specifying it
would result in the use of `new TokenAwarePolicy(DCAwareRoundRobinPolicy.builder().withLocalDc(value).build())` as a LoadBalancingPolicy.
This value is useful in a multi-DC Cassandra setup. Be aware of xref:../architecture/consistency-model.adoc#_about_multi_data_center_setups[limitation of multi-DC setups for James]
Not specifying this value results in the driver's default load balancing policy to be used.


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/tika.adoc
=====================================================
= Distributed James Server &mdash; tika.properties
:navtitle: tika.properties

When using OpenSearch, you can configure an external Tika server for extracting and indexing text from attachments.
Thus you can significantly improve user experience upon text searches.

Note: You can launch a tika server using this command line:

....
docker run --name tika linagora/docker-tikaserver:1.24
....

Here are the different properties:

.tika.properties content
|===
| Property name | explanation

| tika.enabled
| Should Tika text extractor be used?
If true, the TikaTextExtractor will be used behind a cache.
If false, the DefaultTextExtractor will be used (naive implementation only supporting text).
Defaults to false.

| tika.host
| IP or domain name of your Tika server. The default value is 127.0.0.1

| tika.port
| Port of your tika server. The default value is 9998

| tika.timeoutInMillis
| Timeout when issuing request to the tika server. The default value is 3 seconds.

| tika.cache.eviction.period
| A cache is used to avoid, when possible, query Tika multiple time for the same attachments.
This entry determines how long after the last read an entry vanishes.
Please note that units are supported (ms - millisecond, s - second, m - minute, h - hour, d - day). Default unit is seconds.
Default value is *1 day*

| tika.cache.enabled
| Should the cache be used? False by default

| tika.cache.weight.max
| Maximum weight of the cache.
A value of *0* disables the cache
Please note that units are supported (K for KB, M for MB, G for GB). Defaults is no units, so in bytes.
Default value is *100 MB*.

| tika.contentType.blacklist
| Blacklist of content type is known-to-be-failing with Tika. Specify the list with comma separator.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/jvm.adoc
=====================================================
= Distributed James Server &mdash; jvm.properties
:navtitle: jvm.properties

This file may contain any additional system properties for tweaking JVM execution. When you normally would add a command line option `-Dmy.property=whatever`, you can put it in this file as `my.property=whatever` instead. These properties will be added as system properties on server start.

Note that in some rare cases this might not work,
when a property affects very early JVM start behaviour.

For testing purposes, you may specify a different file path via the command line option `-Dextra.props=/some/other/jvm.properties`.

== Control the threshold memory
This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.

In `jvm.properties`
----
james.message.memory.threshold=12K
----

(Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.

== Enable the copy of message in memory
Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
be copied to temporary files?

----
james.message.usememorycopy=true
----

Optional. Boolean. Defaults to false. Recommended value is false.

== Running resource leak detection
It is used to detect a resource not be disposed of before it's garbage-collected.

In `jvm.properties`
----
james.lifecycle.leak.detection.mode=advanced
----

Allowed mode values are: none, simple, advanced, testing

The purpose of each mode is introduced in `config-system.xml`

== Disabling host information in protocol MDC logging context

Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.


In `jvm.properties`
----

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/jmap.adoc
=====================================================
= Distributed James Server &mdash; jmap.properties
:navtitle: jmap.properties

https://jmap.io/[JMAP]  is intended to be a new standard for email clients to connect to mail
stores. It therefore intends to primarily replace IMAP + SMTP submission. It is also designed to be more
generic. It does not replace MTA-to-MTA SMTP transmission.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/jmap.properties[example]
to get some examples and hints.

.jmap.properties content
|===
| Property name | explanation

| enabled
| true/false. Governs whether JMAP should be enabled

| jmap.port
| Optional. Defaults to 80. The port this server will be listening on. This value must be a valid
port, ranging between 1 and 65535 (inclusive)

| tls.keystoreURL
| Keystore to be used for generating authentication tokens for password authentication mechanism.
This should not be the same keystore than the ones used by TLS based protocols.

| tls.secret
| Password used to read the keystore

| jwt.publickeypem.url
| Optional. Coma separated list of RSA public keys URLs to validate JWT tokens allowing requests to bypass authentication.
Defaults to an empty list.

| url.prefix
| Optional. Configuration urlPrefix for JMAP routes. Default value: http://localhost.

| websocket.url.prefix
| Optional. URL for JMAP WebSocket route. Default value: ws://localhost

| email.send.max.size
| Optional. Configuration max size for message created in both JMAP Draft amd RFC-8621.
Default value: None. Supported units are B (bytes) K (KB) M (MB) G (GB).

| max.size.attachments.per.mail
| Optional. Defaults to 20MB. RFC-8621 `maxSizeAttachmentsPerEmail` advertised to JMAP client as part of the
`urn:ietf:params:jmap:mail` capability. This needs to be at least 33% lower than `email.send.max.size` property
(in order to account for text body, headers, base64 encoding and MIME structures).
JMAP clients would use this property in order not to create too big emails.
Default value: None. Supported units are B (bytes) K (KB) M (MB) G (GB).

| upload.max.size

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailrepositorystore.adoc
=====================================================
= Distributed James Server &mdash; mailrepositorystore.xml

A `mail repository` allows storage of a mail as part of its
processing. Standard configuration relies on the following mail
repository.

A mail repository is identified by its *url*, constituted of a *protocol* and a *path*.

For instance in the url `cassandra://var/mail/error/` `cassandra` is the protocol and `var/mail/error` the path.

The *mailrepositorystore.xml* file allows registration of available protocols, and their binding to actual MailRepository
implementation. Note that extension developers can write their own MailRepository implementations, load them via the
`extensions-jars` mechanism as documented in xref:extending/index.adoc['writing your own extensions'], and finally
associated to a protocol in *mailrepositorystore.xml* for a usage in *mailetcontainer.xml*.

== Configuration

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/mailrepositorystore.xml[example]
to get some examples and hints.

....
<mailrepositorystore>
    <defaultProtocol>cassandra</defaultProtocol>
    <mailrepositories>
        <mailrepository class="org.apache.james.mailrepository.cassandra.CassandraMailRepository">
            <protocols>
                <protocol>cassandra</protocol>
            </protocols>
        </mailrepository>
    </mailrepositories>
</mailrepositorystore>
....

Only the *CassandraMailRepository* is available by default for the Distributed Server. Mails metadata are stored in
Cassandra while the headers and bodies are stored within the xref:architecture/index.adoc#_blobstore[BlobStore].

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/collecting-contacts.adoc
=====================================================
= Contact collection

== Motivation

Many modern applications combines email and contacts.

We want recipients of emails sent by a user to automatically be added to this user contacts, for convenience. This
should even be performed when a user sends emails via SMTP for example using thunderbird.

== Design

The idea is to send AMQP messages holding information about mail envelope for a traitment via a tierce application.

== Configuration

We can achieve this goal by combining simple mailets building blocks.

Here is a sample pipeline achieving aforementioned objectives :

....
<mailet match="SenderIsLocal" class="ContactExtractor">
    <attribute>extractedContacts</attribute>
</mailet>
<mailet match="All" class="AmqpForwardAttribute">
    <uri>amqp://${env:JAMES_AMQP_USERNAME}:${env:JAMES_AMQP_PASSWORD}@${env:JAMES_AMQP_HOST}:${env:JAMES_AMQP_PORT}</uri>
    <exchange>collector:email</exchange>
    <attribute>extractedContacts</attribute>
</mailet>

....

A sample message looks like:

....
{
	"userEmail": "sender@james.org",
	"emails": ["to@james.org"]
}
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/search.adoc
=====================================================
= Distributed James Server &mdash; Search configuration
:navtitle: Search configuration

This configuration helps you configure the components used to back search.

.search.properties content
|===
| Property name | explanation

| implementation
| The implementation to be used for search. Should be one of:
 - *opensearch* : Index and search mails into OpenSearch.
 - *scanning* : Do not index documents and perform scanning search, scrolling mailbox for matching contents.
 This implementation can have a prohibitive cost.
 - *opensearch-disabled* : Saves events to index into event dead letter. Make searches fails.
 This is useful to start James without OpenSearch while still tracking messages to index for later recovery. This
 can be used in order to ease delays for disaster recovery action plans.
|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/blobstore.adoc
=====================================================
= Distributed James Server &mdash; blobstore.properties
:navtitle: blobstore.properties

== BlobStore

This file is optional. If omitted, the *cassandra* blob store will be used.

BlobStore is the dedicated component to store blobs, non-indexable content.
James uses the BlobStore for storing blobs which are usually mail contents, attachments, deleted mails...

You can choose the underlying implementation of BlobStore to fit with your James setup.

It could be the implementation on top of Cassandra or file storage service S3 compatible like Openstack Swift and AWS S3.

Consult link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/blob.properties[blob.properties]
in GIT to get some examples and hints.

=== Implementation choice

*implementation* :

* cassandra: use cassandra based BlobStore
* objectstorage: use Swift/AWS S3 based BlobStore
* file: (experimental) use directly the file system. Useful for legacy architecture based on shared ISCI SANs and/or
 distributed file system with no object store available.

WARNING: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
Alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)

The generated startup warning log can be deactivated via the `cassandra.blob.store.disable.startup.warning` environment
variable being positioned to `false`.

*deduplication.enable*: Mandatory. Supported value: true and false.

If you choose to enable deduplication, the mails with the same content will be stored only once.

WARNING: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
the mails sharing the same content once one is deleted.

NOTE: If you are upgrading from James 3.5 or older, the deduplication was enabled.

Deduplication requires a garbage collector mechanism to effectively drop blobs. A first implementation
based on bloom filters can be used and triggered using the WebAdmin REST API. See
xref:operate/webadmin.adoc#_running_blob_garbage_collection[Running blob garbage collection].

In order to avoid concurrency issues upon garbage collection, we slice the blobs in generation, the two more recent
generations are not garbage collected.

*deduplication.gc.generation.duration*: Allow controlling the duration of one generation. Longer implies better deduplication
but deleted blobs will live longer. Duration, defaults on 30 days, the default unit is in days.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/extensions.adoc
=====================================================
= Distributed James Server &mdash; extensions.properties
:navtitle: extensions.properties

This files enables an operator to define additional bindings used to instantiate others extensions

*guice.extension.module*:  come separated list of fully qualified class name. These classes need to implement Guice modules.

Here is an example of such a class :

....
public class MyServiceModule extends AbstractModule {
    @Override
    protected void configure() {
        bind(MyServiceImpl.class).in(Scopes.SINGLETON);
        bind(MyService.class).to(MyServiceImpl.class);
    }
}
....

Recording it in extensions.properties :

....
guice.extension.module=com.project.MyServiceModule
....

Enables to inject MyService into your extensions.


*guice.extension.tasks*: come separated list of fully qualified class name.

The extension can rely on the Task manager to supervise long-running task execution (progress, await, cancellation, scheduling...).
These extensions need to implement Task extension modules.

Here is an example of such a class :

....
public class RspamdTaskExtensionModule implements TaskExtensionModule {

    @Inject
    public RspamdTaskExtensionModule() {
    }

    @Override
    public Set<TaskDTOModule<? extends Task, ? extends TaskDTO>> taskDTOModules() {
        return Set.of(...);
    }

    @Override
    public Set<AdditionalInformationDTOModule<? extends TaskExecutionDetails.AdditionalInformation, ? extends AdditionalInformationDTO>> taskAdditionalInformationDTOModules() {
        return Set.of(...);

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/sieve.adoc
=====================================================
= Sieve
:navtitle: Sieve

James servers are able to evaluate and execute Sieve scripts.

Sieve is an extensible mail filtering language. It's limited
expressiveness (no loops or variables, no tests with side
effects) allows user created scripts to be run safely on email
servers. Sieve is targeted at the final delivery phase (where
an incoming email is transferred to a user's mailbox).

The following Sieve capabilities are supported by Apache James:

  - link:https://www.ietf.org/rfc/rfc2234.txt[RFC 2234 ABNF]
  - link:https://www.ietf.org/rfc/rfc2244.txt[RFC 2244 ACAP]
  - link:https://www.ietf.org/rfc/rfc2298.txt[RFC 2298 MDN]
  - link:https://tools.ietf.org/html/rfc5228[RFC 5228 Sieve]
  - link:https://tools.ietf.org/html/rfc4790[RFC 4790 IAPCR]
  - link:https://tools.ietf.org/html/rfc5173[RFC 5173 Body Extension]
  - link:https://datatracker.ietf.org/doc/html/rfc5230[RFC 5230 Vacations]

To be correctly executed, please note that the *Sieve* mailet is required to be positioned prior the
*LocalDelivery* mailet.

== Managing Sieve scripts

A user willing to manage his Sieve scripts on the server can do so via several means:

He can ask an admin to upload his script via the xref:operate/cli.adoc[CLI]

As James supports ManageSieve (link:https://datatracker.ietf.org/doc/html/rfc5804[RFC-5804]) a user
can thus use compatible software to manage his Sieve scripts.</p>

== ManageSieve protocol

*WARNING*: ManageSieve protocol should be considered experimental.

Consult link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/managesieveserver.xml[managesieveserver.xml]
in GIT to get some examples and hints.

The  service is controlled by a configuration block in the managesieveserver.xml.
The managesieveserver tag defines the boundaries of the configuration block.  It encloses
all the relevant configuration for the ManageSieve server.  The behavior of the ManageSieve service is
controlled by the attributes and children of this tag.

This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "false" if
not present.

The standard children of the managesieveserver tag are:

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/listeners.adoc
=====================================================
= Distributed James Server &mdash; listeners.xml
:navtitle: listeners.xml

Distributed James relies on an event bus system to enrich mailbox capabilities. Each
operation performed on the mailbox will trigger related events, that can
be processed asynchronously by potentially any James node on a
distributed system.

Mailbox listeners can register themselves on this event bus system to be
called when an event is fired, allowing to do different kind of extra
operations on the system.

Distributed James allows the user to register potentially user defined additional mailbox listeners.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/listener.xml[example]
to get some examples and hints.

== Configuration

The <executeGroupListeners> controls whether to launch group mailbox listener consumption. Defaults to true. Use with caution:
never disable on standalone james servers, and ensure at least some instances do consume group mailbox listeners within a
clustered topology.

Mailbox listener configuration is under the XML element <listener>.

Some MailboxListener allows you to specify if you want to run them synchronously or asynchronously. To do so,
for MailboxListener that supports this, you can use the *async* attribute (optional, per mailet default) to govern the execution mode.
If *true* the execution will be scheduled in a reactor elastic scheduler. If *false*, the execution is synchronous.

Already provided additional listeners are documented below.

=== SpamAssassinListener

Provides per user real-time HAM/SPAM feedback to a SpamAssassin server depending on user actions.

This mailet is asynchronous by default, but this behaviour can be overridden by the *async*
configuration property.

This MailboxListener is supported.

Example:

....
<listeners>
  <!-- ... -->
  <listener>
    <class>org.apache.james.mailbox.spamassassin.SpamAssassinListener</class>
  </listener>
</listeners>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/vault.adoc
=====================================================
= Distributed James Server &mdash; deletedMessageVault.properties
:navtitle: deletedMessageVault.properties

Deleted Messages Vault is the component in charge of retaining messages before they are going to be deleted.
Messages stored in the Deleted Messages Vault could be deleted after exceeding their retentionPeriod (explained below).
It also supports to restore or export messages matching with defined criteria in
xref:operate/webadmin.adoc#_deleted_messages_vault[WebAdmin deleted messages vault document] by using
xref:operate/webadmin.adoc#_deleted_messages_vault[WebAdmin endpoints].

== Deleted Messages Vault Configuration

Once the vault is active, James will start moving deleted messages to it asynchronously.

The Deleted Messages Vault also stores and manages deleted messages into a BlobStore. The BlobStore can be either
based on an object storage or on Cassandra. For configuring the BlobStore the vault will use, you can look at
xref:configure/blobstore.adoc[*blobstore.properties*] BlobStore Configuration section.

== deletedMessageVault.properties

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/deletedMessageVault.properties[example]
to get some examples and hints.

.deletedMessageVault.properties content
|===
| Property name | explanation

| retentionPeriod
| Deleted messages stored in the Deleted Messages Vault are expired after this period (default: 1 year). It can be expressed in *y* years, *d* days, *h* hours, ...

| restoreLocation
| Messages restored from the Deleted Messages Vault are placed in a mailbox with this name (default: ``Restored-Messages``). The mailbox will be created if it does not exist yet.
|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/imap.adoc
=====================================================
= Distributed James Server &mdash; imapserver.xml
:navtitle: imapserver.xml

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/imapserver.xml[example]
to get some examples and hints.

The IMAP4 service is controlled by a configuration block in the imap4server.xml.
The imap4server tag defines the boundaries of the configuration block.  It encloses
all the relevant configuration for the IMAP4 server.  The behavior of the IMAP4 service is
controlled by the attributes and children of this tag.

This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "true" if not present.

The standard children of the imapserver tag are:

.imapserver.xml content
|===
| Property name | explanation

| bind
| Configure this to bind to a specific inetaddress. This is an optional integer value.  This value is the port on which this IMAP4 server is configured
to listen. If the tag or value is absent then the service
will bind to all network interfaces for the machine If the tag or value is omitted, the value will default to the standard IMAP4 port
port 143 is the well-known/IANA registered port for IMAP
port 993 is the well-known/IANA registered port for IMAPS  ie over SSL/TLS

| connectionBacklog
| Number of connection backlog of the server (maximum number of queued connection requests)

| compress
| true or false - Use or don't use COMPRESS extension. Defaults to false.

| maxLineLength
| Maximal allowed line-length before a BAD response will get returned to the client
This should be set with caution as a to high value can make the server a target for DOS (Denial of Service)!

| inMemorySizeLimit
| Optional. Size limit before we will start to stream to a temporary file.
Defaults to 10MB. Must be a positive integer, optionally with a unit: B, K, M, G.

| literalSizeLimit
| Optional. Maximum size of a literal (IMAP APPEND).
Defaults to 0 (unlimited). Must be a positive integer, optionally with a unit: B, K, M, G.

| plainAuthDisallowed
|  Deprecated. Should use `auth.plainAuthEnabled`, `auth.requireSSL` instead.
Whether to enable Authentication PLAIN if the connection is not encrypted via SSL or STARTTLS. Defaults to `true`.

| auth.plainAuthEnabled

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/ssl.adoc
=====================================================
= Distributed James Server &mdash; SSL & TLS configuration
:navtitle: SSL & TLS configuration

This document explains how to enable James 3.0 servers to use Transport Layer Security (TLS)
for encrypted client-server communication.

== Configure a Server to Use SSL/TLS

Each of the servers xref:configure/smtp.adoc[SMTP - LMTP],
xref:configure/pop3.adoc[POP3] and xref:configure/imap.adoc[IMAP]
supports use of SSL/TLS.

TLS (Transport Layer Security) and SSL (Secure Sockets Layer) are protocols that provide
data encryption and authentication between applications in scenarios where that data is
being sent across an insecure network, such as checking your email
(How does the Secure Socket Layer work?). The terms SSL and TLS are often used
interchangeably or in conjunction with each other (TLS/SSL),
but one is in fact the predecessor of the other — SSL 3.0 served as the basis
for TLS 1.0 which, as a result, is sometimes referred to as SSL 3.1.

You need to add a block in the corresponding configuration file (smtpserver.xml, pop3server.xml, imapserver.xml,..)

....
<tls socketTLS="false" startTLS="true">
  <keystore>file://conf/keystore</keystore>
  <keystoreType>PKCS12</keystoreType>
  <secret>yoursecret</secret>
  <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>
....

Alternatively TLS keys can be supplied via PEM files:

....
<tls socketTLS="true" startTLS="false">
  <privateKey>file://conf/private.key</privateKey>
  <certificates>file://conf/certs.self-signed.csr</certificates>
</tls>
....

An optional secret might be specified for the private key:

....
<tls socketTLS="true" startTLS="false">
  <privateKey>file://conf/private.key</privateKey>
  <certificates>file://conf/certs.self-signed.csr</certificates>
  <secret>yoursecret</secret>
</tls>
....


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/smtp.adoc
=====================================================
= Distributed James Server &mdash; smtpserver.xml
:navtitle: smtpserver.xml

== Incoming SMTP

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/smtpserver.xml[example]
to get some examples and hints.

The SMTP service is controlled by a configuration block in the smptserver.xml.
The smtpserver tag defines the boundaries of the configuration block.  It encloses
all the relevant configuration for the SMTP server. The behavior of the SMTP service is
controlled by the attributes and children of this tag.

This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.  The value defaults to "true" if
not present.

The standard children of the smtpserver tag are:

.smtpserver.xml content
|===
| Property name | explanation

| bind
| A list of address:port separed by comma - This is an optional value.  If present, this value is a string describing
the IP address to which this service should be bound.  If the tag or value is absent then the service
will bind to all network interfaces for the machine on port 25. Port 25 is the well-known/IANA registered port for SMTP.
Port 465 is the well-known/IANA registered port for SMTP over TLS.

| connectBacklog
|The IP address (host name) the MBean Server will bind/listen to.

| tls
| Set to true to support STARTTLS or SSL for the Socket.
To use this you need to copy sunjce_provider.jar to /path/james/lib directory. To create a new keystore execute:
`keytool -genkey -alias james -keyalg RSA -storetype PKCS12 -keystore /path/to/james/conf/keystore`.
The algorithm is optional and only needs to be specified when using something other
than the Sun JCE provider - You could use IbmX509 with IBM Java runtime.
Please note that each SMTP/LMTP server exposed on different port can specify its own keystore, independently from any other
TLS based protocols.

| helloName
| This is a required tag with an optional body that defines the server name
used in the initial service greeting.  The tag may have an optional attribute - *autodetect*.  If
the autodetect attribute is present and true, the service will use the local hostname
returned by the Java libraries.  If autodetect is absent or false, the body of the tag will be used.  In
this case, if nobody is present, the value "localhost" will be used.

| connectionTimeout
| This is an optional tag with a non-negative integer body. Connection timeout in seconds.


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/mailetcontainer.adoc
=====================================================
= Distributed James Server &mdash; mailetcontainer.xml
:navtitle: mailetcontainer.xml

This documents explains how to configure Mail processing. Mails pass through the MailetContainer. The
MailetContainer is a Matchers (condition for executing a mailet) and Mailets (execution units that perform
actions based on incoming mail) pipeline arranged into processors (List of mailet/matcher pairs allowing
better logical organisation). You can read more about these concepts on
xref:architecture/index.adoc#_mail_processing[the mailet container feature description].

Apache James Server includes a number of xref:configure/mailets.adoc[Packaged Mailets] and
xref:configure/matchers.adoc[Packaged Matchers].

Furthermore, you can write and use with James xref:extending/mail-processing.adoc[your own mailet and matchers].

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/mailetcontainer.xml[example]
to get some examples and hints.

.mailetcontainer.xml content
|===
| Property name | explanation

| context.postmaster
| The body of this element is the address that the server
will consider its postmaster address.  This address will be listed as the sender address
of all error messages that originate from James.  Also, all messages addressed to
postmaster@<servername>, where <servername> is one of the domain names whose
mail is being handled by James, will be redirected to this email address.
Set this to the appropriate email address for error reports
If this is set to a non-local email address, the mail server
will still function, but will generate a warning on startup.

| spooler.threads
| Number of simultaneous threads used to spool the mails. Set to zero, it disables mail processing - use with
caution.

| spooler.errorRepository
| Mail repository to store email in after several unrecoverable errors. Mails failing processing, for which
the Mailet Container could not handle Error, will be stored there after their processing had been attempted
5 times. Note that if standard java Exception occurs, *Error handling* section below will be applied
instead.
|===

== The Mailet Tag

Consider the following simple *mailet* tag:</p>

....
<mailet match="RemoteAddrNotInNetwork=127.0.0.1" class="ToProcessor">
    <processor>spam</processor>
</mailet>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc
=====================================================
= Distributed James Server &mdash; webadmin.properties
:navtitle: webadmin.properties

The web administration supports for now the CRUD operations on the domains, the users, their mailboxes and their quotas,
managing mail repositories, performing cassandra migrations, and much more, as described in the following sections.

*WARNING*: This API allows authentication only via the use of JWT. If not
configured with JWT, an administrator should ensure an attacker can not
use this API.

By the way, some endpoints are not filtered by authentication. Those endpoints are not related to data stored in James,
for example: Swagger documentation & James health checks.

== Configuration

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/webadmin.properties[example]
to get some examples and hints.

.webadmin.properties content
|===
| Property name | explanation

| enabled
| Define if WebAdmin is launched (default: false)

| port
| Define WebAdmin's port (default: 8080)

| host
| Define WebAdmin's host (default: localhost, use 0.0.0.0 to listen on all addresses)

| cors.enable
| Allow the Cross-origin resource sharing (default: false)

| cors.origin
| Specify ths CORS origin (default: null)

| jwt.enable
| Allow JSON Web Token as an authentication mechanism (default: false)

| https.enable
| Use https (default: false)

| https.keystore
| Specify a keystore file for https (default: null)

| https.password
| Specify the keystore password (default: null)

| https.trust.keystore

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/recipientrewritetable.adoc
=====================================================
= Distributed James Server &mdash; recipientrewritetable.xml
:navtitle: recipientrewritetable.xml

Here are explanations on the different kinds about xref:architecture/index.adoc#_recipient_rewrite_tables[recipient rewriting].

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/recipientrewritetable.xml[example]
to get some examples and hints.

.recipientrewritetable.xml
|===
| Property name | explanation

| recursiveMapping
| If set to false only the first mapping will get processed - Default true.

| mappingLimit
|By setting the mappingLimit you can specify how much mapping will get processed before a bounce will send. This avoids infinity loops. Default 10.
|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/rabbitmq.adoc
=====================================================
= Distributed James Server &mdash; rabbitmq.properties
:navtitle: rabbitmq.properties

This configuration helps you configure components using RabbitMQ.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[example]
to get some examples and hints.

== RabbitMQ Configuration

.rabbitmq.properties content
|===
| Property name | explanation

| uri
| the amqp URI pointing to RabbitMQ server. If you use a vhost, specify it as well at the end of the URI.
Details about amqp URI format is in https://www.rabbitmq.com/uri-spec.html[RabbitMQ URI Specification]

| management.uri
| the URI pointing to RabbitMQ Management Service. James need to retrieve some information about listing queues
from this service in runtime.
Details about URI format is in https://www.rabbitmq.com/management.html#usage-ui[RabbitMQ Management URI]

| management.user
| username used to access management service

| management.password
| password used to access management service

| connection.pool.retries
| Configure retries count to retrieve a connection. Exponential backoff is performed between each retries.
Optional integer, defaults to 10

| connection.pool.min.delay.ms
| Configure initial duration (in ms) between two connection retries. Exponential backoff is performed between each retries.
Optional integer, defaults to 100

| channel.pool.retries
| Configure retries count to retrieve a channel. Exponential backoff is performed between each retries.
Optional integer, defaults to 3

| channel.pool.max.delay.ms
| Configure timeout duration (in ms) to obtain a rabbitmq channel. Defaults to 30 seconds.
Optional integer, defaults to 30 seconds.

| channel.pool.size
| Configure the size of the channel pool.
Optional integer, defaults to 3

| ssl.enabled

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/spam.adoc
=====================================================
= Distributed James Server &mdash; Anti-Spam configuration
:navtitle: Anti-Spam configuration

Anti-Spam system can be configured via two main different mechanisms:

* SMTP Hooks;
* Mailets;

== AntiSpam SMTP Hooks

"FastFail" SMTP Hooks acts to reject before spooling
on the SMTP level. The Spam detector hook can be used as a fastfail hook, therefore
Spam filtering system must run as a server on the same machine as the Apache James Server.

SMTP Hooks for non-existent users, DSN filter, domains with invalid MX record,
can also be configured.

*SpamAssassinHandler* (experimental) also enables to classify the messages as spam or not
with a configurable score threshold (`0.0`, non-configurable). Only a global database is supported. Per user spam
detection is not supported by this hook.

== AntiSpam Mailets

James' repository provide two AntiSpam mailets: SpamAssassin and RspamdScanner.
We can select one in them for filtering spam mail.

* *SpamAssassin and RspamdScanner* Mailet is designed to classify the messages as spam or not
with a configurable score threshold. Usually a message will only be
considered as spam if it matches multiple criteria; matching just a single test
will not usually be enough to reach the threshold. Note that this mailet is executed on a per-user basis.

=== Rspamd

The Rspamd extension (optional) requires an extra configuration file `rspamd.properties` to configure RSpamd connection

.rspamd.properties content
|===
| Property name | explanation

| rSpamdUrl
| URL defining the Rspamd's server. Eg: http://rspamd:11334

| rSpamdPassword
| Password for pass authentication when request to Rspamd's server. Eg: admin

| rspamdTimeout
| Integer. Timeout for http requests to Rspamd. Default to 15 seconds.

| perUserBayes
| Boolean. Whether to scan/learn mails using per-user Bayes. Default to false.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/remote-delivery-error-handling.adoc
=====================================================
= Distributed James Server &mdash; About RemoteDelivery error handling
:navtitle: About RemoteDelivery error handling

The advanced server mailQueue implemented by combining RabbitMQ for messaging and Cassandra for administrative operation
does not support delays.

Delays are an important feature for Mail Exchange servers, allowing to defer in time the retries, potentially letting the
time for the remote server to recover. Furthermore, they enable implementation of advanced features like throttling and
rate limiting of emails sent to a given domain.

As such, the use of the distributed server as a Mail Exchange server is currently discouraged.

However, for operators willing to inter-operate with a limited set of well-identified, trusted remote mail servers, such
limitation can be reconsidered. The main concern then become error handling for remote mail server failures. The following
document will present a well tested strategy for Remote Delivery error handling leveraging standards Mail Processing components
and mechanisms.

== Expectations

Such a solution should:

- Attempt delivery a single time
- Store transient and permanent failure in different mail repositories
- After a given number of tries, transient failures should be considered permanent

== Design

image::remote-delivery-error-handling.png[Schema detailing the proposed solution]

- Remote Delivery is configured for performing a single retry.
- Remote Delivery attaches the error code and if the failure is permanent/temporary when transferring failed emails to the
bounce processor.
- The specified bounce processor will categorise the failure, and store temporary and permanent failures in different
mail repositories.
- A reprocessing of the temporary delivery errors mailRepository needs to be scheduled in a recurring basis. For
instance via a CRON job calling the right webadmin endpoint.
- A counter ensures that a configured number of delivery tries is not exceeded.

=== Limitation

MailRepositories are not meant for transient data storage, and thus are prone to tombstone issues.

This might be acceptable if you need to send mail to well-known peers. For instance handling your mail gateway failures.
However a Mail Exchange server doing relay on the internet would quickly hit this limitation.

Also note that external triggering of the retry process is needed.

== Operation

Here is an example of configuration achieving the proposed solution:

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/index.adoc
=====================================================
= Distributed James Server &mdash; Configuration
:navtitle: Configuration

This section presents how to configure the Distributed server.

The Distributed Server relies on separated files for configuring various components. Some files follow a *xml* format
and some others follow a *property* format. Some files can be omitted, in which case the functionality can be disabled,
or rely on reasonable defaults.

The following configuration files are exposed:

== For protocols

By omitting these files, the underlying protocols will be disabled.

** xref:configure/imap.adoc[*imapserver.xml*] allows configuration for the IMAP protocol link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/imapserver.xml[example]
** xref:configure/jmap.adoc[*jmap.properties*] allows to configure the JMAP protocol link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/jmap.properties[example]
** xref:configure/jmx.adoc[*jmx.properties*] allows configuration of JMX being used by the Command Line Interface link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/jmx.properties[example]
** xref:configure/smtp.adoc#_lmtp_configuration[*lmtpserver.xml*] allows configuring the LMTP protocol link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/lmtpserver.xml[example]
** *managesieveserver.xml* allows configuration for ManagedSieve (unsupported) link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/managesieveserver.xml[example]
** xref:configure/pop3.adoc[*pop3server.xml*] allows configuration for the POP3 protocol (experimental) link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/pop3server.xml[example]
** xref:configure/smtp.adoc[*smtpserver.xml*] allows configuration for the SMTP protocol link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/smtpserver.xml[example]
*** xref:configure/smtp-hooks.adoc[This page] list SMTP hooks that can be used out of the box with the Distributed Server.
** xref:configure/webadmin.adoc[*webadmin.properties*] enables configuration for the WebAdmin protocol link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/webadmin.properties[example]
** xref:configure/ssl.adoc[This page] details SSL & TLS configuration.
** xref:configure/sieve.adoc[This page] details Sieve setup and how to enable ManageSieve.

== For storage dependencies

Except specific documented cases, these files are required, at least to establish a connection with the storage components.

** xref:configure/blobstore.adoc[*blobstore.properties*] allows to configure the BlobStore link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/blob.properties[example]
** xref:configure/cassandra.adoc[*cassandra.properties*] allows to configure the Cassandra driver link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/cassandra.properties[example]
** xref:configure/opensearch.adoc[*opensearch.properties*] allows to configure OpenSearch driver link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/opensearch.properties[example]
** xref:configure/rabbitmq.adoc[*rabbitmq.properties*] allows configuration for the RabbitMQ driver link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/rabbitmq.properties[example]
** xref:configure/redis.adoc[*redis.properties*] allows configuration for the Redis driver link:https://github.com/apache/james-project/blob/fabfdf4874da3aebb04e6fe4a7277322a395536a/server/mailet/rate-limiter-redis/redis.properties[example], that is used by optional
distributed rate limiting component.
** xref:configure/tika.adoc[*tika.properties*] allows configuring Tika as a backend for text extraction link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/tika.properties[example]

== For core components

By omitting these files, sane default values are used.

** xref:configure/batchsizes.adoc[*batchsizes.properties*] allows to configure mailbox read batch sizes link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/batchsizes.properties[example]
** xref:configure/dns.adoc[*dnsservice.xml*] allows to configure DNS resolution link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/dnsservice.xml[example]
** xref:configure/domainlist.adoc[*domainlist.xml*] allows to configure Domain storage link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/domainlist.xml[example]
** xref:configure/healthcheck.adoc[*healthcheck.properties*] allows to configure periodical healthchecks link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/healthcheck.properties[example]
** xref:configure/mailetcontainer.adoc[*mailetcontainer.xml*] allows configuring mail processing link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/mailetcontainer.xml[example]
*** xref:configure/mailets.adoc[This page] list matchers that can be used out of the box with the Distributed Server.
*** xref:configure/matchers.adoc[This page] list matchers that can be used out of the box with the Distributed Server.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/dns.adoc
=====================================================
= Distributed James Server &mdash; dnsservice.xml
:navtitle: dnsservice.xml

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/dnsservice.xml[example]
to get some examples and hints.

Specifies DNS Server information for use by various components inside Apache James Server.

DNS Transport services are controlled by a configuration block in
the dnsservice.xml. This block affects SMTP remote delivery.

The dnsservice tag defines the boundaries of the configuration
block. It encloses all the relevant configuration for the DNS server.
The behavior of the DNS service is controlled by the attributes and
children of this tag.

.dnsservice.xml content
|===
| Property name | explanation

| servers
| Information includes a list of DNS Servers to be used by James.  These are
specified by the server elements, each of which is a child element of the
servers element.  Each server element is the IP address of a single DNS server.
The server elements can have multiple server children. Enter ip address of your DNS server, one IP address per server
element. If no DNS servers are found and you have not specified any below, 127.0.0.1 will be used

| autodiscover
| true or false -  If you use autodiscover and add DNS servers manually a combination of all the DNS servers will be used.
If autodiscover is true, James will attempt to autodiscover the DNS servers configured on your underlying system.
Currently, this works if the OS has a unix-like /etc/resolv.xml,
or the system is Windows based with ipconfig or winipcfg. Change autodiscover to false if you would like to turn off autodiscovery
and set the DNS servers manually in the servers section

| authoritative
| *true/false* - This tag specifies whether or not
to require authoritative (non-cached) DNS records; to only accept DNS responses that are
authoritative for the domain. It is primarily useful in an intranet/extranet environment.
This should always be *false* unless you understand the implications.

| maxcachesize
| Maximum number of entries to maintain in the DNS cache (typically 50000)

| negativeCacheTTL
| Sets the maximum length of time that negative records will be stored in the DNS negative cache in
seconds (a negative record means the name has not been found in the DNS). Values for this cache
can be positive meaning the time in seconds before retrying to resolve the name, zero meaning no
cache or a negative value meaning infinite caching.

| singleIPperMX

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/redis.adoc
=====================================================
= Distributed James Server &mdash; redis.properties
:navtitle: redis.properties

This configuration helps you configure components using Redis. This so far only includes optional rate limiting component.

Consult this link:https://github.com/apache/james-project/blob/fabfdf4874da3aebb04e6fe4a7277322a395536a/server/mailet/rate-limiter-redis/redis.properties[example]
to get some examples and hints.

== Redis Configuration

.redis.properties content
|===
| Property name | explanation

| redisURL
| the Redis URI pointing to Redis server. Compulsory.

| cluster.enabled
| Whether we should attempt connections to Redis as a cluster.Defaults to false.

| redis.ioThreads
| IO threads to be using for the underlying Netty networking resources. If unspecified driver defaults applies.

| redis.workerThreads
| Worker threads to be using for the underlying driver. If unspecified driver defaults applies.
|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/healthcheck.adoc
=====================================================
= Distributed James Server &mdash; healthcheck.properties
:navtitle: healthcheck.properties

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/healthcheck.properties[example]
to get some examples and hints.

Use this configuration to define the initial delay and period for the PeriodicalHealthChecks. It is only applicable with Guice products.

.healthcheck.properties content
|===
| Property name | explanation

| healthcheck.period
| Define the period between two periodical health checks (default: 60s). Units supported are (ms - millisecond, s - second, m - minute, h - hour, d - day). Default unit is millisecond.

| reception.check.user
| User to be using for running the "mail reception" health check. The user must exist.
If not specified, the mail reception check is a noop.

| reception.check.timeout
| Period after which mail reception is considered faulty. Defaults to one minute.

| additional.healthchecks
| List of fully qualified HealthCheck class names in addition to James' default healthchecks. Default to empty list.
|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/usersrepository.adoc
=====================================================
= Distributed James Server &mdash; usersrepository.xml
:navtitle: usersrepository.xml

User repositories are required to store James user information and authentication data.

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/usersrepository.xml[example]
to get some examples and hints.

== The user data model

A user has two attributes: username and password.

A valid user should satisfy these criteria:

* username and password cannot be null or empty
* username should not be longer than 255 characters
* username can not contain '/'
* username can not contain multiple domain delimiter('@')
* A username can have only a local part when virtualHosting is disabled. E.g.'myUser'
* When virtualHosting is enabled, a username should have a domain part, and the domain part should be concatenated
after a domain delimiter('@'). E.g. 'myuser@james.org'

A user is always considered as lower cased, so 'myUser' and 'myuser' are the same user, and can be used as well as
recipient local part than as login for different protocols.

== Configuration

.usersrepository.xml content
|===
| Property name | explanation

| enableVirtualHosting
| true or false. Add domain support for users (default: false, except for Cassandra Users Repository)

| administratorId
|user's name. Allow a user to access to the https://tools.ietf.org/html/rfc4616#section-2[impersonation command],
acting on the behalf of any user.

| verifyFailureDelay
| Delay after a failed authentication attempt with an invalid user name or password. Duration string defaulting to seconds, e.g. `2`, `2s`, `2000ms`. Default `0s` (disabled).

| algorithm
| use a specific hash algorithm to compute passwords, with optional mode `plain` (default) or `salted`; e.g. `SHA-512`,  `SHA-512/plain`, `SHA-512/salted`, `PBKDF2`, `PBKDF2-SHA512` (default).
Note: When using `PBKDF2` or `PBKDF2-SHA512` one can specify the iteration count and the key size in bytes. You can specify it as part of the algorithm. EG: `PBKDF2-SHA512-2000-512` will use
2000 iterations with a key size of 512 bytes.

| hashingMode
| specify the hashing mode to use if there is none recorded in the database: `plain` (default) for newer installations or `legacy` for older ones

|===

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/opensearch.adoc
=====================================================
= Distributed James Server &mdash; opensearch.properties
:navtitle: opensearch.properties

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/opensearch.properties[example]
to get some examples and hints.

If you want more explanation about OpenSearch configuration, you should visit the dedicated https://opensearch.org/[documentation].

== OpenSearch Configuration

This file section is used to configure the connection tp an OpenSearch cluster.

Here are the properties allowing to do so :

.opensearch.properties content
|===
| Property name | explanation

| opensearch.clusterName
| Is the name of the cluster used by James.

| opensearch.nb.shards
| Number of shards for index provisionned by James

| opensearch.nb.replica
| Number of replica for index provisionned by James (default: 0)

| opensearch.index.waitForActiveShards
| Wait for a certain number of active shard copies before proceeding with the operation. Defaults to 1.
You may consult the https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docs-index_.html#active-shards[documentation] for more information.

| opensearch.retryConnection.maxRetries
| Number of retries when connecting the cluster

| opensearch.retryConnection.minDelay
| Minimum delay between connection attempts

| opensearch.max.connections
| Maximum count of HTTP connections allowed for the OpenSearch driver. Optional integer, if unspecified driver defaults
applies (30 connections).

| opensearch.max.connections.per.hosts
| Maximum count of HTTP connections per host allowed for the OpenSearch driver. Optional integer, if unspecified driver defaults
applies (10 connections).

|===

=== Mailbox search

The main use of OpenSearch within the Distributed Server is indexing the mailbox content of users in order to enable

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/pages/configure/pop3.adoc
=====================================================
= Distributed James Server &mdash; pop3server.xml
:navtitle: pop3server.xml

Consult this link:https://github.com/apache/james-project/blob/master/server/apps/distributed-app/sample-configuration/pop3server.xml[example]
to get some examples and hints.

The POP3 service is controlled by a configuration block in the pop3server.xml.
The pop3server tag defines the boundaries of the configuration block.  It encloses
all the relevant configuration for the POP3 server.  The behavior of the POP service is
controlled by the attributes and children of this tag.

This tag has an optional boolean attribute - *enabled* - that defines whether the service is active or not.
The value defaults to "true" if not present.

The standard children of the pop3server tag are:

.jmx.properties content
|===
| Property name | explanation

| bind
| Configure this to bind to a specific inetaddress. This is an optional integer value.
This value is the port on which this POP3 server is configured
to listen. If the tag or value is absent then the service
will bind to all network interfaces for the machine If the tag or value is omitted,
the value will default to the standard POP3 port, 11
port 995 is the well-known/IANA registered port for POP3S  ie over SSL/TLS
port 110 is the well-known/IANA registered port for Standard POP3

| connectionBacklog
|

| tls
| Set to true to support STARTTLS or SSL for the Socket.
To create a new keystore execute:
`keytool -genkey -alias james -keyalg RSA -storetype PKCS12 -keystore /path/to/james/conf/keystore`
Please note that each POP3 server exposed on different port can specify its own keystore, independently from any other
TLS based protocols. Read xref:configure/ssl.adoc[SSL configuration page] for more information.

| handler.helloName
| This is the name used by the server to identify itself in the POP3
protocol.  If autodetect is TRUE, the server will discover its
own host name and use that in the protocol.  If discovery fails,
the value of 'localhost' is used.  If autodetect is FALSE, James
will use the specified value.

| handler.connectiontimeout
| Connection timeout in seconds

| handler.connectionLimit

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsOverQuota.adoc
=====================================================
=== IsOverQuota

This matcher will check if the incoming email will make recipients exceed their quotas.

Here is a configuration example:

....
<mailet match="IsOverQuota" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasHeaderWithPrefix.adoc
=====================================================
=== HasHeaderWithPrefix

Matches emails with headers having a given prefix.

If a header with the given prefix is found in the message (global) all recipients will be matched.
If a header with the given prefix is found per recipient (specific), only these will be matched.

Otherwise, no recipient in returned.

use:

....
<mailet match="HasHeaderWithPrefix=PREFIX" class="..." />
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ManageSieveMailet.adoc
=====================================================
=== Manage Sieve scripts via a mailet

Each user can manage his SIEVE scripts through the `ManageSieveMailet` mailet.

To use the manage SIEVE mailet :

* You need to create the user sievemanager@DOMAIN ( if you don't, the SMTP server will check the domain, recognize it, and look for an absent local user, and will generate an error ).
* You can send Manage Sieve commands by mail to sievemanager@DOMAIN. Your subject must contain the command. Scripts need to be added as attachments and need the ".sieve" extension.

To activate a script for a user, you need the following combination :

* PUTSCRIPT scriptname
* SETACTIVE scriptname

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AddFooter.adoc
=====================================================
=== AddFooter

Takes the message and attaches a footer message to it.  Right now, it only
supports simple messages.  Needs to have additions to make it support
messages with alternate content types or with attachments.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/FileRegexMatcher.adoc
=====================================================
=== FileRegexMatcher

Initializes RegexMatcher with regular expressions from a file.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AtMostPriority.adoc
=====================================================
=== AtMostPriority

Numeric value. The priority of this mail should be at most the specified value to be matched.

Inclusive.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientToLowerCase.adoc
=====================================================
=== RecipientToLowerCase

GenericMailet which convert all Recipients to lowercase.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Expires.adoc
=====================================================
=== Expires

Sanitizes or adds an expiration date to a message, in the form of an `Expires`
header (RFC 4021).

The mailet can force an existing expiration date to be within the bounds
given by `minAge`, `maxAge`, or both. `minAge` specifies the minimum time
the date must lie in the future, while `maxAge` specifies a maximum.

If a message has no expiration date, the mailet can add one according to
the optional `defaultAge` parameter.

All parameter values should be expressed in the following format: `Nunit`.
`N` should be positive. `unit` could be either in the short form
(`h`, `d`, `w`, `y` etc.), or in the long form (`hours`, days`, `weeks`,
`months`, `years`). The default unit is `days`.

Sample configuration:

....
<mailet match="All" class="Expires">
    <minAge>12h</minAge>
    <defaultAge>7d</defaultAge>
    <maxAge>8w</maxAge>
</mailet>
....

By itself the `Expires` header is informational only. But some variants of James
will let you delete expired messages through the 
xref:operate/webadmin.adoc#_administrating_messages[WebAdmin] interface:

....
curl -XDELETE http://ip:port/messages?byExpiresHeader
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AmqpForwardAttribute.adoc
=====================================================
=== AmqpForwardAttribute

This mailet forwards the attributes values to a AMPQ.

It takes 4 parameters:

* attribute (mandatory): content to be forwarded, expected to be a Map<String, byte[]>
where the byte[] content is issued from a MimeBodyPart.
It is typically generated from the StripAttachment mailet.
* uri (mandatory): AMQP URI defining the server where to send the attachment.
* exchange (mandatory): name of the AMQP exchange.
* routing_key (optional, default to empty string): name of the routing key on this exchange.

This mailet will sent the data attached to the mail as an attribute holding a map.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/LogMessage.adoc
=====================================================
=== LogMessage

Logs Message Headers and/or Body.
If the "passThrough" in confs is true the mail will be left untouched in
the pipe. If false will be destroyed.  Default is true.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ClamAVScan.adoc
=====================================================
=== ClamAVScan

Does an antivirus scan check using a ClamAV daemon (CLAMD)

Interacts directly with the daemon using the "stream" method,
which should have the lowest possible overhead.

The CLAMD daemon will typically reside on *localhost*, but could reside on a
different host.
It may also consist on a set of multiple daemons, each residing on a different
server and on different IP number.
In such case a DNS host name with multiple IP addresses (round-robin load sharing)
is supported by the mailet (but on the same port number).

Handles the following init parameters:

* *<debug>*
* *<host>*: the host name of the server where CLAMD runs. It can either be
a machine name, such as
"*java.sun.com*", or a textual representation of its
IP address. If a literal IP address is supplied, only the
validity of the address format is checked.
If the machine name resolves to multiple IP addresses, *round-robin load sharing* will
be used.
The default is *localhost*.
* *<port>*: the port on which CLAMD listens. The default is *3310*.
* *<maxPings>*: the maximum number of connection retries during startup.
If the value is *0* no startup test will be done.
The default is *6*.
* *<pingIntervalMilli>*: the interval (in milliseconds)
between each connection retry during startup.
The default is *30000* (30 seconds).
* *<streamBufferSize>*: the BufferedOutputStream buffer size to use
writing to the *stream connection*. The default is *8192*.

The actions performed are as follows:

* During initialization:

* Gets all *config.xml* parameters, handling the defaults;
* resolves the *<host>* parameter, creating the round-robin IP list;
* connects to CLAMD at the first IP in the round-robin list, on
the specified *<port>*;
* if unsuccessful, retries every *<pingIntervalMilli>* milliseconds up to
*<maxPings>* times;
* sends a *PING* request;
* waits for a *PONG* answer;
* repeats steps 3-6 for every other IP resolved.

* For every mail

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesToMimeHeaders.adoc
=====================================================
=== MailAttributesToMimeHeaders

Convert attributes of type Collection<String> to headers

Sample configuration:

....
<mailet match="All" class="MailAttributesToMimeHeaders">
  <simplemapping>org.apache.james.attribute1;headerName1</simplemapping>
  <simplemapping>org.apache.james.attribute2;headerName2</simplemapping>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeader.adoc
=====================================================
=== RemoveMimeHeader

Remove mime headers from the message (global) and per recipient (specific).

Sample configuration:

....
<mailet match="All" class="RemoveMimeHeader">
  <name>header1,header2</name>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsNull.adoc
=====================================================
=== SenderIsNull

Matches mails that are sent by a null sender.

....
<mailet match="SenderIsNull" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SerialiseToHTTP.adoc
=====================================================
=== SerialiseToHTTP

Serialise the email and pass it to an HTTP call

Sample configuration:

....
<mailet match="All" class="SerialiseToHTTP">
        <name>URL</name> <value>url where serialised message will be posted</value>
        <name>ParameterKey</name> <value>An arbitrary parameter be added to the post</value>
        <name>ParameterValue</name> <value>A value for the arbitrary parameter</value>
        <name>MessageKeyName</name> <value>Field name for the serialised message</value>
        <name>passThrough</name> <value>true or false</value>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ClassifyBounce.adoc
=====================================================
=== ClassifyBounce

Assesses the message to determine if it was a hard or soft bounce, and if it was a soft bounce, something of its nature..

Sample configuration:

....
<mailet match="All" class="ClassifyBounce">
  <headerName>X-MailetHeader</headerName>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMESigned.adoc
=====================================================
=== IsSMIMESigned

Checks if a mail is smime encrypted.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SubjectIs.adoc
=====================================================
=== SubjectIs

Matches mail where the subject is contained in a configurable list.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ToPlainText.adoc
=====================================================
=== ToPlainText

This mailet converts HTML parts of a message into Plain text.

It starts looking for multipart/alternative containing a text/plain and a text/html part
and only keep the text/plain part. Then in a second pass replaces remaining text/html by
their textual content, infered by parsing the HTML content and handling common tags.

Eg:

----
<mailet matcher="All" class="ToPlainText"/>
----

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/WithStorageDirective.adoc
=====================================================
=== WithStorageDirective

WithStorageDirective position storage directive for the recipients of this email.

These directives are used by <strong>LocalDelivery</strong> mailet when adding the email to the recipients mailboxes.

The following storage directives can be set:

* targetFolderNames: the folders to append the email in. Defaults to none (INBOX). Coma separated list of folder names. Fallback to targetFolderName.
* targetFolderName: the folder to append the email in. Defaults to none (INBOX).
* seen: boolean, whether the message should be automatically marked as seen. Defaults to false.
* important: boolean, whether the message should be automatically marked as important. Defaults to false.
* keywords: set of string, encoded as a string (value are coma separated). IMAP user flags to set for the message. Defaults to none

Example:

....
<mailet match="IsMarkedAsSpam" class="WithStorageDirective">
    <targetFolderName>Spam</targetFolderName>
    <seen>true</seen>
    <important>true</important>
    <keywords>keyword1,keyword2</keywords>
</mailet>
....

Alternatively, several target folders can be specified:

....
<mailet match="IsMarkedAsSpam" class="WithStorageDirective">
  <targetFolderNames>Important, INBOX</targetFolderNames>
  <seen>true</seen>
  <important>true</important>
  <keywords>keyword1,keyword2</keywords>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsSMIMEEncrypted.adoc
=====================================================
=== IsSMIMEEncrypted

Checks if a mail is smime encrypted.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AtMost.adoc
=====================================================
=== AtMost

Checks that a mail did at most X executions on a specific operation.

 If no executions have been performed previously for Y attribute, it will be set up.
 In the mail, every time the check succeeds, its counter will be incremented by one.
The check fails when the defined X limit is reached.

* X - count of how many times a specific operation is performed
* Y - name of attribute represented for specific operation executions, default value is: *AT_MOST_EXECUTIONS*


The example below will match a mail with at most 3 executions on the mailet
with attribute name *AT_MOST_EXECUTIONS*

....
<mailet match="AtMost=AT_MOST_EXECUTIONS:3" class="<any-class>">
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ExtractMDNOriginalJMAPMessageId.adoc
=====================================================
=== ExtractMDNOriginalJMAPMessageId

This mailet handles MDN messages and define a header X-JAMES-MDN-JMAP-MESSAGE-ID referencing
the original message (by its Jmap Id) asking for the recipient to send an MDN.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientRewriteTable.adoc
=====================================================
=== RecipientRewriteTable

Mailet which should get used when using RecipientRewriteTable-Store to
implementations for mappings of forwards and aliases.

By specifying an 'errorProcessor' you can specify your logic upon RecipientRewriteTable failures.

Example:

....
 <mailet match="All" class="RecipientRewriteTable">
   <errorProcessor>rrt-errors</errorProcessor>
 </mailet>
....

The *rewriteSenderUponForward* option (default to true) can be used to prevent senders to be rewritten upon forwards in the transport envelope
(JAMES 3.8.0 default behaviour). *WARNING*: Please note that not rewriting the sender will cause issues forwarding emails
from external senders to external addresses as the DKIM and SPF records will not be matching the ones of the sending
domain.

The *forwardAutoSubmittedEmails* option (default to false) can be used to prevent forwarding bounces as such a scenario
can lead to an infinite loop if the forward recipient bounces the email.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsLocal.adoc
=====================================================
=== RecipientIsLocal

Matches mail where the recipient is local.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMimeHeaderByPrefix.adoc
=====================================================
=== RemoveMimeHeader

This mailet removes all of the headers starting with a given prefix in the message (global) and per recipient (specific).

Sample configuration:

....
<mailet match="All" class="RemoveMimeHeaderByPrefix">
  <name>X-APPLICATIVE-HEADER-</name>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ConvertTo7Bit.adoc
=====================================================
=== ConvertTo7Bit

Make sure the message stream is 7bit. Every 8bit part is encoded to
quoted-printable or base64 and the message is saved.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HostIs.adoc
=====================================================
=== HostIs

Matches mail to given hosts.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/UserIs.adoc
=====================================================
=== UserIs

Matches mail where the user is contained in a configurable list.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/XOriginatingIpInNetwork.adoc
=====================================================
=== XOriginatingIpInNetwork

Checks the first X_ORIGINATING_IP IP address against a comma-delimited list
of IP addresses, domain names or sub-nets.

See AbstractNetworkMatcher for details on how to specify entries.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ICalendarParser.adoc
=====================================================
=== ICalendarParser

This mailet can be combined with the Strip attachment mailet.

The ICS body part byte array is arranged as map then this mailet should look for ICS and parse it
with Ical4J then store it as a mail attribute

Configuration: The mailet contains 2 mandatory attributes

....
  <mailet match="All" class="ICalendarParser" >
    <sourceAttribute>source.attribute.name</sourceAttribute>
    <!-- The attribute which contains output value of StripAttachment mailet -- >
    <destAttribute>dest.attribute.name</destAttribute>
    <!-- The attribute store the map of Calendar -- >
  </mailet >
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasPriority.adoc
=====================================================
=== HasPriority

Numeric value. The priority of this mail should be equal to the specified value to be matched.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/LocalDelivery.adoc
=====================================================
=== LocalDelivery

Receives a Mail from the Queue and takes care of delivery of the
message to local inboxes.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/NESSpamCheck.adoc
=====================================================
=== NESSpamCheck

This is based on a sample filter.cfg for a Netscape Mail Server to stop
spam.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SPF.adoc
=====================================================
=== SPF

Check the ip, sender, helo against SPF. Add the following attributes to the
mail object:

....
 org.apache.james.transport.mailets.spf.explanation
 org.apache.james.transport.mailets.spf.result
....

Sample configuration:

....
<mailet match="All" class="SPF">
  <addHeader>true</addHeader>
  <debug>false</debug>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/TextCalendarBodyToAttachment.adoc
=====================================================
=== TextCalendarBodyToAttachment

This mailet converts Content-Type of MimeMessage from text/calendar to mulitpart/mixed

The BodyPart should be retrieved from content of text/calendar with all the same "Content-*" headers from original message
and those "Content-" header are removed from original message

It does not takes any parameter

Sample configuration:

....
<mailet match="All" class="TextCalendarBodyToAttachment"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/WithPriority.adoc
=====================================================
=== WithPriority

This mailet sets the priority of the incoming mail.

Example configuration:

....
<mailet match="All" class="WithPriority">
 <priority>7</priority>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SpamAssassin.adoc
=====================================================
=== SpamAssassin

Sends the message through daemonized SpamAssassin (spamd), visit
http://spamassassin.apache.org[spamassassin.apache.org] for info
on configuration. The header X-Spam-Status is added to every message, this
contains the score and the threshold score for spam (usually 5.0). If the
message exceeds the threshold, the header X-Spam-Flag will be added with the
value of YES. The default host for spamd is localhost and the default port is
783.

....
 org.apache.james.spamassassin.status - Holds the status
 org.apache.james.spamassassin.flag   - Holds the flag
....

Sample Configuration:

....
<mailet notmatch="SenderHostIsLocal" class="SpamAssassin">
  <spamdHost>localhost</spamdHost>
  <spamdPort>783</spamdPort>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Forward.adoc
=====================================================
=== Forward

Replaces incoming recipients with those specified, and resends the message
unaltered.

Can be totally replaced by an equivalent usage of {@link Resend} (see below),
simply replacing *<forwardto>* with *<recipients>*.

Sample configuration:

....
<mailet match="All" class="Forward">
  <forwardTo>*comma delimited list of email addresses*</forwardTo>
  <passThrough>*true or false, default=false*</passThrough>
  <fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
  <debug>*true or false, default=false*</debug>
</mailet>
....

The behaviour of this mailet is equivalent to using Resend with the following
configuration:

....
<mailet match="All" class="Resend">
  <forwardTo>comma delimited list of email addresses</recipients>
  <passThrough>true or false</passThrough>
  <fakeDomainCheck>*true or false*</fakeDomainCheck>
  <debug>*true or false*</debug>
</mailet>
....

*forwardto* can be used instead of *forwardTo*; such name is kept
for backward compatibility.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientDomainIs.adoc
=====================================================
=== RecipientDomainIs

This will return recipients matching a configured domain.

Sample configuration:

....
<mailet match="RecipientDomainIs=<domain.com>" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMTPIsAuthNetwork.adoc
=====================================================
=== SMTPIsAuthNetwork

Matches mails that are sent by a client which is allowed to relay.

....
<mailet match="SMTPIsAuthNetwork" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValueRegex.adoc
=====================================================
=== HasMailAttributeWithValueRegex

This Matcher determines if the mail contains the attribute specified in the
condition and that attribute matches the supplied regular expression,
it returns all recipients if that is the case.

Sample configuration:

....
<mailet match="HasMailAttributeWithValueRegex=whatever,<regex>" class="<any-class>">
....

Note: as it is not possible to put arbitrary objects in the configuration,
toString() is called on the attribute value, and that is the value matched against.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ReplaceContent.adoc
=====================================================
=== ReplaceContent

Replace text contents

This mailet allow to specific regular expression to replace text in subject and content.


Each expression is defined as: */REGEX_PATTERN/SUBSTITUTION_PATTERN/FLAGS/*

* *REGEX_PATTERN* is a regex used for the match
* *SUBSTITUTION_PATTERN* is a substitution pattern
* *FLAGS* flags supported for the pattern:
** i: case insensitive
** m: multi line
** x: extended (N/A)
** r: repeat - keep matching until a substitution is possible

To identify subject and body pattern we use the tags <subjectPattern> and <bodyPattern>

Rules can be specified in external files.
Lines must be CRLF terminated and lines starting with # are considered comments.
Tags used to include external files are <subjectPatternFile> and
<bodyPatternFile>
If file path starts with # then the file is loaded as a resource.

Use of both files and direct patterns at the same time is allowed.

This mailet allow also to enforce the resulting charset for messages processed, when a replacement has been done.
To do that the tag <charset> must be specified.

NOTE:
Regexp rules must be escaped by regexp escaping rules and applying this 2 additional rules:

- "/" char inside an expression must be prefixed with "\":
  e.g: "/\//-//" replaces "/" with "-"
- when the rules are specified using <subjectPattern> or <bodyPattern> and
  "/,/" has to be used in a pattern string it must be prefixed with a "\".
  E.g: "/\/\/,//" replaces "/" with "," (the rule would be "/\//,//" but the "/,/" must
  be escaped.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrInNetwork.adoc
=====================================================
=== RemoteAddrInNetwork

Checks the IP address of the sending server against a comma-delimited list
of IP addresses, domain names or sub-nets.

See AbstractNetworkMatcher for details on how to specify entries.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/NotifyPostmaster.adoc
=====================================================
=== NotifyPostmaster

Sends a notification message to the Postmaster.

A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.

The "To:" header of the notification message can be set to "unaltered"; if
missing will be set to the postmaster.

A notice text can be specified, and in such case will be inserted into the
notification inline text.

If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.

The notified messages are attached in their entirety (headers and content)
and the resulting MIME part type is "message/rfc822".

Supports the *passThrough* init parameter (true if missing).


Sample configuration:


....
<mailet match="All" class="NotifyPostmaster">
  <sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
  <attachError>*true or false, default=false*</attachError>
  <message>*notice attached to the original message text (optional)*</message>
  <prefix>*optional subject prefix prepended to the original message, default="Re:"*</prefix>
  <inline>*default=none*</inline>
  <attachment>*default=message*</attachment>
  <passThrough>*true or false, default=true*</passThrough>
  <fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
  <to>*unaltered (optional, defaults to postmaster)*</to>
  <debug>*true or false, default=false*</debug>
</mailet>
....

The behaviour of this mailet is equivalent to using Resend with the following
configuration:

....
<mailet match="All" class="Resend">
  <sender>*an address or postmaster or sender or unaltered*</sender>
  <attachError>*true or false*</attachError>
  <message>*<b>dynamically built</b>*</message>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HeadersToHTTP.adoc
=====================================================
=== HeadersToHTTP

Serialise the email and pass it to an HTTP call

Sample configuration:

....
<mailet match="All" class="HeadersToHTTP">
  <url>http://192.168.0.252:3000/alarm</url>
  <parameterKey>Test</parameterKey>
  <parameterValue>ParameterValue</parameterValue>
  <passThrough>true</passThrough>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/CommandForListserv.adoc
=====================================================
=== CommandForListserv

Returns positive if the recipient is a command for a listserv.  For example,
if my listserv is james@list.working-dogs.com, this matcher will return true
for james-on@list.working-dogs.com and james-off@list.working-dogs.com.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RandomStoring.adoc
=====================================================
=== RandomStoring

Process messages and randomly assign them to 4 to 8 mailboxes.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/PostmasterAlias.adoc
=====================================================
=== PostmasterAlias

Rewrites recipient addresses to make sure email for the postmaster is
always handled.  This mailet is silently inserted at the top of the root
spool processor.  All recipients mapped to postmaster@<servernames> are
changed to the postmaster account as specified in the server conf.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMIMECheckSignature.adoc
=====================================================
=== SMIMECheckSignature

Verifies the s/mime signature of a message. The s/mime signing ensure that
the private key owner is the real sender of the message. To be checked by
this mailet the s/mime signature must contain the actual signature, the
signer's certificate and optionally a set of certificate that can be used to
create a chain of trust that starts from the signer's certificate and leads
to a known trusted certificate.

This check is composed by two steps: firstly it's ensured that the signature
is valid, then it's checked if a chain of trust starting from the signer
certificate and that leads to a trusted certificate can be created. The first
check verifies that the message has not been modified after the signature
was put and that the signer's certificate was valid at the time of the
signing. The latter should ensure that the signer is who he declare to be.

The results of the checks perfomed by this mailet are wrote as a mail
attribute which default name is org.apache.james.SMIMECheckSignature (it can
be changed using the mailet parameter *mailAttribute*). After
the check this attribute will contain a list of SMIMESignerInfo object, one
for each message's signer. These objects contain the signer's certificate and
the trust path.

Optionally, specifying the parameter *strip*, the signature of
the message can be stripped after the check. The message will become a
standard message without an attached s/mime signature.

The configuration parameter of this mailet are summerized below. The firsts
defines the location, the format and the password of the keystore containing
the certificates that are considered trusted. Note: only the trusted certificate
entries are read, the key ones are not.


* keyStoreType (default: jks): Certificate store format . "jks" is the
standard java certificate store format, but pkcs12 is also quite common and
compatible with standard email clients like Outlook Express and Thunderbird.
* keyStoreFileName (default: JAVA_HOME/jre/lib/security/cacert): Certificate
store path.
* keyStorePassword (default: ""): Certificate store password.

Other parameters configure the behavior of the mailet:

* strip (default: false): Defines if the s/mime signature of the message
have to be stripped after the check or not. Possible values are true and
false.
* mailAttribute (default: org.apache.james.SMIMECheckSignature):
specifies in which attribute the check results will be written.
* onlyTrusted (default: true): Usually a message signature to be
considered by this mailet as authentic must be valid and trusted. Setting
this mailet parameter to "false" the last condition is relaxed and also

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecoverAttachment.adoc
=====================================================
=== RecoverAttachment

This mailet takes an attachment stored in an attribute and attach it back to
the message

This may be used to place back attachment stripped by StripAttachment and
stored in the attribute
*org.apache.james.mailet.standard.mailets.StripAttachment.saved*

....
  <mailet match="All" class="RecoverAttachment" >
    <attribute>my.attribute.name</attribute>
  </mailet >
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/StripAttachment.adoc
=====================================================
=== StripAttachment

Remove attachments from a Message. Supports simple removal, storing to file,
or storing to mail attributes.

Configuration:

....
<mailet match=&quot;All&quot; class=&quot;StripAttachment&quot; >
  <pattern >.*\.xls </pattern>  <!-- The regular expression that must be matched -- >
  <!-- notpattern >.*\.xls </notpattern-->  <!-- The regular expression that must be matched -- >
  <mimeType>text/calendar</mimeType>  <!-- The matching mimeType -- >
  <directory >c:\temp\james_attach </directory>   <!-- The directory to save to -- >
  <remove >all </remove>   <!-- either &quot;no&quot;, &quot;matched&quot;, &quot;all&quot; -- >
  <!-- attribute>my.attribute.name</attribute -->
</mailet >
....

At least one of pattern, notpattern and mimeType is required.


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/DKIMSign.adoc
=====================================================
=== DKIMSign

This mailet sign a message using the DKIM protocol
If the privateKey is encoded using a password then you can pass
the password as privateKeyPassword parameter.

Sample configuration with inlined private key:

....
<mailet match=&quot;All&quot; class=&quot;DKIMSign&quot;>
  <signatureTemplate>v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;</signatureTemplate>
  <privateKey>
  -----BEGIN RSA PRIVATE KEY-----
  MIICXAIBAAKBgQDYDaYKXzwVYwqWbLhmuJ66aTAN8wmDR+rfHE8HfnkSOax0oIoT
  M5zquZrTLo30870YMfYzxwfB6j/Nz3QdwrUD/t0YMYJiUKyWJnCKfZXHJBJ+yfRH
  r7oW+UW3cVo9CG2bBfIxsInwYe175g9UjyntJpWueqdEIo1c2bhv9Mp66QIDAQAB
  AoGBAI8XcwnZi0Sq5N89wF+gFNhnREFo3rsJDaCY8iqHdA5DDlnr3abb/yhipw0I
  /1HlgC6fIG2oexXOXFWl+USgqRt1kTt9jXhVFExg8mNko2UelAwFtsl8CRjVcYQO
  cedeH/WM/mXjg2wUqqZenBmlKlD6vNb70jFJeVaDJ/7n7j8BAkEA9NkH2D4Zgj/I
  OAVYccZYH74+VgO0e7VkUjQk9wtJ2j6cGqJ6Pfj0roVIMUWzoBb8YfErR8l6JnVQ
  bfy83gJeiQJBAOHk3ow7JjAn8XuOyZx24KcTaYWKUkAQfRWYDFFOYQF4KV9xLSEt
  ycY0kjsdxGKDudWcsATllFzXDCQF6DTNIWECQEA52ePwTjKrVnLTfCLEG4OgHKvl
  Zud4amthwDyJWoMEH2ChNB2je1N4JLrABOE+hk+OuoKnKAKEjWd8f3Jg/rkCQHj8
  mQmogHqYWikgP/FSZl518jV48Tao3iXbqvU9Mo2T6yzYNCCqIoDLFWseNVnCTZ0Q
  b+IfiEf1UeZVV5o4J+ECQDatNnS3V9qYUKjj/krNRD/U0+7eh8S2ylLqD3RlSn9K
  tYGRMgAtUXtiOEizBH6bd/orzI9V9sw8yBz+ZqIH25Q=
  -----END RSA PRIVATE KEY-----
  </privateKey>
</mailet>
....

Sample configuration with file-provided private key:

....
<mailet match=&quot;All&quot; class=&quot;DKIMSign&quot;>
  <signatureTemplate>v=1; s=selector; d=example.com; h=from:to:received:received; a=rsa-sha256; bh=; b=;</signatureTemplate>
  <privateKeyFilepath>dkim-signing.pem</privateKeyFilepath>
</mailet>
....

By default the mailet assume that Javamail will convert LF to CRLF when sending
so will compute the hash using converted newlines. If you don't want this
behaviour then set forceCRLF attribute to false.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/TooManyRecipients.adoc
=====================================================
=== TooManyRecipients

This matcher matches emails that have too many recipients.

The example below will reject any email with more than 5 recipients

....
<mailet match="TooManyRecipients=5" class="<any-class&gt;">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoveAllMailAttributes.adoc
=====================================================
=== RemoveAllMailAttributes

This mailet sets removes all attributes set on the Mail instance

Sample configuration:

....
<mailet match="All" class="RemoveAllMailAttributes"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ICALToHeader.adoc
=====================================================
=== ICALToHeader

ICALToHeader takes a Map of filenames to ICAL4J calendars, will pick the first Calendar,
and add it to the headers of the e-mail.

The following headers will be added : X_MEETING_UID, X_MEETING_METHOD, X_MEETING_RECURRENCE_ID, X_MEETING_SEQUENCE,
X_MEETING_DTSTAMP

The only configuration parameter for this mailet is the attribute the ICAL4J Calendar map should be attached to,
named *attribute*.

Configuration example :

....
<mailet match=??? class=ICALToHeader>
    <attribute>icalendars</attribute>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeAnySubPart.adoc
=====================================================
=== HasMimeTypeAnySubPart

This matcher checks if the content type matches.

This matcher walks down the mime tree and will look up at all the mime parts of this message.

use:

....
<mailet match="HasMimeTypeAnySubPart=text/plain,text/html" class="..." />
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AttachmentFileNameIs.adoc
=====================================================
=== AttachmentFileNameIs

Checks if at least one attachment has a file name which matches any
element of a comma-separated or space-separated list of file name masks.

Syntax: *match="AttachmentFileNameIs=[-d] [-z] masks"*

The match is case insensitive.

File name masks may start with a wildcard '\*'.

Multiple file name masks can be specified, e.g.: '\*.scr,\*.bat'.

If '*-d*' is coded, some debug info will be logged.

If '*-z*' is coded, the check will be non-recursively applied
to the contents of any attached '*.zip' file.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/MimeDecodingMailet.adoc
=====================================================
=== MailAttributesToMimeHeaders

This mailet replace the mail attribute map of key to MimePart
by a map of key to the MimePart content (as bytes).

It takes only one parameter:

* attribute (mandatory): mime content to be decoded, expected to be a Map<String, byte[]>

Then all this map attribute values will be replaced by their content.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsX509CertificateSubject.adoc
=====================================================
=== IsX509CertificateSubject

Checks if the subject of a X509Certificate contains the supplied string. The
certificate is read from the specified mail attribute.

If the specified attribute contains more than one certificate the matcher matches if at
least one of the certificates contains the given string.

Configuration string:

* mailAttribute;string

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Bounce.adoc
=====================================================
=== Bounce

Generates a response to the reverse-path address. Note that this is different
than a mail-client's reply, which would use the Reply-To or From header.

Bounced messages are attached in their entirety (headers and content) and the
resulting MIME part type is "message/rfc822".

The reverse-path and the Return-Path header of the response is set to "null"
("<>"), meaning that no reply should be sent.

A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.

A notice text can be specified, and in such case will be inserted into the
notification inline text.

If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.

Supports the *passThrough* init parameter (true if missing).


Sample configuration:

....
<mailet match="All" class="Bounce">
  <sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
  <attachError>*true or false, default=false*</attachError>
  <message>*notice attached to the original message text (optional)*</message>
  <prefix>*optional subject prefix prepended to the original message*</prefix>
  <inline>*default=none*</inline>
  <attachment>*default=message*</attachment>
  <passThrough>*true or false, default=true*</passThrough>
  <fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
  <debug>*true or false, default=false*</debug>
</mailet>
....

The behaviour of this mailet is equivalent to using Resend with the following
configuration:

....
<mailet match="All" class="Resend">
  <sender>*an address or postmaster or sender or unaltered*</sender>
  <attachError>*true or false*</attachError>
  <message>**dynamically built**</message>
  <prefix>*a string*</prefix>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/WrapText.adoc
=====================================================
=== WrapText

Convert a message to format=flowed



=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/DKIMVerify.adoc
=====================================================
=== DKIMVerify

This mailet verify a message using the DKIM protocol

Sample configuration:

....
<mailet match="All" class="DKIMVerify">
</mailet>
....

By default the mailet assume that Javamail will use LF instead of CRLF
so it will verify the hash using converted newlines. If you don't want this
behaviour then set forceCRLF attribute to false.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsSenderInRRTLoop.adoc
=====================================================
=== IsSenderInRRTLoop

This matcher allow you to know if the sender of an email is part of a RRT loop.

This is useful when bouncing upon RRT execution issues: we don't want to create a bouncing loop
(as the execution of that RRT loop will fail).

Example:

....
<mailet match="IsSenderInRRTLoop" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SetMimeHeader.adoc
=====================================================
=== SetMailAttribute

Adds a specified header and value to the message.

Sample configuration:

....
<mailet match="All" class="AddHeader">
  <name>X-MailetHeader</name>
  <value>TheHeaderValue</value>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Redirect.adoc
=====================================================
=== Redirect

A mailet providing configurable redirection services.

Can produce listserver, forward and notify behaviour, with the original
message intact, attached, appended or left out altogether.

It differs from Resend because (i) some defaults are different,
notably for the following parameters: *<recipients>*,
*<to>*, *<reversePath>* and *<inline>*; (ii)
because it allows the use of the *<static>* parameter;.

Use <code>Resend</code> if you need full control, <code>Redirect</code> if
the more automatic behaviour of some parameters is appropriate.

This built in functionality is controlled by the configuration as laid out
below. In the table please note that the parameters controlling message
headers accept the <b>"unaltered"</b> value, whose meaning is to
keep the associated header unchanged and, unless stated differently,
corresponds to the assumed default if the parameter is missing.

The configuration parameters are:


.Redirect parameters
|===
| Property name | explanation

| recipients
| A comma delimited list of addresses for recipients of this message; it will
use the "to" list if not specified, and "unaltered" if
none of the lists is specified.

These addresses will only appear in the To: header if no "to" list
is supplied.

Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.

The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "replyTo" uses the ReplyTo header if
available, otherwise the From header if available, otherwise the Sender
header if available, otherwise the return-path; "from" is made
equivalent to "sender", and "to" is made equivalent to
"recipients"; "null" is ignored.

| to
| A comma delimited list of addresses to appear in the To: header; the email

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RelayLimit.adoc
=====================================================
=== RelayLimit

Matches mail which has been relayed more than a given number of times.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ICALToJsonAttribute.adoc
=====================================================
=== ICALToJsonAttribute

ICALToJsonAttribute takes a map of ICAL4J objects attached as attribute, and
output the map of corresponding json bytes as an other attribute, with unique String keys.

The JSON contains the following fields :

* *ical* : the raw ical string, in UTF-8
* *sender* : the sender of the mail (compulsory, mail without sender will be discarded)
* *recipient* : the recipient of the mail. If the mail have several recipients, each recipient will have its own JSON.
* *uid* : the UID of the ical (optional)
* *sequence* : the sequence of the ical (optional)
* *dtstamp* : the date stamp of the ical (optional)
* *method* : the method of the ical (optional)
* *recurrence-id* : the recurrence-id of the ical (optional)

Example are included in test call ICalToJsonAttributeTest.

Configuration example :

....
<mailet match=??? class=ICALToJsonAttribute>
    <sourceAttribute>icalendars</sourceAttribute>
    <destinationAttribute>icalendarJson</destinationAttribute>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderIs.adoc
=====================================================
=== SenderIs

This matcher matches a specific sender, passed as a condition to this matcher.

The example below will match mail with a sender being user@domain

....
<mailet match="SenderIs=user@domain" class="<any-class>">
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/TooManyLines.adoc
=====================================================
=== TooManyLines

This matcher matches emails that have too many lines. This allows better rejection of emails when, for instance, MIME4J
is configured with a limited number of lines.

<p>The example below will match mail with more than 10000 lines</p>

....
<mailet match="TooManyLines=10000" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsSingleRecipient.adoc
=====================================================
=== IsSingleRecipient

Matches mail where the number of recipients is exactly one.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ToRepository.adoc
=====================================================
=== ToRepository

Stores incoming Mail in the specified Repository.

If the "passThrough" in conf is true the mail will be returned untouched in
the pipe and may be processed by additional mailets. If false will be destroyed.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderInFakeDomain.adoc
=====================================================
=== SenderInFakeDomain

Does a DNS lookup (MX and A/CNAME records) on the sender's domain. If there
are no entries, the domain is considered fake and the match is successful.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Null.adoc
=====================================================
=== Null

Simplest Mailet which destroys any incoming messages by setting their state to GHOST.

This effectively stops all processing of this mail.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryPermanentError.adoc
=====================================================
=== IsRemoteDeliveryPermanentError

Checks if the mail has a permanent remote delivery failure attribute

Example:

....
<mailet match="IsRemoteDeliveryPermanentError" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDelivery.adoc
=====================================================
=== RemoteDelivery

The RemoteDelivery mailet delivers messages to a remote SMTP server able to deliver or forward messages to their final
destination.

The remote SMTP server through which each mail is delivered is resolved using MX lookup for each message destination
unless the *<gateway/>* parameter is set. The *<gateway/>* parameter enables the
definition of one or more gateway servers through which all messages are sent.

If an attempt to deliver a message fails, a redelivery attempt is scheduled according to the scheme defined
by the *<delayTime/>* parameter, retrying up to the limit defined
by the *<maxRetries/>* parameter. When the retry limit is exceeded, delivery failure is processed
according to the setting of the *<bounceProcessor/>* parameter.

These are the parameters that control the operation of the RemoteDelivery mailet:

* *outgoing* (required) - a String containing the name of the queue that will hold messages being processed by this mailet.
* *bind* (optional) - a String describing the local IP address to which the mailet should be bound while delivering
emails. This tag is useful for multihomed machines. Default is to bind to the default local address of the machine.<br>
Note: The same IP address must be used for all of those RemoteDelivery instances where you explicitly supply a bind address.
* *delayTime* (optional) a String containing a comma separated list of patterns defining the number of and delays between delivery
attempts. The pattern is *[attempts\*]delay [unit]* where:

** *attempts* (optional) - an Integer for the number of delivery attempts. Default is 1.
** *delay* (required) - a Long for the delay between attempts.
** *unit* (optional) - a String with the value of one of 'msec', 'sec', 'minute', 'hour', or 'day'. Default is msec.

Default is one attempt after 6 hours, which if explicitly declared would be written as *<delayTime>1 6 hour</delayTime>*

* *maxRetries* (optional) an Integer for the number of times an attempt is made to deliver a particular mail.
Default is the greater of five and the sum of the attempts for each *<delayTime/>* specified.
* *maxDnsProblemRetries* (optional) - an Integer for the number of times to retry if DNS problems for a domain occur.
Default is 0.
* *timeout* (optional) - an Integer for the Socket I/O timeout in milliseconds. Default is 180000
* *connectionTimeout* (optional) - an Integer for the Socket connection timeout in milliseconds. Default is 60000
* *bounceProcessor* (optional) - a String containing the name of the mailet processor to pass messages that cannot
be delivered to for DSN bounce processing. Default is to send a traditional message containing the bounce details.
* *onSuccess* (optional) - if specified, this processor is called for each email successfully sent to remote third parties.

When using bounceProcessor or onSuccess processors, take special care of error handling (see onMailetException and onMatcherException)
 to avoid confusing situations. Also remember that on partial delivery, both processors will be used: *onSuccess* with successfull recipients,
 and *bounceProcessor* with failed recipients.

* *startTLS* (optional) - a Boolean (true/false) indicating whether the STARTTLS command (if supported by the server)
to switch the connection to a TLS-protected connection before issuing any login commands. Default is false.
* *sslEnable* (optional) - a Boolean (true/false) indicating whether to use SSL to connect and use the SSL port unless
explicitly overridden. Default is false. Setting up to true will result in delivery attempts in SMTPS on port 465 with a fallback
to SMTP on port 25. The trust-store if needed can be customized by *-Djavax.net.ssl.trustStore=/root/conf/keystore*.
* *verifyServerIdentity* (optional) - a Boolean (true/false) indicating whether to match the remote server name against its certificate on TLS connections. Default is true. Disabling this runs the risk of someone spoofing a legitimate server and intercepting mails, but may be necessary to contact servers that have strange certificates, no DNS entries, are reachable by IP address only, and similar edge cases.
* *gateway* (optional) - a String containing a comma separated list of patterns defining the gateway servers to be used to

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ServerTime.adoc
=====================================================
=== ServerTime

Returns the current time for the mail server.

Sample configuration:

....
<mailet match="RecipientIs=time@cadenza.lokitech.com" class="ServerTime"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AddSubjectPrefix.adoc
=====================================================
=== AddSubjectPrefix

Add an prefix (tag) to the subject of a message <br>

Sample Configuration:

....
<mailet match="RecipientIs=robot@james.apache.org" class="TagMessage">
  <subjectPrefix>[robot]</subjectPrefix>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoveMailAttribute.adoc
=====================================================
=== RemoveMailAttribute

This mailet sets attributes on the Mail.

Sample configuration:

....
<mailet match="All" class="RemoveMailAttribute">
  <name>attribute_name1</name>
  <name>attribute_name2</name>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Resend.adoc
=====================================================
=== Resend
A mailet providing configurable redirection services.

Can produce listserver, forward and notify behaviour, with the original
message intact, attached, appended or left out altogether. Can be used as a
replacement to {@link Redirect}, having more consistent defaults, and new
options available.

Use <code>Resend</code> if you need full control, <code>Redirect</code> if
the more automatic behaviour of some parameters is appropriate.

This built in functionality is controlled by the configuration as laid out
below. In the table please note that the parameters controlling message
headers accept the <b>"unaltered"</b> value, whose meaning is to
keep the associated header unchanged and, unless stated differently,
corresponds to the assumed default if the parameter is missing.

The configuration parameters are:

.Resend properties
|===
| Property name | explanation

| recipients
| A comma delimited list of addresses for recipients of this message.

Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.

The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "replyTo" uses the ReplyTo header if
available, otherwise the From header if available, otherwise the Sender
header if available, otherwise the return-path; "from" is made
equivalent to "sender", and "to" is made equivalent to
"recipients"; "null" is ignored. Default:
"unaltered".

| to
| A comma delimited list of addresses to appear in the To: header.

Such addresses can contain "full names", like *Mr. John D. Smith
<john.smith@xyz.com>*.

The list can include constants "sender", "from",
"replyTo", "postmaster", "reversePath",
"recipients", "to", "null" and
"unaltered"; "from" uses the From header if available,
otherwise the Sender header if available, otherwise the return-path;

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasException.adoc
=====================================================
=== HasException

This Matcher determines if the exception specified in the condition or
the subclasses of it has occurred during the processing of the mail.
If true, all recipients are returned, else null. This matcher presupposes
that the exception has been captured as a Mail attribute
org.apache.mailet.Mail#MAILET_ERROR_ATTRIBUTE_NAME in the process.

Sample configuration:

....
<mailet match="HasException=org.apache.james.managesieve.api.ManageSieveException" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasHabeasWarrantMark.adoc
=====================================================
=== HasHabeasWarrantMark

This matcher tests for the Hebeas Warrant Mark.
For details see: http://www.hebeas.com

Usage: Place this matcher

....
<mailet match="HasHabeasWarrantMark" class="ToProcessor">
    <processor> transport </processor>
</mailet>
....

in the root processes before the DNSRBL block lists (the InSpammerBlacklist matcher).

Because the Habeas Warrant Mark is copyright material, I have asked for and
received the following explicit statement from Habeas:

....
-----------------------------------
From: Lindsey Pettit [mailto:support@habeas.com]
Sent: Sunday, September 29, 2002 5:51
To: Noel J. Bergman
Subject: RE: Habeas and Apache James

Dear Noel,

> I guess that since your Warrant Mark is copyright, I should ask for
> something from you to explicitly authorize that Hebeas will permit
> this code to be included and distributed as part of Apache James
> under the Apache Software License.  As we have established, the use
> of the Habeas Warrant Mark for filtering is not restricted, but I
> would like something to confirm that, so that Apache will be happy.

I can hereby confirm to you that there is no license necessary in
order to use the Habeas mark for filtering.  That said, however, we
do insist that it not ever be used as a basis for rejecting email which
bears the Habeas mark.
-----------------------------------
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/UnwrapText.adoc
=====================================================
=== UnwrapText

Remove (best effort to) the hardcoded wrapping from a message.

If the text is  "format=flowed" then deflows the text. Otherwise it forces a dewrap of the text.


Parameters:

* quotewidth - when we try to dewrap e quoted text it helps knowing the original
with, so we can reconstruct "wrapped wraps" created by multiple wrappings by clients with
different original width or simply to the add of the heading ">" that increase the line
length.

The value should be "WIDTH+X" if the original length is known, "-X" otherwise.

In the latter case the length of the longer line will be used.

X is the tollerance needed for the quoting chars: if the original width is known the suggested
value for X is 2 (because of "> " prefix), otherwise it is suggested to increase it to a value
like 10 (-10)

In summary, if the original wrap is known (for example 76, for flowed messages) *quotewidth = 78*

Otherwise *quotewidth = -10*



=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderDomainRepository.adoc
=====================================================
=== ToSenderDomainRepository

Stores incoming Mail in a repository defined by the sender's domain.<br>

Supported configuration parameters:

* "urlPrefix" mandatory: defines the prefix for the per sender's domain repository. For example for the value
'cassandra://var/mail/sendersRepositories/', a mail sent by 'user@james.org' will be stored
in 'cassandra://var/mail/sendersRepositories/james.org'.
* "passThrough" optional, defaults to false. If true, the processing of the mail continues. If false it stops.
* "allowRepositoryCreation" optional, defaults to true. If true, non existing repository will be created. In case of
misconfiguration, this might lead to arbitrary repository creation. If false, the incoming mails will be stored only
 in already existing repository. If not existing, the email will be dropped with an appropriate log warning (leading
 to potential data loss). In case, you want to create a repository manually, make a http PUT request to
 /mailRepositories/encodedUrlOfTheRepository from web admin api.
  For example http://ip:port/mailRepositories/file%3A%2F%2FmailRepo

Example:

....
<mailet match="All" class="ToSenderDomainRepository">
    <urlPrefix>cassandra://var/mail/sendersRepositories/</urlPrefix>
    <passThrough>false</passThrough>
    <allowRepositoryCreation>true</allowRepositoryCreation>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/VacationMailet.adoc
=====================================================
=== VacationMailet

This mailet uses https://jmap.io/spec-mail.html#vacation-response[JMAP VacationResponse] and
sends back a vacation notice to the sender if needed.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasAttachment.adoc
=====================================================
=== HasAttachment

Checks whether this message has an attachment

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/All.adoc
=====================================================
=== All

Matches all mail.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/CommandListservMatcher.adoc
=====================================================
=== CommandListservMatcher

CommandListservMatcher is the matcher that pairs with the CommandListservManager
It checks to see if the request is intended for the ListservManager, but doesn't guarantee that it is a valid command.

To configure, insert this into the config.xml inside of the root processor block.

....
<mailet match="CommandListservMatcher=announce@localhost" class="CommandListservManager">
...
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Sieve.adoc
=====================================================
=== Sieve

Execute Sieve scripts for incoming emails, and set the result of the execution as attributes of the mail

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ToProcessor.adoc
=====================================================
=== ToProcessor

This mailet redirects the mail to the named processor

Sample configuration:

....
<mailet match="All" class="ToProcessor">
  <processor>spam</processor>
  <notice>Notice attached to the message (optional)</notice>
</mailet>
....


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/MailAttributesListToMimeHeaders.adoc
=====================================================
=== MailAttributesListToMimeHeaders

Convert attributes of type Collection<String> to headers

Sample configuration:

....
<mailet match="All" class="MailAttributesToMimeHeaders">
  <simplemapping>org.apache.james.attribute1;headerName1</simplemapping>
  <simplemapping>org.apache.james.attribute2;headerName2</simplemapping>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/FetchedFrom.adoc
=====================================================
=== FetchedFrom

Matches mail with a header set by Fetchpop X-fetched-from

fetchpop sets X-fetched-by to the "name" of the fetchpop fetch task.

This is used to match all mail fetched from a specific pop account.

Once the condition is met the header is stripped from the message to prevent looping if
the mail is re-inserted into the spool.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HostIsLocal.adoc
=====================================================
=== HostIsLocal

Matches mail to Domains which are local

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SetMailAttribute.adoc
=====================================================
=== SetMailAttribute

This mailet sets attributes on the Mail.

Sample configuration:

....
<mailet match="All" class="SetMailAttribute">
  <name1>value1</name1>
  <name2>value2</name2>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeTypeParameter.adoc
=====================================================
=== HasMimeTypeParameter

This matcher checks if the content type parameters matches.

use:

....
<mailet match="HasMimeTypeParameter=report-type=disposition-notification,report-type=other" class="..." />
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoteAddrNotInNetwork.adoc
=====================================================
=== RemoteAddrInNetwork

Checks the IP address of the sending server against a comma-delimited list
of IP addresses, domain names or sub-nets.

See AbstractNetworkMatcher for details on how to specify entries.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AtLeastPriority.adoc
=====================================================
=== AtLeastPriority

Numeric value. The priority of this mail should be at least the specified value to be matched.

Inclusive.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ContactExtractor.adoc
=====================================================
=== ContactExtractor

Collects the sender and the recipients of a message and store them as JSON in a
specified message attribute.

Here is the JSON format:

....
{
  "userEmail" : "sender@james.org",
  "emails" : [ "to@james.org", "cc@james.org" ]
}
....

Sample configuration:

....
<mailet match="All" class="ContactExtractor">
  <attribute>ExtractedContacts</attribute>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/Sign.adoc
=====================================================
=== Sign

Puts a *server-side* SMIME signature on a message.

It is a concrete subclass of Sign, with very few modifications to it,
to specialize for SMIME.

Handles the following init parameters:

* <keyHolderClass>: Sets the class of the KeyHolder object that will handle the cryptography functions,
 for example org.apache.james.security.SMIMEKeyHolder for SMIME.
* <debug>: if *true* some useful information is logged.
 The default is *false*.
* <keyStoreFileName>: the {@link java.security.KeyStore} full file name.
* <keyStorePassword>: the *KeyStore* password.
If given, it is used to check the integrity of the keystore data,
otherwise, if null, the integrity of the keystore is not checked.
* <keyAlias>: the alias name to use to search the Key using {@link java.security.KeyStore#getKey}.
 The default is to look for the first and only alias in the keystore;
 if zero or more than one is found a {@link java.security.KeyStoreException} is thrown.
* <keyAliasPassword>: the alias password. The default is to use the *KeyStore* password.
 At least one of the passwords must be provided.
* <keyStoreType>: the type of the keystore. The default will use {@link java.security.KeyStore#getDefaultType}.
* <postmasterSigns>: if *true* the message will be signed even if the sender is the Postmaster. The default is *true*.
* <rebuildFrom>: If *true* will modify the "From:" header. The default is *true*.
* <signerName>: the name of the signer to be shown in the explanation text. The default is to use the "CN="
property of the signing certificate.
* <explanationText>. There is a default explanation string template in English, displaying
also all the headers of the original message.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttributeWithValue.adoc
=====================================================
=== HasMailAttributeWithValue

This Matcher determines if the mail contains the attribute specified in
the condition and if the value answered when the method toString() is
invoked on the attribute is equal to the String value specified in the
condition. If both tests are true, all recipients are returned, else null.

Notes:

The current matcher implementation expects a single String value to match
on. This matcher requires two values, the attribute name and attribute
value. This requires some implicit rules to govern how the single value
supplied to the matcher is parsed into two values.

* In the match condition, the split between the attribute name and the
attribute value is made at the first comma. Attribute names that include
a comma will parse incorrectly and therefore are not supported by this
matcher.
* Leading and trailing spaces are removed from both the attribute name and
attribute value specified in the condition and the tested attribute value in
the mail prior to matching. Therefore, "abc" , " abc", "abc " and " abc "
are considered equivalent.
* To test for an empty string, do not specify an attribute value after the
comma.

Sample configuration:

....
<mailet match="HasMailAttributeWithValue=name, value" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/DSNBounce.adoc
=====================================================
=== DSNBounce

Generates a Delivery Status Notification (DSN) Note that this is different
than a mail-client's reply, which would use the Reply-To or From header.

Bounced messages are attached in their entirety (headers and content) and the
resulting MIME part type is "message/rfc822".

The reverse-path and the Return-Path header of the response is set to "null"
("<>"), meaning that no reply should be sent.

A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.

Supports the <code>passThrough</code> init parameter (true if missing).

Sample configuration:

....
<mailet match="All" class="DSNBounce">
  <sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
  <prefix>*optional subject prefix prepended to the original message*</prefix>
  <attachment>*message, heads or none, default=message*</attachment>
  <messageString>*the message sent in the bounce, the first occurrence of the pattern [machine] is replaced with the name of the executing machine, default=Hi. This is the James mail server at [machine] ... *</messageString>
  <passThrough>*true or false, default=true*</passThrough>
  <debug>*true or false, default=false*</debug>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RemoteDeliveryFailedWithSMTPCode.adoc
=====================================================
=== RemoteDeliveryFailedWithSMTPCode

Checks the SMTP error code attached to remote delivery failures

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMailAttribute.adoc
=====================================================
=== HasMailAttribute

This Matcher determines if the mail contains the attribute specified in the
condition, and returns all recipients if it is the case.

Sample configuration:

....
<mailet match="HasMailAttribute=whatever" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ToSenderFolder.adoc
=====================================================
=== ToSenderFolder

 Receives a Mail from the Queue and takes care to deliver the message
  to a defined folder of the sender.

You have to define the folder name of the sender.

The flag 'consume' will tell is the mail will be further

processed by the upcoming processor mailets, or not.

....
<mailet match="RecipientIsLocal" class="ToSenderFolder">
  <folder> *Sent Items* </folder>
  <consume> *false* </consume>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIsLocal.adoc
=====================================================
=== SenderHostIsLocal

Checks the sender's displayed domain name against a the hosts serviced by
this mail context.

Sample Configuration:

....
<mailet match="SenderHostIsLocal" class="SpamAssassin"> </mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/CompareNumericHeaderValue.adoc
=====================================================
=== CompareNumericHeaderValue

Matches mails containing a header with a numeric value whose comparison with the specified value is true.

If the header is missing in the message, there will be *no match*

Configuration string: The headerName, a comparison operator and the numeric headerValue
to compare with, *space or tab delimited*.

The comparison operators are: *<, <=, ==, >=, >*;
another set of operators is: *LT, LE, EQ, GE, GT*.

Also the following operators are accepted: *=<, =, =>*.

Example:

....
<mailet match="CompareNumericHeaderValue=X-MessageIsSpamProbability > 0.9" class="ToProcessor">
    <processor> spam </processor>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIsRegex.adoc
=====================================================
=== RecipientIsRegex

Matches recipients whose address matches a regular expression.

Is equivalent to the SenderIsRegex matcher but matching on the recipient.

Configuration string: a regular expression.

....
<mailet match="RecipientIsRegex=<regular-expression>" class="<any-class>">
....

The example below will match any recipient in the format user@log.anything

....
<mailet match="RecipientIsRegex=(.*)@log\.(.*)" class="<any-class>">
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/NotifySender.adoc
=====================================================
=== NotifySender

Sends a notification message to the sender of a message.

A sender of the notification message can optionally be specified. If one is
not specified, the postmaster's address will be used.

The "To:" header of the notification message can be set to "unaltered"; if
missing will be set to the sender of the notified message.

A notice text can be specified, and in such case will be inserted into the
notification inline text.

If the notified message has an "error message" set, it will be inserted into
the notification inline text. If the *attachError* init
parameter is set to true, such error message will be attached to the
notification message.

The notified messages are attached in their entirety (headers and content)
and the resulting MIME part type is "message/rfc822".

Supports the *passThrough* init parameter (true if missing).

Sample configuration:

....
<mailet match="All" class="NotifySender">
  <sender>*an address or postmaster or sender or unaltered, default=postmaster*</sender>
  <attachError>*true or false, default=false*</attachError>
  <prefix>*optional subject prefix prepended to the original message*</prefix>
  <inline>default=none*</inline>
  <attachment>default=message*</attachment>
  <passThrough>*true or false, default=true*</passThrough>
  <fakeDomainCheck>*true or false, default=true*</fakeDomainCheck>
  <to>*unaltered or sender or from(optional, defaults to sender)*</to>
  <debug>*true or false, default=false*</debug>
</mailet>
....

The behaviour of this mailet is equivalent to using Resend with the following
configuration:

....
<mailet match="All" class="Resend">
  <sender>*an address or postmaster or sender or unaltered*</sender>
  <attachError>*true or false*</attachError>
  <message>*<b>dynamically built</b>*</message>
  <prefix>*a string*</prefix>
  <passThrough>true</passThrough>
  <fakeDomainCheck>*true or false*</fakeDomainCheck>

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMIMESign.adoc
=====================================================
=== SMIMESign

Puts a *server-side* signature on a message.

It is a concrete subclass of AbstractSign, with very few modifications to it.

A text file with an explanation text is attached to the original message,
and the resulting message with all its attachments is signed.

* The resulting appearance of the message is almost unchanged: only an extra attachment
* and the signature are added.

The kind of signature depends on the value of the <keyHolderClass> init parameter.

Handles the following init parameters:

* <keyHolderClass>: Sets the class of the KeyHolder object that will handle the cryptography functions,
for example org.apache.james.security.SMIMEKeyHolder for SMIME.
* <debug>: if *true* some useful information is logged.
The default is *false*.
* <keyStoreFileName>: the {@link java.security.KeyStore} full file name.
* <keyStorePassword>: the *KeyStore* password.
If given, it is used to check the integrity of the keystore data,
otherwise, if null, the integrity of the keystore is not checked.
* <keyAlias>: the alias name to use to search the Key using {@link java.security.KeyStore#getKey}.
The default is to look for the first and only alias in the keystore;
if zero or more than one is found a {@link java.security.KeyStoreException} is thrown.
* <keyAliasPassword>: the alias password. The default is to use the *KeyStore* password.
At least one of the passwords must be provided.
* <keyStoreType>: the type of the keystore. The default will use {@link java.security.KeyStore#getDefaultType}.
* <postmasterSigns>: if *true* the message will be signed even if the sender is the Postmaster. The default is *true*.
* <rebuildFrom>: If *true* will modify the "From:" header. The default is *true*.
* <signerName>: the name of the signer to be shown in the explanation text. The default is to use the "CN="
property of the signing certificate.
* <explanationText>. There is a default explanation string template in English, displaying
also all the headers of the original message.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SubjectStartsWith.adoc
=====================================================
=== SubjectIs

Matches mail where the subject starts with a given phrase.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderDomainIs.adoc
=====================================================
=== SenderDomainIs

SenderDomainIs will look at the envelope sender's domain. If equal to
configured value, then all recipients will be returned. Otherwise an empty
list will be returned.

Sample configuration:

....
<mailet match="SenderDomainIs=<domain.com>" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsRemoteDeliveryTemporaryError.adoc
=====================================================
=== IsRemoteDeliveryPermanentError

Checks if the mail has a temporary remote delivery failure attribute set to false (meaning it's a temporary error)

Example:

....
<mailet match="IsRemoteDeliveryTemporaryError" class="<any-class>"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SentByMailet.adoc
=====================================================
=== SentByMailet

This matcher matches email sent automatically by mailets.

....
<mailet match="SentByMailetAny" class="<any-class>"/>
....

This matcher allows you, for instance, to enable/disable routing automatically generated emails out of your server.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/DLP.adoc
=====================================================
=== DLP

Enable evaluation of incoming emails against DLP rules (Data Leak Prevention) attached to the sender domains.

Example:

----
<mailet match="DLP" class="ToRepository">
   <repositoryPath>/var/mail/quarantine</repositoryPath>
</mailet>
----

Rules can be administered via xref:operate/webadmin.adoc#_administrating_dlp_configuration[webAdmin].

Only available on top of Memory and Cassandra storages.

Additionally a cache can be added to reduce queries done to the underlying database.

Example:

----
<mailet match="DLP=cache:60s" class="ToRepository">
   <repositoryPath>/var/mail/quarantine</repositoryPath>
</mailet>
----

Will query the DLP rules for a given domain only every 60 seconds.

Please note that querying DLP rules on top of Cassandra relies on Event sourcing, involves reading a potentially
large event stream and involves some SERIAL reads (LightWeight transactions) for each processed emails.

Efficiency of the cache can be tracked with the following metrics:

   - `dlp.cache.hitRate`
   - `dlp.cache.missCount`
   - `dlp.cache.hitCount`
   - `dlp.cache.size`

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsLocal.adoc
=====================================================
=== SenderIsLocal

Matches mail where the sender is local.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/RecipientIs.adoc
=====================================================
=== RecipientIs

This matcher matches a specific recipient (in the envelope of the mail), passed as a condition to
this matcher.

The example below will match only the recipient user@domain

....
<mailet match=&quot;RecipientIs=user@domain&quot; class=&quot;<any-class>&quot;>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/FromRepository.adoc
=====================================================
=== FromRepository

Re-spools Mail found in the specified Repository.

....
<mailet match="RecipientIs=respool@localhost" class="FromRepository">
   <repositoryPath> *repository path* </repositoryPath>
   <processor> *target processor* </repositoryPath>
   <delete&t; [true|<b>false</b>] </delete>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/InSpammerBlacklist.adoc
=====================================================
=== InSpammerBlacklist

Checks the network IP address of the sending server against a blacklist of
spammers. There are 3 lists that support this...

* *blackholes.mail-abuse.org*: Rejected - see http://www.mail-abuse.org/rbl/
* *dialups.mail-abuse.org*: Dialup - see http://www.mail-abuse.org/dul/
* *relays.mail-abuse.org*: Open spam relay - see http://www.mail-abuse.org/rss/

Example:

....
<mailet match="InSpammerBlacklist=blackholes.mail-abuse.org." class="ToProcessor">
  <processor>spam</processor>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderHostIs.adoc
=====================================================
=== SenderHostIs

Checks the sender's displayed domain name against a supplied list.

Sample configuration:

....
<mailet match="SenderHostIs=domain.com" class="ToProcessor">
  <processor> spam </processor>
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/IsMarkedAsSpam.adoc
=====================================================
=== IsMarkedAsSpam

Matches mails having a *org.apache.james.spamassassin.status* per recipient header with a *Yes* value.

As an example, here is a part of a mailet pipeline which can be used in your LocalDelivery processor:

....
<!-- SpamAssassing mailets pipeline -->
    <mailet match="RecipientIsLocal" class="SpamAssassin">
        <spamdHost>spamassassin</spamdHost>
        <spamdPort>783</spamdPort>
    </mailet>
    <mailet match="IsMarkedAsSpam" class="WithStorageDirective">
        <targetFolderName>Spam</targetFolderName>
    </mailet>
<!-- End of SpamAssassing mailets pipeline -->
....

In order to use this with `rspamd`, we need to declare a condition for the matcher
and drop the Rspamd jar (*third-party/rspamd*) in the James extensions-jars folder.
Eg: With the recipient header for Rspamd being *org.apache.james.rspamd.status*,
then the configuration would be:

....
<!-- Rspamd mailets pipeline -->
    <mailet match="IsMarkedAsSpam=org.apache.james.rspamd.status" class="WithStorageDirective">
        <targetFolderName>Spam</targetFolderName>
    </mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthSuccessful.adoc
=====================================================
=== SMTPAuthSuccessful

Matches mails that are sent by an SMTP authenticated user.

If the sender was not authenticated it will not match.

....
<mailet match="SMTPAuthSuccessful" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasHeader.adoc
=====================================================
=== HasHeader

use:

....
<mailet match="HasHeader={<header>[=value]}+" class="..." />
....

This matcher checks if the header is present in the message (global) and per recipient (specific). It complements the AddHeader mailet.


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/HasMimeType.adoc
=====================================================
=== HasMimeType

This matcher checks if the content type matches.

This matcher does not walk down the mime tree and stops at the top level mime part.

use:

....
<mailet match="HasMimeType=text/plain,text/html" class="..." />
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/OnlyText.adoc
=====================================================
=== OnlyText

Keep only the text part of a message.

If the message is text only then it doesn't touch it, if it is a multipart it
transform it a in plain text message with the first text part found.

 * text/plain
 * text/html => with a conversion to text only
 *  text/* as is.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/UseHeaderRecipients.adoc
=====================================================
=== UseHeaderRecipients

Mailet designed to process the recipients from the mail headers rather
than the recipients specified in the SMTP message header.  This can be
useful if your mail is redirected on-route by a mail server that
substitutes a fixed recipient address for the original.


To use this, match against the redirection address using the
*RecipientIs* matcher and set the mailet 'class' to
*UseHeaderRecipients*.  This will cause the email to be
re-injected into the root process with the recipient substituted
by all the recipients in the Mail-For, To and Cc headers
of the message.

e.g.

....
<mailet match="RecipientIs=forwarded@myhost" class="UseHeaderRecipients">
</mailet>
....



=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SentByJmap.adoc
=====================================================
=== SentByJmap

Matches mails sent via the JMAP protocol.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/ICSSanitizer.adoc
=====================================================
=== ICSSanitizer

Some senders embed 'text/calendar' content as part of Mime bodypart headers with an empty body.

This mailet duplicate the 'text/calendar' content to the Mime body part.

Example configuration:

....
<mailet match="All" class="ICSSanitizer"/>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SenderIsRegex.adoc
=====================================================
=== SenderIsRegex

Matches mails that are sent by a sender whose address matches a regular expression.

Is equivalent to the RecipientIsRegex matcher but matching on the sender.

Configuration string: a regular expression.

....
<mailet match="SenderIsRegex=<regular-expression>" class="<any-class>">
....

The example below will match any sender in the format user@log.anything

....
<mailet match="SenderIsRegex=(.*)@log\.(.*)" class="<any-class>">
</mailet>
....

Another example below will match any sender having some variations of the string
*mp3* inside the username part.

....
<mailet match="SenderIsRegex=(.*)(mp3|emmepitre)(.*)@" class="<any-class>">
</mailet>
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AddHabeasWarrantMark.adoc
=====================================================
=== AddHabeasWarrantMark

This matcher adds the Hebeas Warrant Mark to a message.

For details see: http://www.hebeas.com</p>

Usage:

....
<mailet match="All" class="AddHabeasWarrantMark" />;
....

NOTE: Although this mailet is covered by the Apache Software License,
the Habeas Warrant Mark is copyright.  A separate license from Habeas
is required in order to legally attach the Habeas Warrant Mark to
e-mail messages.  Each James Administrator is responsible for
ensuring that James is configured to attach the Habeas Warrant Mark
only to e-mail covered by a suitable license received from Habeas.

Because the Habeas Warrant Mark is copyright material, I have asked
for and received the following explicit statement from Habeas:

....
-----------------------------------
From: Lindsey Pettit [mailto:support@habeas.com]
Sent: Sunday, September 29, 2002 5:51
To: Noel J. Bergman
Subject: RE: Habeas and Apache James
*
Dear Noel,
*
> FURTHERMORE, if James is to be capable of sending Habeas SWE, I need
> to write a Mailet that attaches the headers.  As with any MTA, it
> would be up to the administrator to properly configure James and make
> sure that licenses are acquired.  Since the Habeas Warrant Mark is
> copyright, I believe that I require authorization from you for that
> Mailet, especially since it attaches the Habeas Warrant Mark.  For my
> own protection, please show me why such authorization is unnecessary,
> send me a digitally signed e-mail, or FAX a signed authorization
*
You do not yourself need the authorization to build the functionality
into the [mailet];  what one needs authorization, in the form of a
license, for, is to use the mark *in headers*, in outgoing email.
However, please let me know if you would like something more
formal, and I can try to have something faxed to you.
*
> The Mailet docs would reference the Habeas website, and inform
> administrators that in order to USE the mailet, they need to ensure
> that they have whatever licenses are required from you as appropriate
> to your licensing terms.

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/MetricsMailet.adoc
=====================================================
=== MetricsMailet

This Metrics mailet increments a counter on every incoming emails.

This counter is accessible via JMX, or grafana. Read xref:operate/metrics.adoc[more about metrics].

Example :

....
<mailet match="all" class="MetricsMailet">
    <metricName>relayDenied</metricName>
</mailet>
....

Will increment a counter relayDenied

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMTPAuthUserIs.adoc
=====================================================
=== SMTPAuthUserIs

Matches mails that are sent by an SMTP authenticated user present in a supplied list.

If the sender was not authenticated it will not match.

Configuration string: a comma, tab or space separated list of James users.

....
<mailet match="SMTPAuthUserIs=<list-of-user-names>" class="<any-class>">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/AddDeliveredToHeader.adoc
=====================================================
=== AddDeliveredToHeader

This mailet adds the de-facto standard QMail Delivered-To header.

Upon processing by LocalDelivery, a Delivered-To header matching the recipient mail address will be added before storage.

Example

....
<mailet match="All" class="AddDeliveredToHeader">
....

=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SMIMEDecrypt.adoc
=====================================================
=== SMIMEDecrypt

This mailet decrypts a s/mime encrypted message. It takes as input an
encrypted message and it tries to dechiper it using the key specified in its
configuration. If the decryption is successful the mail will be changed and
it will contain the decrypted message. The mail attribute
*org.apache.james.SMIMEDecrypt* will contain the public
certificate of the key used in the process.

The configuration parameters of this mailet are summarized below. The firsts
define the keystore where the key that will be used to decrypt messages is
saved.

* keyStoreType (default: system dependent): defines the type of the store.
Usually jks, pkcs12 or pkcs7
* keyStoreFileName (mandatory): private key store path.
* keyStorePassword (default: ""): private key store password

The other parameters define which private key have to be used. (if the store
contains more than one key).

* keyAlias: private key alias.
* keyPass: private key password


=====================================================
== File: server/apps/distributed-app/docs/modules/ROOT/partials/SizeGreaterThan.adoc
=====================================================
=== SizeGreaterThan

Checks whether the message (entire message, not just content) is greater
than a certain number of bytes.  You can use 'k' and 'm' as optional postfixes.

In other words, "1m" is the same as writing "1024k", which is the same as
"1048576".

=====================================================
== File: server/apps/distributed-app/docs/README.md
=====================================================
# Building and serving documentation locally

## Executing within source code

(Clone `https://github.com/apache/james-project` locally, go into `server/apps/distributed-app/docs` folder)

**Step 1**: [Install Antora](https://docs.antora.org/antora/2.3/install/install-antora/)

**Step 2**: Build the Antora content locally

```
antora antora-playbook-local.yml
```

**Step 3**: Open `build/site/index.html` in your browser.

## Building from the ZIP package

[Install Antora](https://docs.antora.org/antora/2.3/install/install-antora/).

Unzip `james-server-distributed-app.zip`.

Go in the `docs` folder.

Executing Antora can only be done from within a git repository.

You will need to initialize the git repository:

```
$ git init
$ git add .
$ git commit -m "First commit"
```

Then adapt `antora-playbook-local.yml` to match the git location:

```
site:
  title: Apache James Distributed Server
  url: https://james.apache.org/
  start_page: james-distributed-app::index.adoc
content:
  sources:
    - url: ./
      branches: HEAD
      start_path: ./
ui:
  bundle:
    url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
  supplemental_files: ./ui-overrides

=====================================================
== File: server/apps/distributed-app/docs/antora-playbook-local.yml
=====================================================
#
# Use this configuration for local testing / docs develop.
#
# Note: Executing Antora can only be done from within a git repository.
# When UNZIPPING the application, you will need to initialize the git repository:
#
# $ git init
# $ git add .
# $ git commit -m "First commit"
#
# You may want to update paths below too...
site:
  title: Apache James Distributed Server
  url: https://james.apache.org/
  start_page: james-distributed-app::index.adoc
content:
  sources:
    # url should match the relative position for your git repository. A value for a git repo located in the docs folder would be:
    # - url: ./
    - url: ./../../../../
      branches: HEAD
      # Must match the relative position of the Antora docs files within the git repository stated above.
      # A value for a git repo located in the docs folder would be:
      # start_path: ./
      start_path: server/apps/distributed-app/docs
ui:
  bundle:
    url: https://gitlab.com/antora/antora-ui-default/-/jobs/artifacts/master/raw/build/ui-bundle.zip?job=bundle-stable
  supplemental_files: ./ui-overrides
runtime:
  fetch: true

=====================================================
== File: server/apps/distributed-app/docs/antora.yml
=====================================================
name: james-distributed-app
title: Apache James Distributed Server
version: '3.8.1'
prerelease: SNAPSHOT
nav:
- modules/ROOT/nav.adoc

=====================================================
== File: server/apps/cli-integration-tests/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/apps/cassandra-app/docker-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# Required to locate Cassandra driver configuration
config.file=/root/conf/cassandra-driver.conf

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

=====================================================
== File: server/apps/cassandra-app/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      cassandra:
        condition: service_healthy
      opensearch:
        condition: service_started
      tika:
        condition: service_started
    image: apache/james:cassandra-latest
    container_name: james
    hostname: james.local
    networks:
      - james
    volumes:
      - ${KEYSTORE_PATH}:/root/conf/keystore
    ports:
      - "80:80"
      - "25:25"
      - "110:110"
      - "143:143"
      - "465:465"
      - "587:587"
      - "993:993"
      - "8000:8000"

  opensearch:
    networks:
      james:
        aliases:
          - elasticsearch
    image: opensearchproject/opensearch:2.1.0
    environment:
      - discovery.type=single-node
      - DISABLE_INSTALL_DEMO_CONFIG=true
      - DISABLE_SECURITY_PLUGIN=true

  cassandra:
    image: cassandra:4.1.3
    ports:
      - "9042:9042"
    healthcheck:
      test: ["CMD", "cqlsh", "-e", "describe keyspaces"]
      interval: 3s
      timeout: 20s
      retries: 5
    environment:

=====================================================
== File: server/apps/cassandra-app/README.adoc
=====================================================
= Cassandra Guice Server How-to

*DEPRECATION*: See JAMES-3766. Removal of cassandra-app is planned after Apache James 3.8.0 release.

Users are encouraged to migrate to the distributed server.

*WARNING*: This server only targets single James node deployment on top of a shared database.

It does not target deployments with multiple James nodes as is misses inter-node communication capabilities.

*WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)

== Requirements

 * Java 11 SDK

Firstly, create your own user network on Docker for the James environment:

    $ docker network create --driver bridge james

Third party compulsory dependencies:

 * Cassandra 4.0
 * OpenSearch 2.1.0

[source]
----
$ docker run -d --network james -p 9042:9042 --name=cassandra cassandra:4.1.3
$ docker run -d --network james -p 9200:9200 --name=opensearch --env 'discovery.type=single-node' opensearchproject/opensearch:2.1.0
----

== Running

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/cassandra-app/sample-configuration)
is provided with some default values you may need to replace, especially compulsory third party software endpoints.

You will need to update its content to match your needs.

You also need to generate a keystore with the following command:

[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----

Once everything is set up, you just have to run the jar with:

=====================================================
== File: server/apps/cassandra-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/cassandra-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/cassandra-app/src/test/resources/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit

dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
userPassword: secret
description: James user

=====================================================
== File: server/apps/cassandra-app/src/test/resources/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/cassandra-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add you customs Mailets/Matchers.

=====================================================
== File: server/apps/cassandra-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/cassandra-app/sample-configuration/deletedMessageVault.properties
=====================================================
# ============================================= Deleted Messages Vault Configuration ==================================

enabled=false

# Retention period for your deleted messages into the vault, after which they expire and can be potentially cleaned up
# Optional, default 1y
# retentionPeriod=1y

=====================================================
== File: server/apps/cassandra-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# Required to locate Cassandra driver configuration
config.file=conf/cassandra-driver.conf

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.

=====================================================
== File: server/apps/cassandra-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />
        <logger name="com.datastax.driver.core.QueryLogger.SLOW" level="DEBUG" />

</configuration>

=====================================================
== File: server/apps/cassandra-app/sample-configuration/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details

enabled=true

tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle

# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle

#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
# jwt.publickeypem.url=file://conf/jwt_publickey

# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true

# If you want to specify authentication strategies for Jmap draft version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.draft=AccessTokenAuthenticationStrategy,JWTAuthenticationStrategy,QueryParameterAccessTokenAuthenticationStrategy

# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.rfc8621=JWTAuthenticationStrategy,BasicAuthenticationStrategy

# Prevent server side request forgery by preventing calls to the private network ranges. Defaults to true, can be disabled for testing.
# webpush.prevent.server.side.request.forgery=false

=====================================================
== File: server/apps/cassandra-app/sample-configuration/cassandra-driver.conf
=====================================================
# James reference configuration for the DataStax Java driver for Apache Cassandra®.
#
# Unless you use a custom mechanism to load your configuration (see
# SessionBuilder.withConfigLoader), all the values declared here will be used as defaults.
#
# See https://docs.datastax.com/en/developer/java-driver/4.13/manual/core/configuration/ for
# available options.
#
# Please note that contact point and authentication needs to be set in cassandra.properties for now.
datastax-java-driver {

  basic.request {
    timeout = 5 seconds

    consistency = QUORUM

    page-size = 5000

    serial-consistency = SERIAL
  }

  advanced.connection {
    connect-timeout = 5 seconds

    init-query-timeout = 5 seconds

    pool {
      local.size = 2

      remote.size = 2
    }

    max-requests-per-connection = 1024

    max-orphan-requests = 256

    warn-on-init-error = true
  }

  advanced.throttler {
    // class = org.apache.james.backends.cassandra.utils.LockLessConcurrencyLimitingRequestThrottler
    class = ConcurrencyLimitingRequestThrottler

    max-queue-size = 10000

    max-concurrent-requests = 192
  }

  advanced.reconnect-on-init = true


=====================================================
== File: server/apps/cassandra-app/sample-configuration/batchsizes.properties
=====================================================
# Those properties let you configure the number of messages queried at the same time.
# IMAP FETCH command
fetch.metadata=200
fetch.headers=200
fetch.body=100
fetch.full=50
# IMAP COPY command
copy=100
# IMAP MOVE command
move=100

=====================================================
== File: server/apps/cassandra-app/sample-configuration/activemq.properties
=====================================================
# Configuration file for ActiveMQ AQMP

#
# Metric collection (see https://activemq.apache.org/statisticsplugin.html)
# - broker statistics
# - per-queue statistics (e.g. spool, outgoing)
#

# collect ActiveMQ metrics (i.e. broker statistics, per-queue statistics)
metrics.enabled=false
# add start delay for metric collector (must be greater than 1s)
metrics.start_delay=10s
# collect metrics (must be greater than 5s)
metrics.interval=30s
# timeout (must be less than metrics.interval)
metrics.timeout=2s
# ActiveMQ receive timeout (must be less than metrics.timeout)
metrics.aqmp_timeout=1s

=====================================================
== File: server/apps/cassandra-app/sample-configuration/blob.properties
=====================================================
# ============================================= BlobStore Implementation ==================================
# Read https://james.apache.org/server/config-blobstore.html for further details

# The only available choice is cassandra
# *WARNING*: JAMES-3591 Cassandra is not made to store large binary content, its use will be suboptimal compared to
# alternatives (namely S3 compatible BlobStores backed by for instance S3, MinIO or Ozone)

# ========================================= ObjectStorage deduplication ========================================
# If you choose to enable deduplication, the mails with the same content will be stored only once.
# Warning: Once this feature is enabled, there is no turning back as turning it off will lead to the deletion of all
# the mails sharing the same content once one is deleted.
# Mandatory, Allowed values are: true, false
deduplication.enable=false

# deduplication.family needs to be incremented every time the deduplication.generation.duration is changed
# Positive integer, defaults to 1
# deduplication.gc.generation.family=1

# Duration of generation.
# Deduplication only takes place within a singe generation.
# Only items two generation old can be garbage collected. (This prevent concurrent insertions issues and
# accounts for a clock skew).
# deduplication.family needs to be incremented everytime this parameter is changed.
# Duration. Default unit: days. Defaults to 30 days.
# deduplication.gc.generation.duration=30days

# ============================================ Blobs Exporting ==============================================
# Read https://james.apache.org/server/config-blob-export.html for further details

# Choosing blob exporting mechanism, allowed mechanism are: localFile, linshare
# LinShare is a file sharing service, will be explained in the below section
# Optional, default is localFile
blob.export.implementation=localFile

# ======================================= Local File Blobs Exporting ========================================
# Optional, directory to store exported blob, directory path follows James file system format
# default is file://var/blobExporting
blob.export.localFile.directory=file://var/blobExporting

# ======================================= LinShare File Blobs Exporting ========================================
# LinShare is a sharing service where you can use james, connects to an existing LinShare server and shares files to
# other mail addresses as long as those addresses available in LinShare. For example you can deploy James and LinShare
# sharing the same LDAP repository
# Mandatory if you choose LinShare, url to connect to LinShare service
# blob.export.linshare.url=http://linshare:8080

# ======================================= LinShare Configuration BasicAuthentication ===================================
# Authentication is mandatory if you choose LinShare, TechnicalAccount is need to connect to LinShare specific service.
# For Example: It will be formalized to 'Authorization: Basic {Credential of UUID/password}'


=====================================================
== File: server/apps/cassandra-app/sample-configuration/cassandra.properties
=====================================================
# Configuration file for cassandra mailbox
# Read https://james.apache.org/server/config-cassandra.html for further details
# Advanced Cassandra driver option needs to be set via cassandra-driver.conf configuration file

cassandra.nodes=cassandra
cassandra.keyspace.create=true
cassandra.keyspace=apache_james
#cassandra.user=cassandra
#cassandra.password=cassandra
cassandra.replication.factor=1
cassandra.retryConnection.maxRetries=200
cassandra.retryConnection.minDelay=5000

## These low level tuning options controls performance related options in Cassandra related code
## The default values are documented here. Understand the effects before editing.
# mailbox.read.repair.chance=0.1
## Maximum probability of running a read repair for the mailbox counters
# mailbox.counters.read.repair.chance.max=0.1
## Probability of running a mailbox counters read repair for 100 messages.
## Inversely proportional to the count of messages
## Formula: read_repair_chance = min(mailbox.counters.read.repair.chance.max, (100/unseens)*mailbox.counters.read.repair.chance.one.hundred)
# mailbox.counters.read.repair.chance.one.hundred=0.01
# mailbox.max.retry.acl=1000
# mailbox.max.retry.modseq=100000
# mailbox.max.retry.uid=100000
# mailbox.max.retry.message.flags.update=1000
# mailbox.max.retry.message.id.flags.update=1000
# fetch.advance.row.count=1000
# chunk.size.expunge=100
# mailbox.blob.part.size=102400

# Optional. Allows specifying consistency level ONE for reads in Cassandra BlobStore.
# Falls back to default read consistency level if the blob is missing.
# Defaults to false.
# optimistic.consistency.level.enabled=false

# Optional. Allows not to use lightweight transactions in CassandraMailRepository.
# If disabled we implement an idempotent behaviour (duplicates are overridden, missing entries upon deletes are ignored).
# Defaults to true.
# mailrepository.strong.consistency=true

# Optional, default to 0. Defensive value to add to uids and modseqs generated. This can be used as an heuristic to maintain
# consistency even when consensus of Lightweight Transactions is broken, exemple during a disaster recovery process.
# uid.modseq.increment=0

=====================================================
== File: server/apps/jpa-app/docker-compose.yml
=====================================================
version: '3'

# In order to start James JPA app on top of mariaDB:
# 1. Download the driver: `wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.2/mariadb-java-client-2.7.2.jar`
# 2. Generate the keystore with the default password `james72laBalle`: `keytool -genkey -alias james -keyalg RSA -keystore keystore`
# 3. Start MariaDB: `docker-compose up -d mariadb`
# 4. Start James: `docker-compose up james`

services:

  james:
    depends_on:
      - mariadb
    image: apache/james:jpa-latest
    container_name: james
    hostname: james.local
    volumes:
      - $PWD/mariadb-java-client-2.7.2.jar:/root/libs/mariadb-java-client-2.7.2.jar
      - $PWD/sample-configuration/james-database-mariadb.properties:/root/conf/james-database.properties
      - $PWD/keystore:/root/conf/keystore

  mariadb:
    image: mariadb:10.6
    environment:
      - MARIADB_ROOT_PASSWORD=test
      - MARIADB_DATABASE=test
      - MARIADB_USER=test
      - MARIADB_PASSWORD=test

=====================================================
== File: server/apps/jpa-app/README.adoc
=====================================================
= Guice-JPA Server How-to

This server target single node James deployments. By default, the derby database is used.

== Requirements

 * Java 11 SDK

== Running

To run james, you have to create a directory containing required configuration files.

James requires the configuration to be in a subfolder of working directory that is called
**conf**. A [sample directory](https://github.com/apache/james-project/tree/master/server/apps/jpa-app/sample-configuration)
is provided with some default values you may need to replace. You will need to update its content to match your needs.

You also need to generate a keystore with the following command:

[source]
----
$ keytool -genkey -alias james -keyalg RSA -keystore conf/keystore
----

Once everything is set up, you just have to run the jar with:

[source]
----
$ java -javaagent:james-server-jpa-app.lib/openjpa-3.1.2.jar \
  -Dworking.directory=. \
  -Djdk.tls.ephemeralDHKeySize=2048 \
  -Dlogback.configurationFile=conf/logback.xml \
  -jar james-server-jpa-app.jar
----

Note that binding ports below 1024 requires administrative rights.

== Docker distribution

To import the image locally:

[source]
----
docker image load -i target/jib-image.tar
----

Then run it:

[source]
----
docker run apache/james:jpa-latest

=====================================================
== File: server/apps/jpa-app/src/main/extensions-jars/README.md
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add your custom Mailets/Matchers.

=====================================================
== File: server/apps/jpa-app/src/main/scripts/james-cli
=====================================================
#!/bin/bash

java -cp /root/resources:/root/classes:/root/libs/* org.apache.james.cli.ServerCmd "$@"

=====================================================
== File: server/apps/jpa-app/src/assemble/extensions-jars.txt
=====================================================
# Adding Jars to JAMES

The jar in this folder will be added to JAMES classpath when mounted under /root/extensions-jars inside the running container.

You can use it to add you customs Mailets/Matchers.

=====================================================
== File: server/apps/jpa-app/sample-configuration/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
#guice.extension.module=

=====================================================
== File: server/apps/jpa-app/sample-configuration/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/apps/jpa-app/sample-configuration/jvm.properties
=====================================================
# ============================================= Extra JVM System Properties ===========================================
# To avoid clutter on the command line, any properties in this file will be added as system properties on server start.

# Example: If you need an option -Dmy.property=whatever, you can instead add it here as
# my.property=whatever

# (Optional). String (size, integer + size units, example: `12 KIB`, supported units are bytes KIB MIB GIB TIB). Defaults to 100KIB.
# This governs the threshold MimeMessageInputStreamSource relies on for storing MimeMessage content on disk.
# Below, data is stored in memory. Above data is stored on disk.
# Lower values will lead to longer processing time but will minimize heap memory usage. Modern SSD hardware
# should however support a high throughput. Higher values will lead to faster single mail processing at the cost
# of higher heap usage.
#james.message.memory.threshold=12K

# Optional. Boolean. Defaults to false. Recommended value is false.
# Should MimeMessageWrapper use a copy of the message in memory? Or should bigger message exceeding james.message.memory.threshold
# be copied to temporary files?
#james.message.usememorycopy=false

# Mode level of resource leak detection. It is used to detect a resource not be disposed of before it's garbage-collected.
# Example `MimeMessageInputStreamSource`
# Optional. Allowed values are: none, simple, advanced, testing
#   - none: Disables resource leak detection.
#   - simple: Enables output a simplistic error log if a leak is encountered and would free the resources (default).
#   - advanced: Enables output an advanced error log implying the place of allocation of the underlying object and would free resources.
#   - testing: Enables output an advanced error log implying the place of allocation of the underlying object and rethrow an error, that action is being taken by the development team.
#james.lifecycle.leak.detection.mode=simple

# Should we add the host in the MDC logging context for incoming IMAP, SMTP, POP3? Doing so, a DNS resolution
# is attempted for each incoming connection, which can be costly. Remote IP is always added to the logging context.
# Optional. Boolean. Defaults to true.
#james.protocols.mdc.hostname=true

# Manage netty leak detection level see https://netty.io/wiki/reference-counted-objects.html#leak-detection-levels
# io.netty.leakDetection.level=SIMPLE

# Should James exit on Startup error? Boolean, defaults to true. This prevents partial startup.
# james.exit.on.startup.error=true

# Fails explicitly on missing configuration file rather that taking implicit values. Defautls to false.
# james.fail.on.missing.configuration=true

# JMX, when enable causes RMI to plan System.gc every hour. Set this instead to once every 1000h.
sun.rmi.dgc.server.gcInterval=3600000000
sun.rmi.dgc.client.gcInterval=3600000000

# Automatically generate a JMX password upon start. CLI is able to retrieve this password. Not supported on windows.
james.jmx.credential.generation=true

# Disable Remote Code Execution feature from JMX

=====================================================
== File: server/apps/jpa-app/sample-configuration/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
                <resetJUL>true</resetJUL>
        </contextListener>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <appender name="LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
                <file>/logs/james.log</file>
                <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                    <fileNamePattern>/logs/james.%i.log.tar.gz</fileNamePattern>
                    <minIndex>1</minIndex>
                    <maxIndex>3</maxIndex>
                </rollingPolicy>

                <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                    <maxFileSize>100MB</maxFileSize>
                </triggeringPolicy>

                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>
        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="LOG_FILE" />
        </root>

        <logger name="org.apache.james" level="INFO" />

</configuration>

=====================================================
== File: server/blob/blob-cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
  basic.request {
    timeout = 5 seconds
  }
}

=====================================================
== File: server/protocols/protocols-pop3-distributed/src/test/resources/pop3server.xml
=====================================================
<?xml version="1.0"?>
<pop3server enabled="true">
    <jmxName>pop3server</jmxName>
    <bind>127.0.0.1:0</bind>
    <helloName>myMailServer</helloName>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <connectiontimeout>3600</connectiontimeout>
    <handlerchain>
        <handler class="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
    </handlerchain>
    <gracefulShutdown>false</gracefulShutdown>
</pop3server>

=====================================================
== File: server/protocols/webadmin/webadmin-mailrepository/src/test/resources/mail.eml
=====================================================
Return-Path: <general@list.org>
MIME-Version: 1.0
From: Hello <hello@gmail.com>
Date: Thu, 4 Jun 2015 06:08:41 +0200
Message-ID: <CAN1zdnW5PW7z5msM-TjUpouygxWY6z-25A3WCB-C5BvqDuP1Qw@mail.gmail.com>
To: General Discussion  <general@list.org>
Content-Type: text/plain; charset=UTF-8
Subject: [arch-general] Very important topic
Reply-To: General Discussion <general@list.org>
Sender: "arch-general" <general@list.org>

Hi all,

Very important message!!!

Thanks!

=====================================================
== File: server/protocols/webadmin/webadmin-data/src/test/resources/sieve/my_sieve
=====================================================
require ["reject"];

if size :over 100K {
   reject "Email too big";
}

=====================================================
== File: server/protocols/webadmin/webadmin-pop3/README.md
=====================================================
# Pop3 fix inconsistencies

We introduced an additional webadmin endpoint allowing fixing possible inconsistencies.

In order to run this task:

```bash
curl -XPOST 'http://ip:port/mailboxes?task=fixPop3Inconsistencies'
```

Will schedule a task for deleting stale and inserting missing POP3 meta data entries.

[More details about endpoints returning a task](https://james.staged.apache.org/james-project/3.6.0/servers/distributed/operate/webadmin.html#_endpoints_returning_a_task).

The scheduled task will have the following type `Pop3MetaDataFixInconsistenciesTask` and the following additionalInformation:

```json
{
    "type": "Pop3MetaDataFixInconsistenciesTask",
    "runningOptions": {
        "messagesPerSecond": 100
    },
    "processedImapUidEntries": 0,
    "processedPop3MetaDataStoreEntries": 1,
    "stalePOP3Entries": 1,
    "missingPOP3Entries": 0,
    "fixedInconsistencies": [
        {
            "mailboxId": "6fdae960-c72f-11eb-9b1d-973b9140e460",
            "messageId": "6ffca230-c72f-11eb-9b1d-973b9140e460"
        }
    ],
    "errors": [
        {
            "mailboxId": "7fdae960-c72f-11eb-9b1d-973b9140e460",
            "messageId": "7fdae960-c72f-11eb-2222-973b9140e460"
        }
    ]
}
```

=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message.eml
=====================================================
Return-Path: <mlemos@acm.org>
To: Manuel Lemos <mlemos@linux.local>
Subject: Testing Testing
From: mlemos <mlemos@acm.org>
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300


--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"


--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"


--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

This is an HTML message. Please use an HTML capable mail program to read
this message.

--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>

=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-from.eml
=====================================================
Return-Path: <mlemos@acm.org>
To: Manuel Lemos <mlemos@linux.local>
Subject: Testing Error
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300


--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"


--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"


--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

This is an HTML message. Please use an HTML capable mail program to read
this message.

--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>
<P>Hello Manuel,<br><br>

=====================================================
== File: server/protocols/webadmin/webadmin-mail-over-web/src/test/resources/message/rfc822/message-without-tos.eml
=====================================================
Return-Path: <mlemos@acm.org>
Subject: Testing Error
From: mlemos <mlemos@acm.org>
Reply-To: mlemos <mlemos@acm.org>
Sender: mlemos@acm.org
X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf"
Message-ID: <20050430192829.0489.mlemos@acm.org>
Date: Sat, 30 Apr 2005 19:28:29 -0300


--652b8c4dcb00cdcdda1e16af36781caf
Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc"


--6a82fb459dcaacd40ab3404529e808dc
Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f"


--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

This is an HTML message. Please use an HTML capable mail program to read
this message.

--69c1683a3ee16ef7cf16edd700694a2f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

<html>
<head>
<title>Testing Manuel Lemos' MIME E-mail composing and sending PHP class: H=
TML message</title>
<style type=3D"text/css"><!--
body { color: black ; font-family: arial, helvetica, sans-serif ; backgroun=
d-color: #A3C5CC }
A:link, A:visited, A:active { text-decoration: underline }
--></style>
</head>
<body>
<table background=3D"cid:4c837ed463ad29c820668e835a270e8a.gif" width=3D"100=
%">
<tr>
<td>
<center><h1>Testing Manuel Lemos' MIME E-mail composing and sending PHP cla=
ss: HTML message</h1></center>
<hr>
<P>Hello Manuel,<br><br>

=====================================================
== File: server/protocols/jmap-draft/doc/annotation.css
=====================================================
aside {
  padding: 1em;
  margin-top: 1.5em;
  margin-bottom: 1.5em;
  background: #6F8000;
  line-height: 1.6;
  font-family: 'FontAwesome';
}
aside:before {
  padding-right: 0.5em;
  font-size: 14px;
}
aside.warning { background: #ac5c64; }
aside.warning:before { content: "\f071"; }
aside.notice { background: #67875C; }
aside.notice:before { content: "\f06a"; }

=====================================================
== File: server/protocols/jmap-draft/doc/Dockerfile
=====================================================
FROM iron/python:2-dev

RUN pip install mkdocs

COPY . /doc

RUN find . -name "*.mdwn" | while IFS= read -r f; do mv -v "$f" "$(echo "$f" | sed -e 's/.mdwn$/.md/' - )"; done

RUN mv /doc/specs/spec/apimodel.md /doc/specs/index.md

WORKDIR /doc

RUN mkdocs build --clean

WORKDIR site

EXPOSE 8000

CMD python -m SimpleHTTPServer 8000

=====================================================
== File: server/protocols/jmap-draft/doc/specs/client-guide/jmap-client-guide.mdwn
=====================================================
Guide for client developers
===========================

This guide shows how you can use JMAP to efficiently minimise bandwidth usage and round trips whilst still giving the user a complete view of their mail. This is particularly relevant to clients on mobile devices, where there is not the space to store a complete cache of all messages, or for web clients where you often do not have a permanent cache at all and must efficiently start from scratch each time the app is loaded.

A single login may have access to multiple accounts. In this guide I'm going to ignore this and just use the primary account, which I'm going to presume has full read-write mail access.

## Cold boot

When a user first logs in and you have no data cached for them, first call:

    [
        [ "getMailboxes", {}, "#0" ]
    ]

This will fetch the list of mailboxes (folders or labels) for the user, and the permissions and roles for each. Here's an example of the response you might receive:

    [
        [ "mailboxes", {
            accountId: 'user@example.com',
            state: "m123456789",
            list: [
                {
                    id: "mailbox1",
                    name: "Inbox",
                    parentId: null,
                    role: "inbox",
                    mustBeOnlyMailbox: false,
                    mayAddMessages: true,
                    mayRemoveMessages: true,
                    mayCreateChild: false,
                    mayRenameMailbox: true,
                    mayDeleteMailbox: false,
                    totalMessages: 1424,
                    unreadMessages: 3,
                    totalThreads: 1213,
                    unreadThreads: 2
                },
                {
                    id: "mailbox2",
                    name: "Sent",
                    parentId: null,
                    role: "sent",
                    mustBeOnlyMailbox: false,
                    mayAddMessages: true,
                    mayRemoveMessages: true,
                    mayCreateChild: false,
                    mayRenameMailbox: true,
                    mayDeleteMailbox: false,
                    totalMessages: 41,

=====================================================
== File: server/protocols/jmap-draft/doc/specs/home/faq.mdwn
=====================================================
# JMAP

<p style="margin-left:-40px;"><iframe width="780" height="469" src="http://www.youtube.com/embed/8qCSK-aGSBA?version=3&amp;rel=0&amp;fs=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;wmode=transparent" frameborder="0" allowfullscreen="true"></iframe></p>

## What is JMAP?

JMAP is a transport-agnostic, stateless JSON-based API for synchronising a mail client with a mail server. It is intended as a replacement for IMAP. The specification is based on the API currently used by [FastMail](https://www.fastmail.com)'s web app.  It aims to be compatible with the IMAP data model, so that it can be easily implemented on a server that currently supports IMAP, but also allows for reduced data usage and more efficient synchronisation, bundling of requests for latency mitigation and is generally much easier to work with than IMAP.

## Why is it not REST based?

JMAP is actually more REST-like than most "RESTful" APIs. It is stateless, highly cacheable, supports transparent intermediaries and provides a uniform interface for manipulating different resources. However, it doesn't use HTTP verbs to implement this.

When you have a high latency connection (such as on a mobile phone, or even wired connections from the other side of the world), the extra round trips required for an HTTP REST-based protocol can make a huge impact on  performance. This is especially an issue when you have an order-dependency in your API calls and you need to make sure one has finished before the other can be run (for example when you mutate the state of a message then want to fetch the changes to a mailbox containing the message). In the JMAP protocol, this can be done in a single round trip. An HTTP REST-based version would require two full round trips for the same operation.

The JMAP protocol is transport agnostic and can be easily transported over a WebSocket, for example, as well as HTTP.

## Why is it not a binary protocol?

A binary protocol would be arguably more compact and faster to encode/parse. However, history has shown text-based protocols are much easier to debug, and by using an existing widely-used encoding format (JSON) we make it much easier for developers to use this protocol. No need to write new custom, error-prone parsers. The difference in speed is likely to be minimal, especially if you GZIP the exchange and use WebSockets instead of HTTP.

## Why do labels apply to messages not threads?

Mutable state has to be stored per-message, for example the `isUnread` status must apply on a per message basis, and it's very useful to be able to flag a particular useful message rather than just the whole thread. To be able to delete a particular message to the Trash out of a thread, you need to be able to change the mailbox of that message. Sent messages should belong to the sent mailbox, but not messages you receive.

Meanwhile, it is simple to aggregate the information of the messages in the thread. So, for example, if any message in the thread is unread, then the thread can be considered unread. There is no need to store mutable state as a property of a thread therefore, and the less mutable state, the easier it is to manage. Finally, all known existing IMAP implementations, plus Gmail, store this state per-message, not per-thread, so it makes it easier for implementors to migrate to JMAP.

## Why are there flags (e.g. isUnread) separate to mailboxes?

In IMAP, you can only have one mailbox but you can have multiple flags on a single message. In other systems (where you have labels), these are really the same thing and you can have a single message in multiple mailboxes. JMAP aims to support both, so it has to be able to specify whether a mailbox can be used in combination with other mailboxes on a message, or must be the only one with the message (but does allow different flags). The clearest way of specifying what is allowed by the server is to keep the mailboxes separate to flags in JMAP as well.

## Why isUnread instead of isRead?

Although this may seem inconsistent at first, it actually makes more sense. The "special" status is when a message is unread (this is what clients are interested in), so like isDraft, isFlagged and isAnswered, we make the special status equal to `true`. It is also consistent with the need for unread counts in mailbox objects, not read counts, and makes the definition of sorting a message list the same for isFlagged and isUnread when conversations are collapsed.

## I want to get involved with JMAP. What do I need to know?

First of all, you should join the [JMAP mailing list](https://groups.google.com/forum/#!forum/jmap-discuss). Feedback is welcome: send your thoughts or comments on anything that is imprecise, incomplete, or could simply be done better in another way. Or if you're working on something JMAP related, this list is a good place to let other people know and to raise any issues you come across.

The specification itself is [hosted on GitHub](https://github.com/jmapio/jmap). If you've found a typo or other minor change, feel free to just submit a pull request. Otherwise, discussion on the mailing list first is preferred.

## I want to implement it. What do I need to know?

That's great! There are lots of resources on this website to help you. Counter-intuitive though it may seem, I recommend starting with the [guide for client authors](client.html) to get a good feel for how the JMAP spec works. After that though, [the spec](spec.html) is your bible and the [advice for implementors](server.html) is your friend.

If you're implementing the spec and suddenly find there's an externally visible behaviour that's not specified, please email the [mailing list](https://groups.google.com/forum/#!forum/jmap-discuss) so we can update the spec to nail down this corner.

## I want to use it to build a client. What do I need to know?

Have a read through the [client guide](client.html) to get an idea of how it works. Then you'll want to find a JMAP server to test against.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/software/software.mdwn
=====================================================
# JMAP software

JMAP is still young but several implementations already exist, and more are on the way. If you're working on a project that uses JMAP, please email the [mailing list](https://groups.google.com/forum/#!forum/jmap-discuss) and we'll add it here.

## Clients

* **[JMAP Demo Webmail](https://github.com/jmapio/jmap-demo-webmail)** (JavaScript, MIT): a sophisticated demo webmail client to be used as a base for new projects. Default client for the [proxy](https://proxy.jmap.io).

## Servers

* **[JMAP Proxy](https://github.com/jmapio/jmap-perl)** (Perl, MIT): a complete JMAP server implementation that uses any IMAP, CalDAV and CardDAV store as a backend. Also available as a hosted service at [proxy.jmap.io](https://proxy.jmap.io).
* **[Cyrus IMAP](https://docs.cyrus.foundation/imap/release-notes/3.0/x/3.0.0-beta1.html)** (C, BSD-style): A scalable enterprise-grade IMAP, CalDAV and CardDAV server. The 3.0 series is adding JMAP support.
* **[salada](https://github.com/robn/salada)** (Rust, MIT): A small standalone JMAP server, suitable for development and experimentation.

## Libraries

* **[JMAP-JS](https://github.com/jmapio/jmap-js)** (JavaScript, MIT): a full implementation of the JMAP mail, calendar and contacts model in JavaScript. It supports asynchronous local changes and is tolerant of network failure – actions will update the UI instantly, then synchronise changes back to the server when it can. It also has multi-level undo/redo support. Used by the [demo webmail](https://github.com/jmapio/jmap-demo-webmail).
* **[jmap-client](https://github.com/linagora/jmap-client)** (JavaScript ES6, MIT): a simple promise-based API to send requests to a JMAP server.
* **[jmap-rs](https://github.com/robn/jmap-rs)** (Rust, MIT): JMAP parser, generator and data model library for Rust. Used by [salada](https://github.com/robn/salada).

=====================================================
== File: server/protocols/jmap-draft/doc/specs/server-guide/jmap-server-guide.mdwn
=====================================================
# Advice for JMAP implementors

This document describes a recommended set of data structures and algorithms for efficiently implementing JMAP. It is intended to serve as suggestions only; there may well be better ways to do it. The spec is the authoritative guide on what constitutes a conformant JMAP implementation.

## Assigning Message Ids
 
A good way of assigning a message id is to sha1 the RFC2822 message and take the first 80 bits (this is sufficient for avoiding collisions in any reasonable sized instance, but the server may choose any length it likes). If this is already in use (i.e. another copy of the message already exists), sha1 the GUID. Repeat until there is no collision. The bytes can be represented in any reasonable encoding for transmission as a `String` within the API.

## Modification sequences

A modification sequence, or **modseq**, is a 63-bit monotonically incrementing counter. Each user has their own modseq counter (in IMAP it's originally per-mailbox, but per user is backwards compatible with this). Every time a change occurs to data within the user, the modseq is incremented by one and the new value is associated with the changes. This is used in a number of data structures and algorithms below to efficiently calculate changes.

## Data structures

As ever in programming, get your data structures right and the server will practically write itself.

There are three types of data structures suggested in this guide (excluding the email indexing for search, which is more complicated than this guide is prepared to go into):

1. A **Map** (associative array) of id to variable-length data blob:
   - Insert should be O(1).
   - Lookup should be O(1).
   - Delete should be O(1).
   - Not ordered, but we need to be able to iterate over all the values.
2. An **append-only log** of variable length blobs:
   - Insert is only at tail.
   - Lookup needs to be able to binary search (based on modseq) to find start location, then read sequentially.
   - Delete is only at head.
3. An **Ordered list** of fixed-sized objects:
   - Insert is mainly at or near the head, but can be in a random location.
   - Want to be able to read sequentially from head (common case), or read whole structure into memory and sort.
   - Delete is mainly near head, but can be in a random location.

### 1. User

This is a simple collection of important top-level values for the user (kept in a **Map**):

- Highest ModSeq for the user (`63 bits` for IMAP compatibility)
- Highest ModSeq of any Mailbox.
- Low watermark ModSeq for Thread Log `63 bits` – whenever the thread log (see below) is truncated, the modseq of the new first item in the log is stored here. Any attempt to call *getThreadUpdates* with a modseq lower than this must be rejected with a `cannotCalculateUpdates` error.
- Low watermark ModSeq for Message Log `63 bits` – the same, but for the message log.
- Quota available in bytes (63 bits. -1 => Don't care)
- Quota used in bytes `63 bits`
- List of other users with mailboxes made available to this user (shared mailboxes) (var length).
 
### 2. Mailboxes

A map of Mailbox Id to all of the mailbox object values (as defined in the spec, including the counts). For the purposes of calculating `getMailboxUpdates`, also include the following for each mailbox:

- **Mailbox ModSeq** `63 bits` Updated when any of the mailbox properties (as defined in the spec) change – not updated when the mailbox message list changes.
- **Mailbox Non-Counts ModSeq** `63 bits` Updated when any of the mailbox properties that are not counts change. When calculating `getMailboxUpdates`, if this is lower than the previous mod seq, but the Mailbox ModSeq is higher, then only counts have changed.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/vacationresponse.mdwn
=====================================================
## Vacation Response

The **VacationResponse** object represents the state of vacation-response
related settings for an account. It has the following properties:

- **id**: `String`
  The id of the object. This property is immutable. There is only ever one
  vacation response object, and its id is `"singleton"`.
- **isEnabled** `Boolean`
  Is the vacation response enabled?
- **fromDate**: `Date|null`
  If *isEnabled* is `true`, the date/time after which messages that arrive should receive the user's vacation response, in UTC. If `null`, the vacation response is effective immediately.
- **toDate**: `Date|null`
  If *isEnabled* is `true`, the date/time after which messages that arrive should no longer receive the user's vacation response, in UTC. If `null`, the vacation response is effective indefinitely.
- **textBody**: `String`
  The plain text message to send in response to messages when the vacation response is enabled.

### getVacationResponse

There MUST only be exactly one VacationResponse object in an account. It MUST have the id `"singleton"`.

To fetch the vacation response object, make a call to `getVacationResponse`. It takes the following argument:

- **accountId**: `String|null`
  The Account to get the vacation response for. If `null`, the primary account is used.

The response to *getVacationResponse* is called *vacationResponse*. It has the following arguments:

- **accountId**: `String`
  The id of the account used for the call.
- **list**: `VacationResponse[]`
  An array containing the single VacationResponse object.

The following errors may be returned instead of the *vacationResponse* response:

`accountNotFound`: Returned if an *accountId* was explicitly included with the request, but it does not correspond to a valid account.

`accountNoMail`: Returned if the *accountId* given corresponds to a valid account, but does not contain any mail data.

### setVacationResponse

Sets properties on the vacation response object. It takes the following arguments:

- **accountId**: `String|null`
  The Account to set the vacation response for. If `null`, the primary account is used.
- **update**: `String[VacationResponse]|null`
  A map of id ("singleton") to the VacationResponse object with new values for the properties you wish to change. The object may omit any property; only properties that have changed need be included.

If any of the properties in the update are invalid (immutable and different to the current server value, wrong type), the server MUST reject the update with a SetError of type `invalidProperties`. The SetError object SHOULD contain a property called *properties* of type `String[]` that lists **all** the properties that were invalid. The object MAY also contain a *description* property of type `String` with a user-friendly description of the problems.


=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/searchsnippet.mdwn
=====================================================
## SearchSnippets
<aside class="warning">
Not implemented
</aside>

When doing a search on a `String` property, the client may wish to show the relevant section of the body that matches the search as a preview instead of the beginning of the message, and to highlight any matching terms in both this and the subject of the message. Search snippets represent this data.

A **SearchSnippet** object has the following properties:

- **messageId**: `String`
  The message id the snippet applies to.
- **subject**: `String|null`
  If text from the filter matches the subject, this is the subject of the message HTML-escaped, with matching words/phrases wrapped in `<mark></mark>` tags. If it does not match, this is `null`.
- **preview**: `String|null`
  If text from the filter matches the plain-text or HTML body, this is the relevant section of the body (converted to plain text if originally HTML), HTML-escaped, with matching words/phrases wrapped in `<mark></mark>` tags, up to 256 characters long. If it does not match, this is `null`.

It is server-defined what is a relevant section of the body for preview. If the server is unable to determine search snippets, it MUST just return `null` for both the *subject* and *preview* properties.

Note, unlike most data types, a SearchSnippet DOES NOT have a property called `id`.

### getSearchSnippets

To fetch search snippets, make a call to `getSearchSnippets`. It takes the following arguments:

- **accountId**: `String|null`
  The id of the account to use for this call. If `null`, defaults to the primary account.
- **messageIds**: `String[]`
  The list of ids of messages to fetch the snippets for.
- **filter**: `FilterCondition|FilterOperator|null`
  The same filter as passed to getMessageList; see the description of this method for details.

The response to `getSearchSnippets` is called `searchSnippets`. It has the following arguments:

- **accountId**: `String`
  The id of the account used for the call.
- **filter**: `FilterOperator`
  Echoed back from the call.
- **list**: `SearchSnippet[]`
  An array of SearchSnippets objects for the requested message ids. This may not be in the same order as the ids that were in the request.
- **notFound**: `String[]|null`
  An array of message ids requested which could not be found, or `null` if all
  ids were found.

Since snippets are only based on immutable properties, there is no state string or update mechanism needed.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/push.mdwn
=====================================================
## Push
<aside class="warning">
Not implemented
</aside>

Any modern email client should be able to update instantly whenever the data on the server is changed by another client or message delivery. Push notifications in JMAP occur out-of-band (i.e. not over the same connection as API exchanges) so that they can make use of efficient native push mechanisms on different platforms.

The general model for push is simple and does not send any sensitive data over the push channel, making it suitable for use with less trusted 3rd party intermediaries. The format allows multiple changes to be coalesced into a single push update, and the frequency of pushes to be rate limited by the server. It doesn't matter if some push events are dropped before they reach the client; it will still get all changes next time it syncs.

When something changes on the server, the server pushes a small JSON object to the client with the following property:

- **changed**: `String[ChangedStates]`
  A map of *account id* to an object encoding the state of data types which have changed for that account since the last push event, for each of the accounts to which the user has access and for which something has changed.

A **ChangedStates** object is a map of the type name (e.g. "Mailbox" or "Message") to the current state token for that type (i.e. the "state" property that would currently be returned by a call to "getMailboxes" or "getMessages", as appropriate). The types in JMAP are "Mailbox", "Thread", "Message", "ContactGroup", "Contact", "Calendar", "CalendarEvent".

Upon receiving this data, the client can compare the new state strings with its current values to see whether it has the current data for these types. The actual changes can then be efficiently fetched in a single standard API request (using the *getFooUpdates* type methods).

### Event Source

There are two mechanisms by which the client can receive the push events. The first is directly via a `text/event-stream` resource, as described in
<http://www.w3.org/TR/eventsource/>. This is essentially a long running HTTP request down which the server can push data. When a change occurs, the server MUST push an event called **state** to any connected clients.

The server MAY also set a new `Last-Event-Id` that encodes the entire server state visible to the user. When a new connection is made to the event-source endpoint, the server can then work out whether the client has missed some changes which it should send immediately.

The server MUST also send an event called **ping** with an empty object as the data if a maximum of 5 minutes has elapsed since the previous event. This MUST NOT set a new `Last-Event-Id`. A client may detect the absence of these to determine that the HTTP connection has been dropped somewhere along the route and so it needs to re-establish the connection.

Refer to the Authentication section of this spec for details on how to get the URL for the event-source endpoint. The request must be authenticated using an `Authorization` header like any HTTP request.

A client MAY hold open multiple connections to the event-source, although it SHOULD try to use a single connection for efficiency.

### setPushCallback

The second push mechanism is to register a callback URL to which the JMAP server will make an HTTPS POST request whenever the event occurs. The request MUST have a content type of `application/json` and contain the same UTF-8 JSON encoded object as described above as the body.

The JMAP server MUST also set the following headers in the POST request:
- `X-JMAP-EventType: state`
- `X-JMAP-User: ${username}` where `${username}` is the username of the authenticated user for which the push event occurred.

The JMAP server MUST follow any redirects. If the final response code from the server is `2xx`, the callback is considered a success. If the response code is `503` (Service Unavailable), the JMAP server MAY try again later (but may also just drop the event). If the response code is `429` (Too Many Requests) the JMAP server SHOULD attempt to reduce the frequency of pushes to that URL. Any other response code SHOULD be considered a **permanent failure** and the callback should be deregistered (not tried again even for future events unless explicitly re-registered by the client).

The URL set by the client MUST use the HTTPS protocol and SHOULD encode within it a unique token that can be verified by the server to know that the request comes from the JMAP server the authenticated client connected to.

The callback is tied to the access token used to create it. Should the access token expire or be revoked, the callback MUST be removed by the JMAP server. The client MUST re-register the callback after reauthenticating to resume callbacks.

Each session may only have a single callback URL registered. To set it, make a call to *setPushCallback*. It takes the following argument:

- **callback**: `String|null`
  The (HTTPS) URL the JMAP server should POST events to. This will replace any previously set URL. Set to `null` to just remove any previously set callback URL.


=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/calendarevent.mdwn
=====================================================
## Calendar Events
<aside class="warning">
Not implemented
</aside>

A CalendarEvent contains information about an event, or recurring series of events, that takes place at a particular time. The object is designed to be easily convertible to/from iCalendar format ([RFC 5545](https://tools.ietf.org/html/rfc5545)) for compatibility with existing calendaring systems.

A **CalendarEvent** object has the following properties:

- **id**: `String`
  The id of the event. This property is immutable.
- **calendarId**: `String`
  The id of the calendar this event belongs to.
- **summary**: `String`
  A short summary of the event. This maps to the SUMMARY property in iCalendar.
- **description**: `String`
  A longer form description of the event. This is plain text, not HTML, but
  a client *should* attempt to mark up URLs. This maps to the DESCRIPTION property in iCalendar.
- **location**: `String`
  Where the event is to take place. This maps to the LOCATION property in iCalendar.
- **showAsFree**: `Boolean`
  If true, the even should be ignored when calculating free/busy data for the
  user. This maps to the TRANSP property in iCalendar (`false <=> OPAQUE`, `true <=> TRANSPARENT`).
- **isAllDay**: `Boolean`
  Is the event an all day event, such as a birthday or public holiday? This corresponds to the type (DATE or DATE-TIME) of the DTSTART property in iCalendar.
- **start**: `LocalDate`
  The date/time the event would start in the event's time zone. This corresponds to the DTSTART property in iCalendar.
- **end**: `LocalDate`
  The date/time the event would end in the event's time zone. This corresponds to the DTSTART/DURATION or DTEND property in iCalendar.
- **startTimeZone**: `String|null`
  The [Olsen Time Zone Database](http://www.iana.org/time-zones) name for the timezone the start of the event is actually in, or `null` for floating time. This corresponds to the TZID part of the DTSTART property; if the underlying iCalendar file does not use an Olsen name, the server SHOULD try to guess the correct time zone based on the VTIMEZONE information, or fallback to floating time.
- **endTimeZone**: `String|null`
  The [Olsen Time Zone Database](http://www.iana.org/time-zones) name for the timezone the end of the event is actually in, or `null` for floating time. This corresponds to the TZID part of the DTEND property (or DTSTART if not present); if the underlying iCalendar file does not use an Olsen name, the server SHOULD try to guess the correct time zone based on the VTIMEZONE information, or fallback to floating time.
- **recurrence**: `Recurrence|null`
  The recurrence rule for the event, or `null` if it does not recur. This corresponds to the RRULE property in iCalendar.
- **inclusions**: `LocalDate[]|null`
  List of extra **local** start times to recur on. The list MUST be sorted in date order (oldest first). This corresponds to the RDATE property in iCalendar.
- **exceptions**: `LocalDate[null|CalendarEvent]|null`
  An object mapping an occurrence start time (in **local time**, not UTC) to either:
  - `null`: The occurrence has been deleted. This corresponds to the EXDATE property in iCalendar.
  - `CalendarEvent`: A partial CalendarEvent object. Any properties in the object override the property of the same name for this occurrence. This corresponds to extra VEVENTs with RECURRENCE-IDs in iCalendar. Allowed properties are:
    - summary
    - description
    - location
    - showAsFree
    - start
    - end
    - startTimeZone
    - endTimeZone
    - alerts

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/thread.mdwn
=====================================================
## Threads
<aside class="warning">
Not implemented
</aside>

Replies are grouped together with the original message to form a thread. In JMAP, a thread is simply a flat list of messages, ordered by date. Every message MUST belong to a thread, even if it is the only message in the thread.

The JMAP spec does not require the server to use any particular algorithm for determining whether two messages belong to the same thread, however there is a recommended algorithm in the [implementation guide](server.html).

If messages are delivered out of order for some reason, a user may receive two messages in the same thread but without headers that associate them with each other. The arrival of a third message in the thread may provide the missing references to join them all together into a single thread. Since the `threadId` of a message is immutable, if the server wishes to merge the threads, it MUST handle this by deleting and reinserting (with a new message id) the messages that change threadId.

A **Thread** object has the following properties:

- **id**: `String`
  The id of the thread. This property is immutable.
- **messageIds**: `String[]`
  The ids of the messages in the thread, sorted such that:
  - Any message with `isDraft == true` and an *inReplyToMessageId* property that corresponds to another message in the thread comes immediately after that message in the sort order.
  - Other than that, everything is sorted in date order (the same as the *date* property on the Message object), oldest first.

### getThreads

Threads can only be fetched explicitly by id. To fetch threads, make a call to *getThreads*. It takes the following arguments:

- **accountId**: `String|null`
  The id of the account to use for this call. If not given, defaults to the primary account.
- **ids**: `String[]`
  An array of ids for the threads to fetch.
- **fetchMessages**: `Boolean|null`
  If true, after outputting a *threads* response, an implicit call will be made to *getMessages* with a list of all message ids in the returned threads as the *ids* argument, and the *fetchMessageProperties* argument as the *properties* argument. If `false` or `null`, no implicit call will be made.
- **fetchMessageProperties**: `String[]|null`
  The list of properties to fetch on any fetched messages. See *getMessages* for a full description.

The response to *getThreads* is called *threads*. It has the following arguments:

- **accountId**: `String`
  The id of the account used for the call.
- **state**: `String`
  A string encoding the current state on the server. This string will change
  if any threads change (that is, new messages arrive, or messages are deleted, as these are the only two events that change thread membership). It can be passed to *getThreadUpdates* to efficiently get the list of changes from the previous state.
- **list**: `Thread[]`
  An array of Thread objects for the requested thread ids. This may not be in the same order as the ids were in the request.
- **notFound**: `String[]|null`
  An array of thread ids requested which could not be found, or `null` if all ids were found.

The following errors may be returned instead of the `threads` response:

`accountNotFound`: Returned if an *accountId* was explicitly included with the request, but it does not correspond to a valid account.

`accountNoMail`: Returned if the *accountId* given corresponds to a valid account, but does not contain any mail data.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/mailbox.mdwn
=====================================================
## Mailboxes

A mailbox represents a named set of emails. This is the primary mechanism for organising messages within an account. It is analogous to a folder in IMAP or a label in other systems. A mailbox may perform a certain role in the system.

A **Mailbox** object has the following properties:

- **id**: `String`
  The id of the mailbox. This property is immutable.
- **name**: `String`
  User-visible name for the mailbox, e.g. "Inbox". This may be any UTF-8 string of at least 1 character in length and maximum 256 bytes in size. Mailboxes MAY have the same name as a sibling Mailbox.
- **parentId**: `String|null`
  <aside class="warning">
  Not implemented
  </aside>
  The mailbox id for the parent of this mailbox, or `null` if this mailbox is at the top level. Mailboxes form acyclic graphs (forests) directed by the child-to-parent relationship. There MUST NOT be a loop.
- **role**: `String|null`
  <aside class="notice">
  The role of a mailbox depends actually on the mailbox name.
  We should implement RFC 6154 in James in order to fully support this feature.
  </aside>
  Identifies system mailboxes. This property is immutable.

  The following values SHOULD be used for the relevant mailboxes:

  - `inbox` – the mailbox to which new mail is delivered by default, unless diverted by a rule or spam filter etc.
  - `archive` – messages the user does not need right now, but does not wish to delete.
  - `drafts` – messages the user is currently writing and are not yet sent.
  - `outbox` – messages the user has finished writing and wishes to send (see the `setMessages` method description for more information). A mailbox with this role MUST be present if the user is allowed to send mail through an account. If not present, the user MAY NOT send mail with that account.
  - `sent` – messages the user has sent.
  - `trash` – messages the user has deleted.
  - `spam` – messages considered spam by the server.
  - `templates` – drafts which should be used as templates (i.e. used as the basis for creating new drafts).

  No two mailboxes may have the same role. Mailboxes without a known purpose MUST have a role of `null`.

  An account is not required to have mailboxes with any of the above roles. A client MAY create new mailboxes with a role property to help them keep track of a use-case not covered by the above list. To avoid potential conflict with any special behaviour a server might apply to mailboxes with certain roles in the future, any roles not in the above list created by the client must begin with `"x-"`. The client MAY attempt to create mailboxes with the standard roles if not already present, but the server MAY reject these.
- **sortOrder**: `Number`
  Defines the sort order of mailboxes when presented in the UI, so it is
  consistent between devices. The number MUST be an integer in the range
  0 <= sortOrder < 2^31.

  A mailbox with a lower order should be displayed before a mailbox with
  a higher order (but the same parent) in any mailbox listing in the
  client's UI. Mailboxes with equal order should be sorted in
  alphabetical order by name. The sorting should take into locale-specific
  character order convention.
- **mustBeOnlyMailbox**: `Boolean`
  <aside class="warning">
  Not implemented
  </aside>

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/message.mdwn
=====================================================
## Messages

Just like in IMAP, a message is **immutable** except for the boolean `isXXX` status properties and the set of mailboxes it is in. This allows for more efficient caching of messages, and gives easier backwards compatibility for servers implementing an IMAP interface to the same data.

JMAP completely hides the complexities of MIME. All special encodings of either headers or the body, such as [base64](https://tools.ietf.org/html/rfc4648), or [RFC2047](http://tools.ietf.org/html/rfc2047) encoding of non-ASCII characters, MUST be fully decoded into standard UTF-8.

A **Message** object has the following properties:

- **id**: `String`
  <aside class="notice">
  Work in progress. Unique message id is generated by concatenate the username, the mailboxId and the uid.
  </aside>
  The id of the message.
- **blobId**: `String`
  <aside class="warning">
  Not implemented
  </aside>
  The id representing the raw RFC2822 message. This may be used to download
  the original message or to attach it directly to another message etc.
- **threadId**: `String`
  <aside class="warning">
  Not implemented
  </aside>
  The id of the thread to which this message belongs.
- **mailboxIds**: `String[]` (Mutable)
  The ids of the mailboxes the message is in. A message MUST belong to one or more mailboxes at all times (until it is deleted).
- **inReplyToMessageId**: `String|null`
  The id of the Message this message is a reply to. This is primarily for drafts, but the server MAY support this for received messages as well by looking up the RFC2822 Message-Id referenced in the `In-Reply-To` header and searching for this message in the user's mail.
- **isUnread**: `Boolean` (Mutable)
  Has the message not yet been read? This corresponds to the **opposite** of the `\Seen` system flag in IMAP.
- **isFlagged**: `Boolean` (Mutable)
  Is the message flagged? This corresponds to the `\Flagged` system flag in IMAP.
- **isAnswered**: `Boolean` (Mutable)
  Has the message been replied to? This corresponds to the `\Answered` system flag in IMAP.
- **isDraft**: `Boolean` (Mutable by the server only)
  Is the message a draft? This corresponds to the `\Draft` system flag in IMAP.
- **hasAttachment**: `Boolean`
  Does the message have any attachments?
- **headers**: `String[String]`
  A map of header name to (decoded) header value for all headers in the message. For headers that occur multiple times (e.g. `Received`), the values are concatenated with a single new line (`\n`) character in between each one.
- **from**: `Emailer|null`
  An Emailer object (see below) containing the name/email from the parsed `From` header of the email. If the email doesn't have a `From` header, this is `null`.
- **to**:  `Emailer[]|null`
  An array of name/email objects (see below) representing the parsed `To` header of the email, in the same order as they appear in the header. If the email doesn't have a `To` header, this is `null`. If the header exists but does not have any content, the response is an array of zero length.
- **cc**:  `Emailer[]|null`
  An array of name/email objects (see below) representing the parsed `Cc` header of the email, in the same order as they appear in the header. If the email doesn't have a `Cc` header, this is `null`. If the header exists but does not have any content, the response is an array of zero length.
- **bcc**:  `Emailer[]|null`
  An array of name/email objects (see below) representing the parsed `Bcc` header of the email. If the email doesn't have a `Bcc` header (which will be true for most emails outside of the Sent mailbox), this is `null`. If the header exists but does not have any content, the response is an array of zero length.
- **replyTo**: `Emailer|null`
  An Emailer object (see below) containing the name/email from the parsed `Reply-To` header of the email. If the email doesn't have a `Reply-To` header, this is `null`.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/account.mdwn
=====================================================
## Accounts
<aside class="warning">
Not implemented
</aside>

A single login may provide access to multiple accounts, for example if another user is sharing their mail with the logged in user.

All data belongs to an account. With the exception of a few explicit operations to copy data between accounts, all methods take an *accountId* argument that specifies on which account the operations are to take place. This argument is always optional; if not specified, the primary account is used. All ids (other than Account ids of course) are only unique within their account.

An **Account** object has the following properties:

- **id**: `String`
  The id of the account. This property is immutable.
- **name**: `String`
  A user-friendly string to show when presenting content from this account. e.g. the email address of the account.
- **isPrimary**: `Boolean`
  This MUST be true for exactly one of the accounts returned.
- **capabilities**: `AccountCapabilities`
  An object describing general capabilities of this server.
- **mail**: `MailCapabilities|null`
  If `null`, this account does not support mail, and any use of the mail-related methods with this account will result in an `accountNoMail` error. Otherwise, it will be an object describing certain capabilities of the mail system.
- **contacts**: `ContactsCapabilities|null`
  If `null`, this account does not support contacts, and any use of the contacts-related methods with this account will result in an `accountNoContacts` error. Otherwise, it will be an object describing certain capabilities of the contacts system.
- **calendars**: `CalendarsCapabilities|null`
  If `null`, this account does not support calendars, and any use of the calendar-related methods with this account will result in an `accountNoCalendars` error. Otherwise, it will be an object describing certain capabilities of the calendars system.

An **AccountCapabilities** object has the following properties:

- **maxSizeUpload**: `Number`
  The maximum file size, in bytes, that the server will accept for a single file upload (for any purpose).

A **MailCapabilities** object has the following properties:

- **isReadOnly**: `Boolean`
  True if the user has read-only access to the mail in this account. The user may not use the `set`-type mail methods with this account.
- **maxSizeMessageAttachments**: `Number`
  The maximum total size of attachments, in bytes, allowed for messages. A server MAY still reject messages with a lower attachment size total (for example, if the body includes several megabytes of text, causing the size of the encoded MIME structure to be over some server-defined limit).
- **canDelaySend**: `Boolean`
  Does the server support inserting a message into the outbox to be sent later at a user-specified time?
- **messageListSortOptions**: `String[]`
  A list of all the message properties the server supports for sorting by. This MAY include properties the client does not recognise (for example custom properties specified in the vendor extension). Clients MUST just ignore any unknown properties in the list.

A **ContactsCapabilities** object has the following properties:

- **isReadOnly**: `Boolean`
  True if the user has read-only access to the contacts in this account. The user may not use the `set`-type contacts methods with this account.

A **CalendarsCapabilities** object has the following properties:

- **isReadOnly**: `Boolean`

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/contactgroup.mdwn
=====================================================
## Contact Groups
<aside class="warning">
Not implemented
</aside>

A **Contact Group** represents a named set of contacts. It has the following properties:

- **id**: `String`
  The id of the group. This property is immutable.
- **name**: `String`
  The user-visible name for the group, e.g. "Friends". This may be any UTF-8 string of at least 1 character in length and maximum 256 bytes in size. The same name may be used by two different groups.
- **contactIds**: `String[]`
  The ids of the contacts in the group. This must be returned in the same order given by the client when the property is set.

### getContactGroups

Contact Groups can either be fetched explicitly by id, or all of them at once. To fetch contact groups, make a call to `getContactGroups`. It takes the following arguments:

- **accountId**: `String|null`
  The Account to fetch the groups for. If `null`, the primary account is used.
- **ids**: `String[]|null`
  The ids of the groups to fetch. If `null`, all contact groups in the account are be fetched.

The response to *getContactGroups* is called *contactGroups*. It has the following arguments:

- **accountId**: `String`
  The id of the account used for the call.
- **state**: `String`
  A string representing the state on the server for **all** contact groups. If the name of a group changes, or a new group is created, or a group is destroyed, this string will change. It is used to get delta updates.
- **list**: `ContactGroup[]`
  An array of the ContactGroup objects requested. This will be the **empty array** if the *ids* argument was the empty array, or contained only ids for contact groups that could not be found.
- **notFound**: `String[]|null`
  This array contains the ids passed to the method for groups that do not exist, or `null` if all requested ids were found. It will always be `null` if the *ids* argument in the call was `null`.

The following errors may be returned instead of the *contactGroups* response:

`accountNotFound`: Returned if an *accountId* was explicitly included with the request, but it does not correspond to a valid account.

`accountNoContacts`: Returned if the *accountId* given corresponds to a valid account, but does not contain any contact data.

`invalidArguments`: Returned if one of the arguments is of the wrong type, or otherwise invalid. A `description` property MAY be present on the response object to help debug with an explanation of what the problem was.

### getContactGroupUpdates

The *getContactGroupUpdates* call allows a client to efficiently update the state of its cached contacts to match the new state on the server. It takes the following arguments:

- **accountId**: `String|null`
  The id of the account to use for this call. If `null`, the primary account will be used.
- **sinceState**: `String`
  The current state of the client. This is the string that was returned as the *state* argument in the *contactGroups* response. The server will return the changes made since this state.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/calendar.mdwn
=====================================================
## Calendars
<aside class="warning">
Not implemented
</aside>

A Calendar is a named collection of events. All events are associated with one, and only one, calendar.

A **Calendar** object has the following properties:

- **id**: `String`
  The id of the calendar. This property is immutable.
- **name**: `String`
  The user-visible name of the calendar. This may be any UTF-8 string of at least 1 character in length and maximum 256 bytes in size.
- **color**: `String`
  Any valid CSS color value. The color to be used when displaying events associated with the calendar. The color SHOULD have sufficient contrast to be used as text on a white background.
- **sortOrder**: `Number`
  Defines the sort order of calendars when presented in the UI, so it is
  consistent between devices. The number MUST be an integer in the range
  0 <= sortOrder < 2^31.

  A calendar with a lower order should be displayed before a calendar with
  a higher order in any list of calendars in the client's UI. Calendars with
  equal order should be sorted in alphabetical order by name. The sorting
  should take into locale-specific character order convention.
- **isVisible**: `Boolean`
  Should the calendar's events be displayed to the user at the moment?
- **mayReadFreeBusy**: `Boolean`
  The user may read the free-busy information for this calendar. In JMAP
  terms, this means the user may use this calendar as part of a filter in a
  *getCalendarEventList* call, however unless `mayRead == true`, the events
  returned for this calendar will only contain free-busy information, and be stripped of any other data.
  This property MUST be `true` if *mayRead* is `true`.
- **mayReadItems**: `Boolean`
  The user may fetch the events in this calendar. In JMAP terms, this means
  the user may use this calendar as part of a filter in a
  *getCalendarEventList* call
- **mayAddItems**: `Boolean`
  The user may add events to this calendar. In JMAP terms, this means the
  user may call *setCalendarEvents* to create new events in this calendar or
  move existing events into this calendar from another calendar.
  This property MUST be `false` if the account to which this calendar belongs
  has the *isReadOnly* property set to `true`.
- **mayModifyItems**: `Boolean`
  The user may edit events in this calendar by calling *setCalendarEvents* with
  the *update* argument referencing events in this collection.
  This property MUST be `false` if the account to which this calendar belongs
  has the *isReadOnly* property set to `true`.
- **mayRemoveItems**: `Boolean`
  The user may remove events from this calendar by calling *setCalendarEvents*
  with the *destroy* argument referencing events in this collection, or by

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/contactlist.mdwn
=====================================================
## ContactLists
<aside class="warning">
Not implemented
</aside>

A **ContactList** is a query on the set of contacts in a user's contacts. The client can optionally also fetch the contacts.

### getContactList

To fetch a contact list, make a call to *getContactList*. It takes the following arguments:

- **accountId**: `String|null`
  The id of the account to use for this call. If `null`, the primary account will be used.
- **filter**: `FilterCondition|FilterOperator|null`
  Determines the set of contacts returned in the results. See the "Filtering" section below for allowed values and semantics.
- **position**: `Number|null`
  The 0-based index of the first result in the list to return, presumed `0` if `null`. If a negative value is given, the call MUST be rejected with an `invalidArguments` error.
- **limit**: `Number|null`
  The maximum number of results to return. If `null`, no limit presumed. The server MAY choose to enforce a maximum `limit` argument. In this case, if a greater value is given (or if it is `null`), the limit should be clamped to the maximum; since the total number of results in the list is returned, the client can determine if it has received all the results. If a negative value is given, the call MUST be rejected with an `invalidArguments` error.
- **fetchContacts**: `Boolean|null`
  If `true` then after outputting a *contactList* response, an implicit call will be made to *getContacts* with the `contactIds` array in the response as the *ids* argument. If `false` or `null`, no implicit call will be made.

#### Filtering

A **FilterOperator** object has the following properties:

- **operator**: `String`
  This MUST be one of the following strings: "AND"/"OR"/"NOT":
  - **AND**: all of the conditions must match for the filter to match.
  - **OR**: at least one of the conditions must match for the filter to match.
  - **NOT**: none of the conditions must match for the filter to match.
- **conditions**: `(FilterCondition|FilterOperator)[]`
  The conditions to evaluate against each contact.

A **FilterCondition** object has the following properties:

- **inContactGroup**: `String[]|null`
  A list of contact group ids. A contact must be in ANY of these groups to match the condition.
- **isFlagged**: `Boolean|null`
  The `isFlagged` property of the contact must be identical to the value given to match the condition.
- **text**: `String|null`
  Equivalent to ORing together a FilterCondition for each of the `String` typed conditions (prefix, firstName, etc.).
- **prefix**: `String`
  Looks for the text in the *prefix* property of the contact.
- **firstName**: `String`
  Looks for the text in the *firstName* property of the contact.
- **lastName**: `String`
  Looks for the text in the *lastName* property of the contact.
- **suffix**: `String`
  Looks for the text in the *suffix* property of the contact.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/contact.mdwn
=====================================================
## Contacts
<aside class="warning">
Not implemented
</aside>

A **Contact** object stores information about a person or company. It has the following properties:

- **id**: `String`
  The id of the contact. This property is immutable.
- **isFlagged**: `Boolean`
  Is the contact flagged (marked as important in some way by the user)?
- **avatar**: `File|null`
  A file containing an image to be used to represent this contact.
- **prefix**: `String`
  The honorific title of the contact, e.g. "Mr", "Ms", "Dr", etc.
- **firstName**: `String`
  The first name(s) of a contact.
- **lastName**: `String`
  The last name of a contact.
- **suffix**: `String`
  The honorific suffix of the contact, e.g. "B.A.", "Esq." etc.
- **nickname**: `String`
  The nickname of the contact.
- **birthday**: `String`
  The person's birth date in the form `"YYYY-MM-DD"` (any part may be all `0`s for unknown).
- **anniversary**: `String`
  The person's anniversary date in the form `"YYYY-MM-DD"` (any part may be all `0`s for unknown).
- **company**: `String`
  The company for which the person works.
- **department**: `String`
  The department within the company for which the person works.
- **jobTitle**: `String`
  The job title of the person.
- **emails**: `ContactInformation[]`
  An array of ContactInformation objects where the values are email addresses. Types are:
  - `"personal"` The address is for emailing the person in a personal context.
  - `"work"` The address is for emailing the person in a professional context.
  - `"other"` The address is for some other purpose. A *label* property MAY be included to display next to the address to help the user identify its purpose.
- **phones**: `ContactInformation[]`
  An array of ContactInformation objects where the values are phone numbers. Types are:
  - `"home"` The number is for contacting the person at their residence.
  - `"work"` The number is for contacting the person at their workplace.
  - `"mobile"` The number is for contacting the person regardless of location.
  - `"fax"` The number is for sending faxes to the contact.
  - `"pager"` The number is for a pager or beeper associated with the contact.
  - `"other"` The number is for some other purpose. A *label* property MAY be included to display next to the number to help the user identify its purpose.
- **online**: `ContactInformation[]`
  An array of ContactInformation objects where the values are URIs or usernames associated with the person for online services.
  Types are:
  - `"uri"` The value is a URI, e.g. a website link.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/upload.mdwn
=====================================================
## File Uploads
<aside class="warning">
Not implemented
</aside>

There is a single endpoint which handles all file uploads, regardless of what they are to be used for. To upload a file, submit a POST request to the file upload endpoint (see the authentication section for information on how to obtain this URL). The Content-Type MUST be correctly set for the type of the file being uploaded. The request MUST be authenticated as per any HTTP request. The request MAY include an "X-JMAP-AccountId" header, with the value being the account to use for the request. Otherwise, the default account will be used.

The server will respond with one of the following HTTP response codes:

#### `201`: File uploaded successfully

The content of the response is a single JSON object with the following properties:

- **accountId**: `String`
  The id of the account used for the call.
- **blobId**: `String`,
  The id representing the binary data uploaded. The data for this id is immutable. The id *only* refers to the binary data, not any metadata.
- **type**: `String`
  The content type of the file.
- **size**: `Number`
  The size of the file in bytes.
- **expires**: `Date`
  The date the file will be deleted from temp storage if not referenced by another object, e.g. used in a draft.

Once the file has been used, for example attached to a draft message, the file will no longer expire, and is instead guaranteed to exist while at least one other object references it. Once no other object references it, the server MAY immediately delete the file at any time. It MUST NOT delete the file during the method call which removed the last reference, so that if there is a create and a delete within the same call which both reference the file, this always works.

If uploading a file would take the user over quota, the server SHOULD delete previously uploaded (but unused) files before their expiry time. This means a client does not have to explicitly delete unused temporary files (indeed, there is no way for it to do so).

If identical binary content is uploaded, the same *blobId* SHOULD be returned.

#### `400`: Bad request

The request was malformed (this includes the case where an `X-JMAP-AccountId` header is sent with a value that does not exist). The client SHOULD NOT retry the same request.

#### `401`: Unauthorized

The `Authorization` header was missing or did not contain a valid token. Reauthenticate and then retry the request. There is no content in the response.

#### `404`: Not Found

The upload endpoint has moved. See the Authentication section of the spec for how to rediscover the current URL to use. There is no content in the response.

#### `413`:  Request Entity Too Large

The file is larger than the maximum size the server is willing to accept for a single file. The client SHOULD NOT retry uploading the same file. There is no content in the response. The client may discover the maximum size the server is prepared to accept by inspecting the capabilities property of the Account object.

#### `415`: Unsupported Media Type

The server MAY choose to not allow certain content types to be uploaded, such as executable files. This error response is returned if an unacceptable type is uploaded. The client SHOULD NOT retry uploading the same file. There is no content in the response.


=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/authentication.mdwn
=====================================================
## Authentication

Before connecting to any JMAP service, the client must first gain an access token. It cannot just use a username/password directly. This allows the server to know (and show the user) which clients currently have access to the account, and to be able to revoke access individually.

The server may support multiple different mechanisms for authenticating a user to gain the access token. It is expected that further types may be added in future extensions to the JMAP specification (for example [FIDO](https://fidoalliance.org/)).

### Service autodiscovery
<aside class="warning">
Not implemented
</aside>

There are three common autodiscovery methods in use for internet protocols:

- **DNS srv**
  See [RFC6186](https://tools.ietf.org/html/rfc6186) and [RFC6764](https://tools.ietf.org/html/rfc6764)
- **.well-known/`servicename`**
  See [RFC5785](https://tools.ietf.org/html/rfc5785)
- **autoconfig.example.com**/**autodiscover.example.com**
  Used by [Thunderbird](https://developer.mozilla.org/en-US/docs/Mozilla/Thunderbird/Autoconfiguration/FileFormat/HowTo) and Outlook.

A JMAP-supporting email host for the domain `example.com` SHOULD publish a SRV record `_jmaps._tcp.example.com` which gives a hostname and port (usually port `443`).

The authentication URL is `https://hostname/.well-known/jmap` (following any redirects).

Other autodiscovery options using `autoconfig.example.com` or `autodiscover.example.com` may be added to a future version of JMAP to support clients which can't use SRV lookup.

### Getting an access token
<aside class="notice">
Partially supported
</aside>

Authorization always starts with the client making a POST request to the authentication URL (found either via service autodiscovery or manual entry). The request MUST be of type `application/json` and specify an `Accept: application/json` header. The body of the request MUST be a single JSON object, encoded in UTF-8, with the following properties:

- **username**: `String`
  The username the client wishes to authenticate. This is normally the primary email address of the user.
- **clientName**: `String`
  The name of the client software. e.g. `Mozilla Thunderbird`.
- **clientVersion**: `String`
  Information to identify the version of the client.  This MUST change for any changed client code (e.g. a version control tag or counter for development software) and SHOULD sort lexically later for newer versions.
- **deviceName**: `String`
  A human-friendly string to identify the device making the request, e.g. "Joe Blogg's iPhone".

The server may use the client/device information to help identify the login to the user in a login log or other security reporting. Although hopefully unnecessary, they may also be helpful for working around client bugs in the future.

The server will respond with one of the following HTTP status codes:

#### `200`: Success, but more authorization required.

The response body will be a single JSON object with the following properties.


=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/messagelist.mdwn
=====================================================
## MessageLists

A **MessageList** is a sorted query on the set of messages in a user's account. Since it can be very long, the client must specify what section of the list to return. The client can optionally also fetch the threads and/or messages for this part of the list.

The same message may appear in multiple messages lists. For example, it may belong to multiple mailboxes, and of course it can appear in searches. Since messages have an immutable id, a client can easily tell if it already has a message cached and only fetch the ones it needs.

When the state changes on the server, a delta update can be requested to efficiently update the client's cache of this list to the new state. If the server doesn't support this, the client still only needs to fetch the message list again, not the messages themselves.

### getMessageList

To fetch a message list, make a call to *getMessageList*. It takes the following arguments:

- **accountId**: `String|null`
  <aside class="warning">
  Not implemented
  </aside>
  The id of the account to use for this call. If `null`, the primary account will be used.
- **filter**: `FilterCondition|FilterOperator|null`
  <aside class="notice">
  Only filtering on a list of mailboxIds is supported
  </aside>
  Determines the set of messages returned in the results. See the "Filtering" section below for allowed values and semantics.
- **sort**: `String[]|null`
  A list of Message property names to sort by. See the "Sorting" section below for allowed values and semantics.
- **collapseThreads**: `Boolean|null`
  <aside class="warning">
  Not implemented
  </aside>
  If true, each thread will only be returned once in the resulting list, at the position of the first message in the list (given the filter and sort order) belonging to the thread. If `false` or `null`, threads may be returned multiple times.
- **position**: `Number|null`
  The 0-based index of the first result in the list to return. If a negative value is given, the call MUST be rejected with an `invalidArguments` error. If `null`, 0 is used.
- **anchor**: `String|null`
  <aside class="warning">
  Not implemented
  </aside>
  A Message id. The index of this message id will be used in combination with the `anchorOffset` argument to determine the index of the first result to return (see the "Windowing" section below for more details).
- **anchorOffset**: `Number|null`
  <aside class="warning">
  Not implemented
  </aside>
  The index of the anchor message relative to the index of the first result to return. This MAY be negative. For example, `-1` means the first message after the anchor message should be the first result in the results returned (see the "Windowing" section below for more details).
- **limit**: `Number|null`
  The maximum number of results to return. If `null`, no limit is presumed. The server MAY choose to enforce a maximum `limit` argument. In this case, if a greater value is given, the limit should be clamped to the maximum; since the total number of results in the list is returned, the client should not be relying on how many results are returned to determine if it has reached the end of the list. If a negative value is given, the call MUST be rejected with an `invalidArguments` error.
- **fetchThreads**: `Boolean|null`
  <aside class="warning">
  Not implemented
  </aside>
  If `true`, after outputting a *messageList* response, an implicit call will be made to *getThreads* with the *threadIds* array in the response as the *ids* argument, and the *fetchMessages* and *fetchMessageProperties* arguments passed straight through from the call to *getMessageList*. If `false` or `null`, no implicit call will be made.
- **fetchMessages**: `Boolean|null`
  <aside class="warning">

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/apimodel.mdwn
=====================================================
# JMAP: The Spec

<div id="last-update">Last updated 2016-01-15</div>

This is a specification. It is meant to be readable but it also has to be comprehensive, so it can be dense in places. If you want to get a quick idea of how JMAP works, you should probably read the [guide for client developers](client.html) first. This has lots of example exchanges and should give you a good feel for what JMAP is all about. The spec is heavier going; it attempts to document exactly what each method should do, and what should happen in a myriad of edge cases.

There are undoubtably edge cases that are not yet covered. If you find one, please email <editor@jmap.io> or make a pull request on GitHub if you have a proposed fix.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in [RFC2119](https://tools.ietf.org/html/rfc2119).

## The JSON API model

JSON is a text-based data interchange format as specified in [RFC7159](https://tools.ietf.org/html/rfc7159). The I-JSON format defined in [RFC7493](https://tools.ietf.org/html/rfc7493) is a strict subset of this, adding restrictions to avoid potentially confusing scenarios (for example, it mandates that an object MUST NOT have two properties with the same key). All data sent from the client to the server or from the server to the client MUST be valid I-JSON according to the RFC, encoded in UTF-8.

### The structure of an exchange

The client initiates an API request by sending the server a JSON array. Each element in this array is another array representing a method invocation on the server. The server will process the method calls and return a response consisting of an array in the same format. Each method call always contains three elements:

1. The **name** of the method to call, or the name of the response from the server. This is a `String`.
2. An `Object` containing *named* **arguments** for that method or response.
3. A **client id**: an arbitrary `String` to be echoed back with the responses emitted by that method call (as we'll see lower down, a method may return 1 or more responses, as some methods make implicit calls to other ones).

Example query:

    [
      ["method1", {"arg1": "arg1data", "arg2": "arg2data"}, "#1"],
      ["method2", {"arg1": "arg1data"}, "#2"],
      ["method3", {}, "#3"]
    ]

The method calls MUST be processed sequentially, in order. Each API request
(which, as shown, may contain multiple method calls) receives a JSON
response in exactly the same format. The output of the methods MUST be added
to the array in the same order as the methods are processed.

Example response:

    [
      ["responseFromMethod1", {"arg1": 3, "arg2": "foo"}, "#1"],
      ["responseFromMethod2", {"isBlah": true}, "#2"],
      ["anotherResponseFromMethod2", {"data": 10, "yetmoredata": "Hello"}, "#2"],
      ["aResponseFromMethod3", {}, "#3"]
    ]

### Errors

If the data sent as an API request is not valid JSON or does not match the structure above, an error will be returned at the transport level. For example, when using JMAP over HTTP, a `400 Bad Request` error will be returned at the HTTP level.

Possible errors for each method are specified in the method descriptions. If a method encounters an error, an `error` response must be inserted at the current point in the output array and, unless otherwise specified, no further processing must happen within that method.


=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/calendareventlist.mdwn
=====================================================
## CalendarEventLists
<aside class="warning">
Not implemented
</aside>

A **CalendarEventList** is a query on the set of events in a user's calendars. The client can optionally also fetch the events.

### getCalendarEventList

To fetch a calendar event list, make a call to *getCalendarEventList*. It takes the following arguments:

- **accountId**: `String|null`
  The id of the account to use for this call. If `null`, the primary account will be used.
- **filter**: `FilterCondition|FilterOperator|null`
  Determines the set of events returned in the results. See the "Filtering" section below for allowed values and semantics.
- **position**: `Number|null`
  The 0-based index of the first result in the list to return, presumed `0` if `null`. If a negative value is given, the call MUST be rejected with an `invalidArguments` error.
- **limit**: `Number|null`
  The maximum number of results to return. If `null`, no limit presumed. The server MAY choose to enforce a maximum `limit` argument. In this case, if a greater value is given (or if it is `null`), the limit should be clamped to the maximum; since the total number of results in the list is returned, the client can determine if it has received all the results. If a negative value is given, the call MUST be rejected with an `invalidArguments` error.
- **fetchCalendarEvents**: `Boolean|null`
  If `true` then after outputting a *calendarEventList* response, an implicit call will be made to *getCalendarEvents* with the `calendarEventIds` array in the response as the *ids* argument. If `false` or `null`, no implicit call will be made.

#### Filtering

A **FilterOperator** object has the following properties:

- **operator**: `String`
  This MUST be one of the following strings: "AND"/"OR"/"NOT":
  - **AND**: all of the conditions must match for the filter to match.
  - **OR**: at least one of the conditions must match for the filter to match.
  - **NOT**: none of the conditions must match for the filter to match.
- **conditions**: `(FilterCondition|FilterOperator)[]`
  The conditions to evaluate against each event.

A **FilterCondition** object has the following properties:

- **inCalendars**: `String[]|null`
  A list of calendar ids. An event must be in ANY of these calendars to match the condition.
- **after**: `Date|null`
  The end of the event, or any recurrence of the event, in UTC time must be after this date to match the condition.
- **before**: `Date|null`
  The start of the event, or any recurrence of the event, in UTC time must be before this date to match the condition.
- **text**: `String|null`
  Looks for the text in the *summary*, *description*, *location*, *organizer*, *attendees* properties of the event or any recurrence of the event (matching either name or email in the organizer/attendee case).
- **summary**: `String|null`
  Looks for the text in the *summary* property of the event, or the overridden *summary* property of a recurrence.
- **description**: `String|null`
  Looks for the text in the *description* property of the event, or the overridden *description* property of a recurrence.
- **location**: `String|null`
  Looks for the text in the *location* property of the event, or the overridden *location* property of a recurrence.

=====================================================
== File: server/protocols/jmap-draft/doc/specs/spec/datamodel.mdwn
=====================================================
## Data model overview

### Accounts
<aside class="warning">
Not implemented
</aside>

All data belongs to an account. An account may provide access to mail, contacts and/or calendars. Most operations are isolated to a single account; there are a few explicit operations to copy data between them. A single login may provide access to multiple accounts, for example if another user is sharing data with the user.

### Ids
<aside class="notice">
Work in progress. Unique message id is generated by concatenate the username, the mailboxId and the uid.
</aside>

All ids for messages, contacts, etc. are assigned by the server and are immutable. They MUST be unique among all records of the **same type** within the **same account**. Ids may clash across accounts, or for two records of different types within the same account.

### Mail

As for all data types, each message has a unique, immutable id. This id does not change if the message changes mailboxes. A mailbox is a named, arbitrary set of emails. For compatibility with IMAP, a message MUST always belong to at least one mailbox at any time.

Each message has 4 mutable boolean "flags" stored with it, each with a direct
equivalent in IMAP. In JMAP these flags are called:

* **isUnread**: Has the email not yet been read?
* **isFlagged**: Has the email been flagged (starred, or pinned)?
* **isDraft**: Is the email a draft?
* **isAnswered**: Has the email been answered (replied to)?

Messages are **immutable** other than these 4 flags and the set of mailboxes to which it belongs. To change anything else, the message must be deleted and a new one created (which will get a different id).

Related messages are grouped into threads. When getting a message list you can collapse threads, which means the thread is only returned **once**, at the position of the first message in the thread in the non-collapsed list (given the sort order).

### Contacts

The contacts API is designed to be compatible with existing CardDAV systems. Each contact must have a unique, immutable id. A contact can be assigned to contact groups in a many-to-many relationship. A group is simply a named set of contacts. Contacts are completely mutable.

### Calendars

The calendars API is designed to be compatible with existing CalDAV systems. Each event must have a unique, immutable id. An event must belong to a single calendar. Events are completely mutable.

=====================================================
== File: server/protocols/jmap-draft/doc/mkdocs.yml
=====================================================
docs_dir: specs
site_name: JMAP specifications with annotations from apache/james contributors
theme: readthedocs
use_directory_urls: false
extra_css:
  - annotations.css

=====================================================
== File: server/protocols/jmap-draft/doc/README.md
=====================================================
Annotated JMAP documentation
============================

This directory contains annotated jmap documentation as found on http://jmap.io/.

Annotations aim at tracking implementation progress in James project.

You can read it as an html site using the provided Dockerfile.

̀
$ docker build --tag=mkdocs .
$ docker run --rm -p 8000:8000 mkdocs
̀

Then open http://localhost:8000/ in your browser.

=====================================================
== File: server/protocols/jmap-draft/src/main/resources/jwt-public.der
=====================================================

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/noReplyTo.eml
=====================================================
Return-Path: <root-bounces@listes.apache.org>
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
MIME-Version: 1.0
From: "Content-filter at spam.apache.org" <postmaster@apache.org>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.apache.org>
Message-ID: <VASs-IZaXqmZao@spam.apache.org>
Subject: Original subject
X-BeenThere: root@listes.apache.org
Errors-To: root-bounces@listes.apache.org
Sender: "root" <root-bounces@listes.apache.org>
Reply-To: <>

This is a multi-part message in MIME format...

------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

No viruses were found.

Content type: Unchecked
Internal reference code for the message is 12583-16/Ss-IZaXqmZao

According to a 'Received:' trace, the message apparently originated at:
  [198.252.153.129], [127.0.0.1] localhost [127.0.0.1] Authenticated sender:
  quentin.h

Return-Path: <quentin.h@apache.org>
From: Quentin <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Subject: XYZ
Not quarantined.

The message WILL BE relayed to:
<xxx@apache.org>


------------=_1433322346-12583-0
Content-Type: text/rfc822-headers; name="header"
Content-Disposition: inline; filename="header"
Content-Transfer-Encoding: 7bit
Content-Description: Message header section

Return-Path: <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Date: Wed, 03 Jun 2015 11:05:37 +0200
From: Quentin <quentin.h@apache.org>
MIME-Version: 1.0

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/inlineAttachment.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Disposition: inline
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

I'm a Schroedinger cat
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
	by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
	Wed,  3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
	by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
	t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
	h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
	 List-Subscribe:From;
	b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
	 EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
	 4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
	by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
 by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
 for <root@listes.minet.net>; Wed,  3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
 by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
 for <root@listes.minet.net>; Wed,  3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: Original subject
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>

This is a multi-part message in MIME format...

------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

No viruses were found.

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/key.pub
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzpnC3fUkdKJLEg9ussLh
9juskI7NVyGjwtQwV5+qMdigDwxW3GoUG02wz9Uo5wyZcyM1c8eNQX1Xnyd+muER
/ARGott3+7iNxrPylev0kfzIRP216NwyZn5vrlhQ3JwYhpumwXAL+q04MKVesOVa
QQWl7H7hfMm6NBwaUrsxjFzOYYIZUALYb/T3hgkaiMm5cm+iSCA5eFszTGGvYmgA
eQiKs6j2A9YCIOs3dlo1sMBOx/JAiHHuZHjVh1recW8rcX3iLGq8P/le1rpNZ3Lv
nDzqAp2lq4Q3hlaB+fBcl5JB+zIY4uV4wdh+oopj2djrrwwzxmzskriEAjX9BbDY
9QIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/fullMessage.eml
=====================================================
Reply-to: alice <alice@local>
In-reply-to: bob@local
Mime-Version: 1.0
To: bob <bob@local>
From: alice <alice@local>
Cc: jack <jack@local>, jacob <jacob@local>
Bcc: alice <alice@local>
Subject: Full message
Message-ID: <1cc7f114-dbc4-42c2-99bd-f1100db6d0c1@open-paas.org>
Date: Tue, 7 Jun 2016 16:23:37 +0200
Content-Type: multipart/mixed;
 boundary="------------7AF1D14DE1DFA16229726B54"

This is a multi-part message in MIME format.
--------------7AF1D14DE1DFA16229726B54
Content-Type: multipart/alternative;
 boundary="------------172F9470CFA3BF3417835D92"


--------------172F9470CFA3BF3417835D92
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

/blabla/
*bloblo*

--------------172F9470CFA3BF3417835D92
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<i>blabla</i>
<b>bloblo</b>

--------------172F9470CFA3BF3417835D92--

--------------7AF1D14DE1DFA16229726B54
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/example.html
=====================================================
<div class="section">
    <h3>Why a new Logo?<a name="Why_a_new_Logo"></a></h3>


    <p>We are happy with our current logo, but for the
        upcoming James Server 3.0 release, we would like to
        give our community the opportunity to create a new image for James.</p>


    <p>Don't be shy, take your inkscape and gimp, and send us on
        the <a href="mail.html">James Server User mailing list</a>
        your creations. We will publish them on this page.</p>


    <p>We need an horizontal logo (100p height) to be show displayed on the upper
        left corner of this page, an avatar (48x48p) to be used on a Twitter stream for example.
        The used fonts should be redistributable (or commonly available on Windows and Linux).
        The chosen logo should be delivered in SVG format.
        We also like the <a class="externalLink" href="http://www.apache.org/foundation/press/kit/">Apache feather</a>.</p>

</div>

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/private.nopass.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsjjah2w8AKpnGKya4QG/tdRoR9pJkKWfyf17ywcYWBxcpj0Q
+dkn+CXvBafhQ2zlf+bPkWxYhBuXyMB8QNCp/sMlaQ8dGFw/LGojglHk8T4aIu+a
Ffy0hgN9yniuEHmFdjP2XECbA7UbHQPZTO/DU3QJ0FabqKO61pHB4bliNsTWGjzg
seU5kdS1Uup0AK/URO2pSLpnDPV/l0yNmxvGfO/ulPNVJyxiJuT+Rl51LlxpWhu3
G/hFX2mJP0Mn/cX3xNm2HrYIaasglum7bXN/vfiqSFAg46LgT7UJ4pCHoLI99K7Z
OpgBqK/Q4P4UxOggxkawI+JmVLTmCpz1c6JR3QIDAQABAoIBAEvx7DVfCuahtpMO
ImWVkDMUk2di/owz97ZkXRc0K8yIMXbpeM1vGxgkWgmH83b+9YEeQv9OMx4AgBqc
45XfFUGpuMxfE1/pF0Z+6CjFaxDeDNcsUPXjnK2q2TSpXktI7XVkSSwgn63hw+8G
T9f4J7ztKq1r6qLfOmPq8rqUe+SoH5tkwmJJgnxx3Qt2xZ4nmFXiuscOcVUjV3D/
EdghjcExNSgxmo8HN34DLQPZrDDwarrYJouiufe7m0Etk8m9bOWkNsoCif0wQ0mS
uQVAHMzCKqrUmAM3X1IimTnwOWu2sYle9VXYijwDkZ0PGQnS4rywz9D9MWy57ZLM
zklb5MUCgYEA5qrK9PmMGNi6ihhjkDw6b4sqOs4Dec89jdkhhYdrbPVXZzB+Shmh
CDhviXhLi7m5G5d707DLPloPR0LdNmf3YsLCvMej70O8DrDG/z1Vv++DF2XcAtvW
TLoXOcSS1E3tKRSp2Uks7osWIwUAomhkEIXsDJ+esH9wHD7rOYA02fsCgYEAxcuR
Sp0rcVqwyuINEmrvH5zxSWk0O5MqM95kyvElFuPCPAKv0EK9t8T7dv7fEtQoupqa
hbDGzatif7B4tVaeWZRYJUrr9uwIyZfVSfYUi5y2KwHGJJPH+EkoQ6sZlRw6Aqj/
AeW4/cnmhK+IrgBDKF99DiVs1nVTgeA0vEneVAcCgYBh9l0VpznJf5nRdkQqiHmk
z6ySptWxEMOqj3F+HSIRdyy0hVLNM49BR36PGoizAaBMyIvtPqNCisr8T7hVF9hn
mCFOPVcxEUo3zvnkgm79gcHh2P+UMzsTAOFGRma5RZMYJE9yGXK8qFMxcjlvv/fn
UIkMX2nsuWKqjEon9Hv9qwKBgFLk760/lVdaVMGSXzwayMCM+6pyhst477TxPXi3
+31OUrbnwVscvXno+iJyynaPp8ocxSnGXmsPqqYtBUmqVY7hVte6QI4peb1S/raS
hSXFtarsgWgO7z2lG1TQvlX5kG5Q+R6IcjEajpuJHVUfEwY2jqiBEs4GOcsydad7
pcu9AoGBANHQQS7U1o0Ks2H9iB02b72rq0Lr7d4xJ7bbeL0PdJNxnKWYtYYrNKvu
R7wWF6MBH+pfm0CzJo0Pog58wkAiKnD8nPuVUdXgi/3PQXu/ZARY0g30wqubaBeZ
UN7bL/TrIc67ldEi07A8Wo6H5Gd6jIHBnmO93an2zXlrvhrvACRX
-----END RSA PRIVATE KEY-----

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/oneAttachment.eml
=====================================================
Return-Path: <chibenwa@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <chibenwa@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64

UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/emptyBodyMessageWithOneAttachment.eml
=====================================================
Reply-to: alice <alice@local>
In-reply-to: bob@local
Mime-Version: 1.0
To: bob <bob@local>
From: alice <alice@local>
Cc: jack <jack@local>, jacob <jacob@local>
Bcc: alice <alice@local>
Subject: Full message
Message-ID: <1cc7f114-dbc4-42c2-99bd-f1100db6d0c1@open-paas.org>
Date: Tue, 7 Jun 2016 16:23:37 +0200
Content-Type: multipart/mixed;
 boundary="------------7AF1D14DE1DFA16229726B54"

This is a multi-part message in MIME format.
--------------7AF1D14DE1DFA16229726B54
Content-Type: multipart/alternative;
 boundary="------------172F9470CFA3BF3417835D92"


--------------172F9470CFA3BF3417835D92
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit



--------------172F9470CFA3BF3417835D92--

--------------7AF1D14DE1DFA16229726B54
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

=====================================================
== File: server/protocols/jmap-draft/src/test/resources/calendar.eml
=====================================================
Return-Path: <local@localhost.com>
MIME-Version: 1.0
Delivered-To: to@localhost.com
From: User From <fromUser@localhost.com>
Message-ID: <2d0fa16c-4c37-58de-1acc-50b5f6a23a60@localhost.com>
To: User To <toUser@linagora.com>
Date: Wed, 26 Jul 2017 10:34:02 +0200
Subject: Any subject
Content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT

BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20170726T081145Z
LAST-MODIFIED:20170726T083402Z
DTSTAMP:20170726T083402Z
UID:f1514f44bf39311568d6407249cb76c48103fcd1fb398c3c501cb72b2d293f36e04
 b2aab16e43439a608f28671ab7c10e754cbc85ddee4a07fa8cf8f4f7af05bfb502b8f6

SUMMARY:[A CONFIRMER] Call OVH
PRIORITY:5
ORGANIZER;CN=User;X-OBM-ID=id:mailto:userTo@localhost.com
ATTENDEE;CN=User;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
 mailto:user1To@linagora.com
DTSTART:20170727T130000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:2
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
 oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:uuid_value
LOCATION:01.78.14.42.61 / 1586
X-OBM-ALERT;X-OBM-ID=486:600
END:VEVENT
END:VCALENDAR


=====================================================
== File: server/protocols/jmap-draft/src/test/java/org/apache/james/jmap/draft/model/OldKeywordTest.java
=====================================================
/****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  The ASF licenses this file   *
 * to you under the Apache License, Version 2.0 (the            *
 * "License"); you may not use this file except in compliance   *
 * with the License.  You may obtain a copy of the License at   *
 *                                                              *
 *   http://www.apache.org/licenses/LICENSE 2.0                 *
 *                                                              *
 * Unless required by applicable law or agreed to in writing,   *
 * software distributed under the License is distributed on an  *
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
 * KIND, either express or implied.  See the License for the    *
 * specific language governing permissions and limitations      *
 * under the License.                                           *
 ****************************************************************/

package org.apache.james.jmap.draft.model;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.Optional;

import jakarta.mail.Flags;
import jakarta.mail.Flags.Flag;

import org.apache.james.mailbox.FlagsBuilder;
import org.junit.Test;

import nl.jqno.equalsverifier.EqualsVerifier;

public class OldKeywordTest {
    @Test
    public void shouldRespectBeanContract() {
        EqualsVerifier.forClass(OldKeyword.class).verify();
    }

    @Test
    public void asKeywordsShouldContainFlaggedWhenIsFlagged() {
        Optional<OldKeyword> testee = OldKeyword.builder()
            .isFlagged(Optional.of(true))
            .computeOldKeyword();

        assertThat(testee.get().asKeywords())
            .isEqualTo(Keywords.strictFactory().from(Keyword.FLAGGED));
    }

    @Test

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/jmap.mdown
=====================================================
%%%
    title = "The JSON Meta Application Protocol"
    abbrev = "JMAP"
    category = "std"
    docName = "draft-ietf-jmap-core-17"
    ipr= "trust200902"
    area = "Applications"
    workgroup = "JMAP"
    keyword = ["JMAP", "JSON"]

    date = 2019-03-18T00:00:00Z

    [[author]]
    initials="N.M."
    surname="Jenkins"
    fullname="Neil Jenkins"
    role="editor"
    organization = "Fastmail"
        [author.address]
        email = "neilj@fastmailteam.com"
        uri = "https://www.fastmail.com"
        [author.address.postal]
            street = "PO Box 234, Collins St West"
            city = "Melbourne"
            code = "VIC 8007"
            country = "Australia"

    [[author]]
    initials="C."
    surname="Newman"
    fullname="Chris Newman"
    role="editor"
    organization = "Oracle"
        [author.address]
        email = "chris.newman@oracle.com"
        [author.address.postal]
            street = "440 E. Huntington Dr., Suite 400"
            city = "Arcadia"
            code = "CA 91006"
            country = "United States of America"
%%%

.# Abstract

This document specifies a protocol for clients to efficiently query, fetch, and modify JSON-based data objects, with support for push notification of changes and fast resynchronisation and for out-of-band binary data upload/download.

{mainmatter}

{{spec/jmap/intro.mdown}}
{{spec/jmap/session.mdown}}

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/quotas.mdown
=====================================================
%%%
    title = "JMAP for Quotas"
    abbrev = "JMAP Quotas"
    category = "std"
    docName = "draft-ietf-jmap-quotas-06"
    ipr= "trust200902"
    area = "Applications"
    workgroup = "JMAP"
    keyword = ["JMAP", "JSON", "email", "quotas"]

    date = 2022-09-28T00:00:00Z

    [seriesInfo]
    name="Internet-Draft"
    value="draft-ietf-jmap-quotas-06"
    stream="IETF"
    status="standard"

    [[author]]
    initials="R.C."
    surname="Cordier"
    fullname="René Cordier"
    role="editor"
    organization = "Linagora Vietnam"
        [author.address]
        email = "rcordier@linagora.com"
        uri = "https://linagora.vn"
        [author.address.postal]
            street = "5 Dien Bien Phu"
            city = "Hanoi"
            code = "10000"
            country = "Vietnam"
%%%

.# Abstract

This document specifies a data model for handling quotas on accounts with a server using JMAP.

{mainmatter}

{{spec/quotas/intro.mdown}}
{{spec/quotas/quota.mdown}}
{{spec/quotas/securityconsiderations.mdown}}
{{spec/quotas/ianaconsiderations.mdown}}

{backmatter}

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/rfc/src/mail.mdown
=====================================================
%%%
    title = "JMAP (JSON Meta Application Protocol) for Mail"
    abbrev = "JMAP Mail"
    category = "std"
    docName = "draft-ietf-jmap-mail-16"
    updates = [5788]
    ipr= "trust200902"
    area = "Applications"
    workgroup = "JMAP"
    keyword = ["JMAP", "JSON", "email"]

    date = 2019-03-08T00:00:00Z

    [[author]]
    initials="N.M."
    surname="Jenkins"
    fullname="Neil Jenkins"
    role="editor"
    organization = "Fastmail"
        [author.address]
        email = "neilj@fastmailteam.com"
        uri = "https://www.fastmail.com"
        [author.address.postal]
            street = "PO Box 234, Collins St West"
            city = "Melbourne"
            code = "VIC 8007"
            country = "Australia"

    [[author]]
    initials="C."
    surname="Newman"
    fullname="Chris Newman"
    role="editor"
    organization = "Oracle"
        [author.address]
        email = "chris.newman@oracle.com"
        [author.address.postal]
            street = "440 E. Huntington Dr., Suite 400"
            city = "Arcadia"
            code = "CA 91006"
            country = "United States of America"
%%%

.# Abstract

This document specifies a data model for synchronising email data with a server using JMAP (the JSON Meta Application Protocol). Clients can use this to efficiently search, access, organise and send messages, and get pushed notifications for fast resynchronisation when new messages are delivered or a change is made in another client.

{mainmatter}

{{spec/mail/intro.mdown}}

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/README.md
=====================================================
# JSON Meta Application Protocol (JMAP) Specification

This repo contains the specifications for JMAP. 

JMAP is a modern standard for email clients to connect to mail stores. It therefore primarily replaces IMAP + SMTP submission. It does not replace MTA-to-MTA SMTP transmission. JMAP was built by the community, and continues to improve via the [IETF standardization process](https://datatracker.ietf.org/wg/jmap/about/). Upcoming work includes adding contacts and calendars (replacing CardDAV/CalDAV).

The pretty HTML version of the spec along with more JMAP info and resources can be found at http://jmap.io.

## Get involved

JMAP is being developed within the IETF by the [JMAP Working Group](https://datatracker.ietf.org/wg/jmap/about/).

You can join the mailing list at https://www.ietf.org/mailman/listinfo/jmap. Feedback is welcome: send your thoughts or comments on anything that is imprecise, incomplete, or could simply be done better in another way. Discussion is preferred prior to pull requests, except in the case of minor typos etc.

## Contributions

This repository relates to activities in the Internet Engineering Task
Force (IETF). All material in this repository is considered Contributions
to the IETF Standards Process, as defined in the intellectual property
policies of IETF currently designated as [BCP 78](https://www.rfc-editor.org/info/bcp78), [BCP 79](https://www.rfc-editor.org/info/bcp79) and the [IETF Trust Legal Provisions (TLP) Relating to IETF Documents](http://trustee.ietf.org/trust-legal-provisions.html).

Any edit, commit, pull request, issue, comment or other change made to this
repository constitutes Contributions to the [IETF Standards Process](https://www.ietf.org/).

You agree to comply with all applicable IETF policies and procedures,
including, BCP 78, 79, the TLP, and the TLP rules regarding code
components (e.g. being subject to a Simplified BSD License) in
Contributions.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/message.mdown
=====================================================
# Emails

>:warning:
>Partially implemented

An **Email** object is a representation of a message [@!RFC5322], which allows clients to avoid the complexities of MIME parsing, transfer encoding, and character encoding.

## Properties of the Email Object

Broadly, a message consists of two parts: a list of header fields and then a body. The Email data type provides a way to access the full structure or to use simplified properties and avoid some complexity if this is sufficient for the client application.

While raw headers can be fetched and set, the vast majority of clients should use an appropriate parsed form for each of the header fields it wants to process, as this allows it to avoid the complexities of various encodings that are required in a valid message per RFC 5322.

The body of a message is normally a MIME-encoded set of documents in a tree structure. This may be arbitrarily nested, but the majority of email clients present a flat model of a message body (normally plaintext or HTML) with a set of attachments. Flattening the MIME structure to form this model can be difficult and causes inconsistency between clients. Therefore, in addition to the *bodyStructure* property, which gives the full tree, the Email object contains 3 alternate properties with flat lists of body parts:

- *textBody*/*htmlBody*: These provide a list of parts that should be
  rendered sequentially as the "body" of the message. This is a list rather than a single part as messages may have headers and/or footers appended/prepended as separate parts when they are transmitted, and some clients send text and images intended to be displayed inline in the body (or even videos and sound clips) as multiple parts rather than a single HTML part with referenced images.

  Because MIME allows for multiple representations of the same data (using `multipart/alternative`), there is a textBody property (which prefers a plaintext representation) and an htmlBody property (which prefers an HTML representation) to accommodate the two most common client requirements. The same part may appear in both lists where there is no alternative between the two.

- *attachments*: This provides a list of parts that should be presented as
  "attachments" to the message. Some images may be solely there for embedding within an HTML body part; clients may wish to not present these as attachments in the user interface if they are displaying the HTML with the embedded images directly. Some parts may also be in htmlBody/textBody; again, clients may wish to not present these as attachments in the user interface if rendered as part of the body.

The *bodyValues* property allows for clients to fetch the value of text parts directly without having to do a second request for the blob and to have the server handle decoding the charset into unicode. This data is in a separate property rather than on the EmailBodyPart object to avoid duplication of large amounts of data, as the same part may be included twice if the client fetches more than one of bodyStructure, textBody, and htmlBody.

In the following subsections, the common notational convention for wildcards has been adopted for content types, so `foo/*` means any content type that starts with `foo/`.

Due to the number of properties involved, the set of *Email* properties is specified over the following four subsections. This is purely for readability; all properties are top-level peers.

### Metadata

These properties represent metadata about the message in the mail store and are not derived from parsing the message itself.

- **id**: `Id` (immutable; server-set)
  The id of the Email object. Note that this is the JMAP object id, NOT the Message-ID header field value of the message [@!RFC5322].
- **blobId**: `Id` (immutable; server-set)
  The id representing the raw octets of the message [@!RFC5322] for this Email. This may be used to download the raw original message or to attach it directly to another Email, etc.
- **threadId**: `Id` (immutable; server-set)
  The id of the Thread to which this Email belongs.

>:warning:
>threadId support is not implemented yet. Default to the id of the email.

- **mailboxIds**: `Id[Boolean]`
  The set of Mailbox ids this Email belongs to. An Email in the mail store MUST belong to one or more Mailboxes at all times (until it is destroyed). The set is represented as an object, with each key being a *Mailbox id*. The value for each key in the object MUST be `true`.
- **keywords**: `String[Boolean]` (default: \{\})
  A set of keywords that apply to the Email. The set is represented as an object, with the keys being the *keywords*. The value for each key in the object MUST be `true`.

    Keywords are shared with IMAP. The six system keywords from IMAP get special treatment. The following four keywords have their first character changed from `\` in IMAP to `$` in JMAP and have particular semantic meaning:


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/mailbox.mdown
=====================================================
# Mailboxes

A Mailbox represents a named set of Emails. This is the primary mechanism for organising Emails within an account. It is analogous to a folder or a label in other systems. A Mailbox may perform a certain role in the system; see below for more details.

For compatibility with IMAP, an Email MUST belong to one or more Mailboxes. The Email id does not change if the Email changes Mailboxes.

A **Mailbox** object has the following properties:

> :information_source:
> Implemented

- **id**: `Id` (immutable; server-set)
  The id of the Mailbox.
- **name**: `String`

> :warning:
> "name" should not contain the IMAP hierarchy delimiter ".".


  User-visible name for the Mailbox, e.g., "Inbox". This MUST be a Net-Unicode string [@!RFC5198] of at least 1 character in length, subject to the maximum size given in the capability object. There MUST NOT be two sibling Mailboxes with both the same parent and the same name. Servers MAY reject names that violate server policy (e.g., names containing a slash (/) or control characters).
- **parentId**: `Id|null` (default: null)
  The Mailbox id for the parent of this Mailbox, or `null` if this Mailbox is at the top level. Mailboxes form acyclic graphs (forests) directed by the child-to-parent relationship. There MUST NOT be a loop.
- **role**: `String|null` (default: null)

> :warning:
> Partially implemented. Role are based on the name of the mailbox. An evolution would be to use a mailbox annotation to hold its
> value, removing the link with the name, and allow the user to define locale based system mailboxes. This value cannot be updated.

  Identifies Mailboxes that have a particular common purpose (e.g., the "inbox"), regardless of the *name* property (which may be localised).

    This value is shared with IMAP (exposed in IMAP via the SPECIAL-USE extension [@!RFC6154]). However, unlike in IMAP, a Mailbox MUST only have a single role, and there MUST NOT be two Mailboxes in the same account with the same role. Servers providing IMAP access to the same data are encouraged to enforce these extra restrictions in IMAP as well. Otherwise, modifying the IMAP attributes to ensure compliance when exposing the data over JMAP is implementation dependent.

    The value MUST be one of the Mailbox attribute names listed in the [IANA IMAP Mailbox Name Attributes](https://www.iana.org/assignments/imap-mailbox-name-attributes/imap-mailbox-name-attributes.xhtml) registry, as established in [@!RFC8457], converted to lowercase. New roles may be established here in the future.

    An account is not required to have Mailboxes with any particular roles.

- **sortOrder**: `UnsignedInt` (default: 0)

> :warning:
> Partially implemented. Based on the role. This value cannot be updated.

  Defines the sort order of Mailboxes when presented in the client's UI, so it
  is consistent between devices. The number MUST be an integer in the range
  0 <= sortOrder < 2^31.

    A Mailbox with a lower order should be displayed before a Mailbox with a higher order (that has the same parent) in any Mailbox listing in the client's UI. Mailboxes with equal order SHOULD be sorted in alphabetical order by name. The sorting should take into account locale-specific character order convention.

- **totalEmails**: `UnsignedInt` (server-set)
  The number of Emails in this Mailbox.
- **unreadEmails**: `UnsignedInt` (server-set)

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identity.mdown
=====================================================
# Identities

> :warning:
> Partially implemented.

An **Identity** object stores information about an email address or domain the user may send from. It has the following properties:

- **id**: `Id` (immutable; server-set)
  The id of the Identity.
- **name**: `String` (default: "")
  The "From" *name* the client SHOULD use when creating a new Email from this Identity.
- **email**: `String` (immutable)
  The "From" email address the client MUST use when creating a new Email from this Identity. If the *mailbox* part of the address (the section before the "@") is the single character `*` (e.g., `*@example.com`) then the client may use any valid address ending in that domain (e.g., `foo@example.com`).
- **replyTo**: `EmailAddress[]|null` (default: null)
  The Reply-To value the client SHOULD set when creating a new Email from this Identity.
- **bcc**: `EmailAddress[]|null` (default: null)
  The Bcc value the client SHOULD set when creating a new Email from this Identity.
- **textSignature**: `String` (default: "")
  A signature the client SHOULD insert into new plaintext messages that will be sent from this Identity. Clients MAY ignore this and/or combine this with a client-specific signature preference.
- **htmlSignature**: `String` (default: "")
  A signature the client SHOULD insert into new HTML messages that will be sent from this Identity. This text MUST be an HTML snippet to be inserted into the `<body></body>` section of the HTML. Clients MAY ignore this and/or combine this with a client-specific signature preference.
- **mayDelete**: `Boolean` (server-set)
  Is the user allowed to delete this Identity? Servers may wish to set this to `false` for the user's username or other default address. Attempts to destroy an Identity with `mayDelete: false` will be rejected with a standard `forbidden` SetError.

See the "Addresses" header form description in the Email object for the definition of *EmailAddress*.

Multiple identities with the same email address MAY exist, to allow for different settings the user wants to pick between (for example, with different names/signatures).

The following JMAP methods are supported.

## Identity/get

This is a standard "/get" method as described in [@!RFC8620], Section 5.1. The *ids* argument may be `null` to fetch all at once.

## Identity/changes

> :warning:
> Not implemented.

This is a standard "/changes" method as described in [@!RFC8620], Section 5.2.

## Identity/set

This is a standard "/set" method as described in [@!RFC8620], Section 5.3. The following extra *SetError* types are defined:

For **create**:

- `forbiddenFrom`: The user is not allowed to send from the address given as
  the *email* property of the Identity.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/identitySortOrder.mdown
=====================================================
# Identity sort order

> :information_source:
> Implemented

### urn:apache:james:params:jmap:mail:identity:sortorder

This represents support for the extra `sortOrder` property on the `Identity` object.

Servers supporting this specification MUST add this property to the capabilities object.

This extension is specific to the Apache James server and is a temporary solution while waiting for the main work on
Identity sort order as part of the IETF group to be finalized as a proper RFC document.

### Additions to the Identity object

This specification adds the following property on `Identity` object:

- **sortOrder**: `UnsignedInt` (default: 0)  Defines the sort order of Identities when presented in the client’s UI, so
it is consistent between devices. The number MUST be an integer in the range 0 <= sortOrder < 2^31.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/messagesubmission.mdown
=====================================================
# Email Submission

> :warning:
> Partially implemented

An **EmailSubmission** object represents the submission of an Email for delivery to one or more recipients. It has the following properties:

- **id**: `Id` (immutable; server-set)
  The id of the EmailSubmission.
- **identityId**: `Id` (immutable)
  The id of the Identity to associate with this submission.

> :warning:
> Not implemented. Submissions cannot be created with identityId. This field should be omitted.

- **emailId**: `Id` (immutable)
  The id of the Email to send. The Email being sent does not have to be a draft, for example, when "redirecting" an existing Email to a different address.
- **threadId**: `Id` (immutable; server-set)
  The Thread id of the Email to send. This is set by the server to the *threadId* property of the Email referenced by the *emailId*.
- **envelope**: `Envelope|null` (immutable)
  Information for use when sending via SMTP.

    An **Envelope** object has the following properties:

    - **mailFrom**: `Address`
      The email address to use as the return address in the SMTP submission, plus any parameters to pass with the MAIL FROM address. The JMAP server MAY allow the address to be the empty string.

        When a JMAP server performs an SMTP message submission, it MAY use the
        same id string for the ENVID parameter [@!RFC3461] and the
        EmailSubmission object id. Servers that do this MAY replace a
        client-provided value for ENVID with a server-provided value.

    - **rcptTo**: `Address[]`
      The email addresses to send the message to, and any RCPT TO parameters to pass with the recipient.

    An **Address** object has the following properties:

    - **email**: `String`
      The email address being represented by the object. This is a "Mailbox" as used in the Reverse-path or Forward-path of the MAIL FROM or RCPT TO command in [@!RFC5321].
    - **parameters**: `Object|null`
      Any parameters to send with the email address (either mail-parameter or rcpt-parameter as appropriate, as specified in [@!RFC5321]). If supplied, each key in the object is a parameter name, and the value is either the parameter value (type `String`) or `null` if the parameter does not take a value. For both name and value, any xtext or unitext encodings are removed (see [@!RFC3461] and [@!RFC6533]) and JSON string encoding is applied.

> :warning:
> Not implemented. Submissions cannot be created with parameters. This field should be omitted.

    If the *envelope* property is `null` or omitted on creation, the server MUST generate this from the referenced Email as follows:

    - **mailFrom**: The email address in the *Sender* header field, if present;
      otherwise, it's the email address in the *From* header field, if present. In either case, no parameters are added.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/rights.mdown
=====================================================
# urn:apache:james:params:jmap:mail:shares extension

<aside class="notice">
  Implemented
</aside>

This extension is specific to the Apache James server as it relies on a common shared storage allowing arbitrary cross-account entity access.

This extension to the JMAP specification enables to:

 - Grant access on mailboxes, and the email they contain to other users.
 - Enable display of shared mailboxes, and shared messages as part of the main user account, making effectively account sharing transparent from a client perspective.

## Defined capability

The new capability `urn:apache:james:params:jmap:mail:shares` is defined.

This extension defines both behavioral changes and additional fields for the Mailbox object.

If specified, behavioral changes and additional fields defined hereafter MUST apply.

If unspecified no additional fields to the Mailbox object are returned, and the behaviour needs to be exactly the one of `urn:ietf:params:jmap:mail`.

## Addition to existing data types

The following data types are defined:

`Username` of type `String` corresponds to a username.

`Right` of type `String` defines an action that can be carried out on a mailbox or its content.

The following `Right`s are defined:

 - `"a"` Administer: the user can view and modify the rights of this mailbox
 - `"i"` Insert: the user can use the id of this mailbox in `mailboxId` fields of Emails.
 - `"l"` Lookup: the user can see the name of this mailbox but information about the content of this mailbox MUST not be disclosed.
 - `"r"` Read: the user can read the content of this mailbox, and see the assiociated Email and Thread counts.
 - `"t"` DeleteMessages: the user can delete Email in this Mailbox
 - `"w"` Write: the user can alter the Keywords of messages contained in this Mailbox, except the `$Seen` keyword
 - `"s"` Seen: the user can alter the `$Seen` keyword of messages contained in this Mailbox
 - `"e"` Expunge: the user can mark Email as Expunged in this Mailbox. This action is not achievable using JMAP.

`UserRights` is an array of `Right`, representing the actions a user can perform on a mailbox.

`Rights` indicates which user can perform which operation on the Mailbox and the related entities.

Of type `Username[UserRights]` this map associate to each `Username` the associated `UserRights` actions that can be performed.

## Additional fields for Mailbox object


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/securityconsiderations.mdown
=====================================================
# Security Considerations

All security considerations of JMAP ([@!RFC8620]) apply to this specification. Additional considerations specific to the data types and functionality introduced by this document are described in the following subsections.

## EmailBodyPart Value

Service providers typically perform security filtering on incoming messages, and it's important that the detection of content-type and charset for the security filter aligns with the heuristics performed by JMAP servers. Servers that apply heuristics to determine the content-type or charset for an *EmailBodyValue* SHOULD document the heuristics and provide a mechanism to turn them off in the event they are misaligned with the security filter used at a particular mail host.

Automatic conversion of charsets that allow hidden channels for ASCII text, such as UTF-7, have been problematic for security filters in the past, so server implementations can mitigate this risk by having such conversions  off-by-default and/or separately configurable.

To allow the client to restrict the volume of data it can receive in response to a request, a maximum length may be requested for the data returned for a textual body part. However, truncating the data may change the semantic meaning, for example, truncating a URL changes its location. Servers that scan for links to malicious sites should take care to either ensure truncation is not at a semantically significant point or rescan the truncated value for malicious content before returning it.

## HTML Email Display

HTML message bodies provide richer formatting for messages but present a number of security challenges, especially when embedded in a webmail context in combination with interface HTML. Clients that render HTML messages should carefully consider the potential risks, including:

* Embedded JavaScript can rewrite the message to change its content on
  subsequent opening, allowing users to be mislead. In webmail systems, if run in the same origin as the interface, it can access and exfiltrate all private data accessible to the user, including all other messages and potentially contacts, calendar events, settings, and credentials. It can also rewrite the interface to undetectably phish passwords. A compromise is likely to be persistent, not just for the duration of page load, due to exfiltration of session credentials or installation of a service worker that can intercept all subsequent network requests (however, this would only be possible if blob downloads are also available on the same origin, and the service worker script is attached to the message).
* HTML documents may load content directly from the Internet, rather than just
  referencing attached resources. For example, you may have an `<img>` tag with an external `src` attribute. This may leak to the sender when a message is opened, as well as the IP address of the recipient. Cookies may also be sent and set by the server, allowing tracking between different messages and even website visits and advertising profiles.
* In webmail systems, CSS can break the layout or create phishing
  vulnerabilities. For example, the use of `position:fixed` can allow a message to draw content outside of its normal bounds, potentially clickjacking a real interface element.
* If in a webmail context and not inside a separate frame, any styles defined in
  CSS rules will apply to interface elements as well if the selector matches, allowing the interface to be modified. Similarly, any interface styles that match elements in the message will alter their appearance, potentially breaking the layout of the message.
* The link text in HTML has no necessary correlation with the actual target of
  the link, which can be used to make phishing attacks more convincing.
* Links opened from a message or embedded external content may leak private info
  in the `Referer` header sent by default in most systems.
* Forms can be used to mimic login boxes, providing a potent phishing vector if
  allowed to submit directly from the message display.

There are a number of ways clients can mitigate these issues, and a defence-in-depth approach that uses a combination of techniques will provide the strongest security.

* HTML can be filtered before rendering, stripping potentially malicious
  content. Sanitising HTML correctly is tricky, and implementors are strongly recommended to use a well-tested library with a carefully vetted whitelist-only approach. New features with unexpected security characteristics may be added to HTML rendering engines in the future; a blacklist approach is likely to result in security issues.

  Subtle differences in parsing of HTML can introduce security flaws: to filter with 100% accuracy, you need to use the same parser that the HTML rendering engine will use.

* Encapsulating the message in an `<iframe sandbox>`, as defined in
  [HTML](https://www.w3.org/TR/html52/), Section 4.7.6, can help mitigate a
  number of risks. This will:

  * Disable JavaScript.
  * Disable form submission.
  * Prevent drawing outside of its bounds or conflicts between message CSS and interface CSS.
  * Establish a unique anonymous origin, separate to the containing origin.

* A strong [Content Security Policy](https://www.w3.org/TR/CSP3/) can, among
  other things, block JavaScript and loading of external content should it manage to evade the filter.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/thread.mdown
=====================================================
# Threads

> :warning:
> Partially implemented.

Replies are grouped together with the original message to form a Thread. In JMAP, a Thread is simply a flat list of Emails, ordered by date. Every Email MUST belong to a Thread, even if it is the only Email in the Thread.

The exact algorithm for determining whether two Emails belong to the same Thread is not mandated in this spec to allow for compatibility with different existing systems. For new implementations, it is suggested that two messages belong in the same Thread if both of the following conditions apply:

  1. An identical message id [@!RFC5322] appears in both messages in any of the
     Message-Id, In-Reply-To, and References header fields.
  2. After stripping automatically added prefixes such as "Fwd:", "Re:",
     "[List-Tag]", etc., and ignoring white space, the subjects are the same. This avoids the situation where a person replies to an old message as a convenient way of finding the right recipient to send to but changes the subject and starts a new conversation.

If messages are delivered out of order for some reason, a user may have two Emails in the same Thread but without headers that associate them with each other. The arrival of a third Email may provide the missing references to join them all together into a single Thread. Since the *threadId* of an Email is immutable, if the server wishes to merge the Threads, it MUST handle this by deleting and reinserting (with a new Email id) the Emails that change *threadId*.

A **Thread** object has the following properties:

- **id**: `Id` (immutable; server-set)
  The id of the Thread.
- **emailIds**: `Id[]` (server-set)
  The ids of the Emails in the Thread, sorted by the *receivedAt* date of the Email, oldest first. If two Emails have an identical date, the sort is server dependent but MUST be stable (sorting by id is recommended).

The following JMAP methods are supported.

## Thread/get

> :information_source:
> Implemented

This is a standard "/get" method as described in [@!RFC8620], Section 5.1.

### Example

Request:

    [[ "Thread/get", {
      "accountId": "acme",
      "ids": ["f123u4", "f41u44"]
    }, "#1" ]]

with response:

    [[ "Thread/get", {
      "accountId": "acme",
      "state": "f6a7e214",
      "list": [
        {
          "id": "f123u4",
          "emailIds": [ "eaa623", "f782cbb"]

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/ianaconsiderations.mdown
=====================================================
# IANA Considerations

## JMAP Capability Registration for "mail"

IANA has registered the "mail" JMAP Capability as follows:

Capability Name: `urn:ietf:params:jmap:mail`

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section 9

## JMAP Capability Registration for "submission"

IANA has registered the "submission" JMAP Capability as follows:

Capability Name: `urn:ietf:params:jmap:submission`

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section 9

## JMAP Capability Registration for "vacationresponse"

IANA has registered the "vacationresponse" JMAP Capability as follows:

Capability Name: `urn:ietf:params:jmap:vacationresponse`

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, Section 9

## IMAP and JMAP Keywords Registry

This document makes two changes to the IMAP keywords registry as defined in [@!RFC5788].

First, the name of the registry is changed to the "IMAP and JMAP Keywords" registry.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/searchsnippet.mdown
=====================================================
# Search Snippets

> :warning:
> Not implemented

When doing a search on a `String` property, the client may wish to show the relevant section of the body that matches the search as a preview and to highlight any matching terms in both this and the subject of the Email. Search snippets represent this data.

A **SearchSnippet** object has the following properties:

- **emailId**: `Id`
  The Email id the snippet applies to.
- **subject**: `String|null`
  If text from the filter matches the subject, this is the subject of the Email with the following transformations:

    1. Any instance of the following three characters MUST be replaced by an appropriate HTML entity: & (ampersand), < (less-than sign), and > (greater-than sign) [HTML](https://www.w3.org/TR/html52/). Other characters MAY also be replaced with an HTML entity form.

    2. The matching words/phrases from the filter are wrapped in HTML `<mark></mark>` tags.

    If the subject does not match text from the filter, this property is `null`.
- **preview**: `String|null`
  If text from the filter matches the plaintext or HTML body, this is the relevant section of the body (converted to plaintext if originally HTML), with the same transformations as the *subject* property. It MUST NOT be bigger than 255 octets in size. If the body does not contain a match for the text from the filter, this property is `null`.

What is a relevant section of the body for preview is server defined. If the server is unable to determine search snippets, it MUST return `null` for both the *subject* and *preview* properties.

Note that unlike most data types, a SearchSnippet DOES NOT have a property called `id`.

The following JMAP method is supported.

## SearchSnippet/get

To fetch search snippets, make a call to `SearchSnippet/get`. It takes the following arguments:

- **accountId**: `Id`
  The id of the account to use.
- **filter**: `FilterOperator|FilterCondition|null`
  The same filter as passed to Email/query; see the description of this method in Section 4.4 for details.
- **emailIds**: `Id[]`
  The ids of the Emails to fetch snippets for.

The response has the following arguments:

- **accountId**: `Id`
  The id of the account used for the call.
- **list**: `SearchSnippet[]`
  An array of SearchSnippet objects for the requested Email ids. This may not be in the same order as the ids that were in the request.
- **notFound**: `Id[]|null`
  An array of Email ids requested that could not be found, or `null` if all
  ids were found.

As the search snippets are derived from the message content and the algorithm for doing so could change over time, fetching the same snippets a second time MAY return a different result. However, the previous value is not considered incorrect, so there is no state string or update mechanism needed.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/vacationresponse.mdown
=====================================================
# Vacation Response

> :information_source:
> Implemented

A vacation response sends an automatic reply when a message is delivered to the mail store, informing the original sender that their message may not be read for some time.

Automated message sending can produce undesirable behaviour. To avoid this, implementors MUST follow the recommendations set forth in [@!RFC3834].

The **VacationResponse** object represents the state of vacation-response-related settings for an account. It has the following properties:

- **id**: `Id` (immutable; server-set)
  The id of the object. There is only ever one VacationResponse object, and its id is `"singleton"`.
- **isEnabled**: `Boolean`
  Should a vacation response be sent if a message arrives between the *fromDate* and *toDate*?
- **fromDate**: `UTCDate|null`
  If *isEnabled* is `true`, messages that arrive on or after this date-time (but before the *toDate* if defined) should receive the user's vacation response. If `null`, the vacation response is effective immediately.
- **toDate**: `UTCDate|null`
  If *isEnabled* is `true`, messages that arrive before this date-time (but on or after the *fromDate* if defined) should receive the user's vacation response. If `null`, the vacation response is effective indefinitely.
- **subject**: `String|null`
  The subject that will be used by the message sent in response to messages when the vacation response is enabled. If `null`, an appropriate subject SHOULD be set by the server.
- **textBody**: `String|null`
  The plaintext body to send in response to messages when the vacation response is enabled. If this is `null`, the server SHOULD generate a plaintext body part from the *htmlBody* when sending vacation responses but MAY choose to send the response as HTML only. If both *textBody* and *htmlBody* are `null`, an appropriate default body SHOULD be generated for responses by the server.
- **htmlBody**: `String|null`
  The HTML body to send in response to messages when the vacation response is enabled. If this is `null`, the server MAY choose to generate an HTML body part from the *textBody* when sending vacation responses or MAY choose to send the response as plaintext only.

The following JMAP methods are supported.

## VacationResponse/get

This is a standard "/get" method as described in [@!RFC8620], Section 5.1.

There MUST only be exactly one VacationResponse object in an account. It MUST have the id "singleton".

## VacationResponse/set

This is a standard "/set" method as described in [@!RFC8620], Section 5.3.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/delegation.mdown
=====================================================
# Delegations extension

> :information_source:
> Implemented

## Context
This extension is specific to the Apache James server which defines methods to manage users' JMAP delegation settings.

This extension to the JMAP specification enables to:

- Manage accounts that a user delegates access to.
- Manage accounts that a user is allowed access.

## Addition capability
The URN `urn:apache:james:params:jmap:delegation` represents support for the Delegation data type and associated API methods.

Servers supporting this specification MUST add this property to the capabilities object.

## Addition to the Session object
Servers supporting this specification MUST add the delegated accounts to the `accounts` property of the Session object.

## Behavioral changes
When `urn:apache:james:params:jmap:delegation` is specified, access to a delegated account is enabled through standard JMAP API calls
but MUST except API calls to manage delegated account's delegation setting to avoid privilege escalation.

## Delegation methods
A **Delegation** object stores information about an email address that either has access to the user's account or delegates access
to the user. The semantics for this object depends on the context of usage methods: either manage delegate accounts or delegated accounts.

The delegation object MUST have the following properties:
- **id**: `Id` (immutable; server-set)
  The id of the Delegation.
- **username**: `String` (immutable)
  The email address of the user that either delegates or is delegated to this user account.
  
The **Delegate** object follows the structure of **Delegation** and represents delegations accessing this account (allowing the listed user to connect as the current account owner).

The **DelegatedAccount** object follows the structure of **Delegation** and represents delegations active for this account (allowing the current account owner to connect as the listed user).

A user can delegate his account to multiple users as well as be allowed to access other accounts.

A user can manage his delegations to other users to access his account by creating, deleting and retrieving **Delegate** objects.
Meanwhile, a user can only retrieve and delete **DelegatedAccount** objects.

A server MUST not allow a delegated user to access and manage the owner user's delegation setting to avoid privilege escalation.

The following JMAP methods are supported:

### Delegate/get
This method returns **Delegate** objects of the user.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/mail/intro.mdown
=====================================================
# Introduction

The JSON Meta Application Protocol (JMAP) [@!RFC8620] is a generic protocol for synchronising data, such as mail, calendars, or contacts between a client and a server. It is optimised for mobile and web environments and aims to provide a consistent interface to different data types.

This specification defines a data model for accessing a mail store over JMAP,
allowing you to query, read, organise, and submit mail for sending.

The data model is designed to allow a server to provide consistent access to
the same data via IMAP [@?RFC3501] as well as JMAP. As in IMAP, a message
must belong to a Mailbox; however, in JMAP, its id does not change if you move
it between Mailboxes, and the server may allow it to belong to multiple
Mailboxes simultaneously (often exposed in a user agent as labels rather than
folders).

As in IMAP, messages may also be assigned zero or more keywords: short arbitrary
strings. These are primarily intended to store metadata to inform client
display, such as unread status or whether a message has been replied to. An
IANA registry allows common semantics to be shared between clients and extended
easily in the future.

A message and its replies are linked on the server by a common Thread id.
Clients may fetch the list of messages with a particular Thread id to more
easily present a threaded or conversational interface.

Permissions for message access happen on a per-Mailbox basis. Servers may give
the user restricted permissions for certain Mailboxes, for example, if another
user's inbox has been shared as read-only with them.

## Notational Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all capitals, as shown here.

Type signatures, examples, and property descriptions in this document follow the conventions established in Section 1.1 of [@!RFC8620]. Data types defined in the core specification are also used in this document.

Servers MUST support all properties specified for the new data types defined in this document.

## Terminology

This document uses the same terminology as in the core JMAP specification.

The terms Mailbox, Thread, Email, SearchSnippet, EmailSubmission and VacationResponse (with that specific capitalisation) are used to refer to the data types defined in this document and instances of those data types.

The term message refers to a document in Internet Message Format, as described in [@!RFC5322]. The Email data type represents messages in the mail store and associated metadata.

## Additions to the Capabilities Object

The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], Section 2.

This document defines three additional capability URIs.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/custom-quotas/quotas.mdown
=====================================================
# Introduction

<aside class="notice">
  Implemented, deprecated
</aside>

This specification defines a data model for handling mail quotas over JMAP, allowing you to read quota information.

This specification does not address quota administration, which should be handled by other means.

This specification is not official and proper to the James project usage at the moment.

## Terminology

### Quota

A quota is a numeric upper limit that the server is enforcing. Quotas are applied to JMAP Mailbox objects.

## Addition to the capabilities object

The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], section 2.

This document defines one additional capability URI.

### urn:apache:james:params:jmap:mail:quota

This represents support for the Quota data type and associated API methods.
Servers supporting this specification MUST add this property to the capabilities object.

This extension is specific to the Apache James server and is a temporary solution while waiting for the main work on
quotas as part of the IETF group to be finalized as a proper RFC document.

This extension enables to:

* read quotas usage and limits on mailboxes.

If specified, behavioral changes and additional fields defined hereafter MUST apply.

If unspecified no additional fields to the Mailbox object are returned, and the behaviour needs to be exactly the one of `urn:ietf:params:jmap:mail`.

# Quotas definition

The quota is an addition to the Mailbox object that displays the limit set to a mailbox usage as well as the current usage in regard to that limit.

## The QuotaId Data Type

The **QuotaId** is a `String` defined with the name of the **QuotaRoot** (as defined in [RFC2087](https://tools.ietf.org/html/rfc2087.html)) it represents.
It usually represents the ID attached to one or more **Quota** objects defined for that Mailbox.

## The Quotas.Type Data Type

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/securityconsiderations.mdown
=====================================================
# Security considerations

All security considerations of JMAP ([@!RFC8620]) apply to this specification.

Implementors should be careful to make sure the implementation of that extension does not violate the site's security policy.
The resource usage of other users is likely to be considered confidential information and should not be divulged to
unauthorized persons.

As for any resource shared across users (for example, a quota with the `domain` or `global` scope), a user that can consume
the resource can affect the resources available to the other users. For example, a user could spam himself with events and
make the shared resource hit the limit and unusable for others (implementors could mitigate that with some rate limiting
implementation on the server).

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/ianaconsiderations.mdown
=====================================================
# IANA Considerations

## JMAP Capability Registration for "quota"

IANA will register the "quota" JMAP Capability as follows:

Capability Name: `urn:ietf:params:jmap:quota`

Specification document: this document

Intended use: common

Change Controller: IETF

Security and privacy considerations: this document, section 4.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/quota.mdown
=====================================================
# Quota

> :warning:
> Partially implemented

The quota is an object that displays the limit set to an account usage as well as the current usage in regard to that limit.

The quota object **MUST** contain the following fields:

* **id**: `Id` The unique identifier for this object.

* **resourceType**: `String` The resource type of the quota.

* **used**: `UnsignedInt` The current usage of the defined quota, using the "resourceType" defined as unit of measure. Computation of this value is handled by the server.

* **hardLimit**: `UnsignedInt` The hard limit set by this quota, using the "resourceType" defined as unit of measure. Objects in scope may not be created or updated if this limit is reached.

* **scope**: `String` The "Scope" of this quota.

* **name**: `String` The name of the quota. Useful for managing quotas and using queries for searching.

* **types**: `String[]` A list of all the type names as defined in the "JMAP Types Names" registry (e.g., Email, Calendar, etc.) to which this quota applies. This allows the quotas to be assigned to distinct or shared data types.
  
  The server **MUST** filter out any types for which the client did not request the associated capability in the "using" section of the request. Further, the server **MUST NOT** return Quota objects for which there are no types recognized by the client.

The quota object **MAY** contain the following field:

* **warnLimit**: `UnsignedInt|null` The warn limit set by this quota, using the "resourceType" defined as unit of measure. 
It can be used to send a warning to an entity about to reach the hard limit soon, but with no action taken yet. 
If set, it **SHOULD** be lower than the "softLimit" (if present and different from null) and the "hardLimit".

* **softLimit**: `UnsignedInt|null` The soft limit set by this quota, using the "resourceType" defined as unit of measure. 
It can be used to still allow some operations but refuse some others. What is allowed or not is up to the server. 
For example, it could be used for blocking outgoing events of an entity (sending emails, creating calendar events, etc.) while still receiving incoming events (receiving emails, receiving calendars events, etc.). 
If set, it **SHOULD** be higher than the "warnLimit" (if present and different from null) but lower than the "hardLimit".

* **description**: `String|null` Arbitrary, free, human-readable description of this quota. It might be used to explain where the different limits come from and explain the entities and data types this quota applies to. 
The description **MUST** be encoded in UTF-8 [RFC3629] as described in [RFC8620], Section 1.5, and selected based on an Accept-Language header in the request (as defined in [RFC9110], Section 12.5.4) or out-of-band information about the user's language or locale.

The following JMAP methods are supported.

## Quota/get

> :information_source:
> Implemented

Standard “/get” method as described in [@!RFC8620] section 5.1. The id's argument may be "null" to fetch all quotas of the account at once, as demonstrated in Section 5.1.

## Quota/changes


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/quotas/intro.mdown
=====================================================
# Introduction

> :warning:
> Partially implemented

JMAP ([@!RFC8620] – JSON Meta Application Protocol) is a generic protocol for synchronising data, such as mails,
calendars or contacts, between a client and a server. It is optimised for mobile and web environments, and aims
to provide a consistent interface to different data types.

This specification defines a data model for handling quotas over JMAP, allowing you to read and explain quota information.

This specification does not address quota administration, which should be handled by other means.

## Notational conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in BCP
14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all
capitals, as shown here.

Type signatures, examples and property descriptions in this document follow the conventions established in section 1.1
of [@!RFC8620]. Data types defined in the core specification are also used in this document.

Servers MUST support all properties specified for the new data types defined in this document.

## Terminology

The same terminology is used in this document as in the core JMAP specification.

The term Quota (with that specific capitalization) is used to refer to the data type defined in this document and instance of that data type.

## Addition to the capabilities object

The capabilities object is returned as part of the JMAP Session object; see [@!RFC8620], section 2.

This document defines one additional capability URI.

### urn:ietf:params:jmap:quota

This represents support for the Quota data type and associated API methods. Servers supporting this specification **MUST** add a property called `urn:ietf:params:jmap:quota` to the capabilities object.

The value of this property is an empty object in both the JMAP session capabilities property and an account’s accountCapabilities property.

## Sub-types of the Quota Data Type

There are two fields within the `Quota` data type, which have an enumerated set of possible values. These are:

### Scope


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/push.mdown
=====================================================
# Push

> :information_source:
> Implemented.
>
> Some limitations for event source are described below.

Push notifications allow clients to efficiently update (almost) instantly to stay in sync with data changes on the server. The general model for push is simple and sends minimal data over the push channel: just enough for the client to know whether it needs to resync. The format allows multiple changes to be coalesced into a single push update and the frequency of pushes to be rate limited by the server. It doesn't matter if some push events are dropped before they reach the client; the next time it gets/sets any records of a changed type, it will discover the data has changed and still sync all changes.

There are two different mechanisms by which a client can receive push notifications, to allow for the different environments in which a client may exist. An event source resource (see Section 7.3) allows clients that can hold transport connections open to receive push notifications directly from the JMAP server. This is simple and avoids third parties, but it is often not feasible on constrained platforms such as mobile devices. Alternatively, clients can make use of any push service supported by their environment. A URL for the push service is registered with the JMAP server (see Section 7.2), then the server then POSTs each notification to that URL. The push service is then responsible for routing these to the client.

## The StateChange Object

When something changes on the server, the server pushes a **StateChange** object to the client. A **StateChange** object has the following properties:

- **@type**: `String`
  This MUST be the string "StateChange".
- **changed**: `Id[TypeState]`
  A map of an *account id* to an object encoding the state of data types that have changed for that account since the last StateChange object was pushed, for each of the accounts to which the user has access and for which something has changed.

    A **TypeState** object is a map. The keys are the type name `Foo` (e.g., "Mailbox" or "Email"), and the value is the *state* property that would currently be returned by a call to *Foo/get*.

    The client can compare the new state strings with its current values to see whether it has the current data for these types. If not, the changes can then be efficiently fetched in a single standard API request (using the */changes* type methods).

### Example

In this example, the server has amalgamated a few changes together across two different accounts the user has access to, before pushing the following StateChange object to the client:

    {
      "@type": "StateChange",
      "changed": {
        "a3123": {
          "Email": "d35ecb040aab",
          "EmailDelivery": "428d565f2440",
          "CalendarEvent": "87accfac587a"
        },
        "a43461d": {
          "Mailbox": "0af7a512ce70",
          "CalendarEvent": "7a4297cecd76"
        }
      }
    }

The client can compare the state strings with its current state for the Email, CalendarEvent, etc., object types in the appropriate accounts to see if it needs to fetch changes.

If the client is itself making changes, it may receive a StateChange object while the /set API call is in flight. It can wait until the call completes and then compare if the new state string after the /set is the same as was pushed in the StateChange object; if so, and the old state of the /set response matches the client's previous state, it does not need to waste a request asking for changes it already knows.

## PushSubscription

Clients may create a *PushSubscription* to register a URL with the JMAP server. The JMAP server will then make an HTTP POST request to this URL for each push notification it wishes to send to the client.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/securityconsiderations.mdown
=====================================================
# Security Considerations

## Transport Confidentiality

To ensure the confidentiality and integrity of data sent and received via JMAP, all requests MUST use TLS 1.2 [@!RFC5246] [@!RFC8446] or later, following the recommendations in [@!RFC7525]. Servers SHOULD support TLS 1.3 [@!RFC8446] or later.

Clients MUST validate TLS certificate chains to protect against man-in-the-middle attacks [@!RFC5280].

## Authentication Scheme

A number of HTTP authentication schemes have been standardised (see https://www.iana.org/assignments/http-authschemes/). Servers should take care to assess the security characteristics of different schemes in relation to their needs when deciding what to implement.

Use of the Basic authentication scheme is NOT RECOMMENDED. Services that choose to use it are strongly recommended to require generation of a unique "app password" via some external mechanism for each client they wish to connect. This allows connections from different devices to be differentiated by the server and access to be individually revoked.

## Service Autodiscovery

Unless secured by something like DNSSEC, autodiscovery of server
details using SRV DNS records is vulnerable to a DNS poisoning attack, which can lead to the client talking to an attacker's server instead of the real JMAP server. The attacker may then intercept requests to execute man-in-the-middle attacks and, depending on the authentication scheme, steal credentials to generate its own requests.

Clients that do not support SRV lookups are likely to try just using the `/.well-known/jmap` path directly against the domain of the username over HTTPS. Servers SHOULD ensure this path resolves or redirects to the correct JMAP Session resource to allow this to work. If this is not feasible, servers MUST ensure this path cannot be controlled by an attacker, as again it may be used to steal credentials.

## JSON Parsing

The Security Considerations of [@!RFC8259] apply to the use of JSON as the data interchange format.

As for any serialization format, parsers need to thoroughly check the
syntax of the supplied data. JSON uses opening and closing tags for
several types and structures, and it is possible that the end of supplied
data will be reached when scanning for a matching closing tag; this is an
error condition, and implementations need to stop scanning at the end of the
supplied data.

JSON also uses a string encoding with some escape sequences to encode
special characters within a string. Care is needed when processing these
escape sequences to ensure that they are fully formed before
the special processing is triggered, with special care taken when the
escape sequences appear adjacent to other (non-escaped) special characters
or adjacent to the end of data (as in the previous paragraph).

If parsing JSON into a non-textual structured data format, implementations
may need to allocate storage to hold JSON string elements.  Since JSON
does not use explicit string lengths, the risk of denial of service due to
resource exhaustion is small, but implementations may still wish to place
limits on the size of allocations they are willing to make in any given
context, to avoid untrusted data causing excessive memory allocation.

## Denial of Service

A small request may result in a very large response and require considerable
work on the server if resource limits are not enforced. JMAP provides mechanisms for advertising and enforcing a wide variety of limits for mitigating this threat, including limits on the number of objects fetched in a single method call, number of methods in a single request, number of concurrent requests, etc.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/session.mdown
=====================================================
# The JMAP Session Resource

> :information_source:
> Implemented

You need two things to connect to a JMAP server:

1. The URL for the JMAP Session resource. This may be requested directly from
   the user or discovered automatically based on a username domain (see Section 2.2 below).
2. Credentials to authenticate with. How to obtain credentials is out of scope
   for this document.

A successful authenticated GET request to the JMAP Session resource MUST return a JSON-encoded **Session** object, giving details about the data and capabilities the server can provide to the client given those credentials. It has the following properties:

- **capabilities**: `String[Object]`
  An object specifying the capabilities of this server. Each key is a URI for a capability supported by the server. The value for each of these keys is an object with further information about the server's capabilities in relation to that capability.

    The client MUST ignore any properties it does not understand.

    The capabilities object MUST include a property called `urn:ietf:params:jmap:core`. The value of this property is an object that MUST contain the following information on server capabilities (suggested minimum values for limits are supplied that allow clients to make efficient use of the network):

    - **maxSizeUpload**: `UnsignedInt`

> :warning:
> Not enforced yet

      The maximum file size, in octets, that the server will accept for a single file upload (for any purpose). Suggested minimum: 50,000,000.
    - **maxConcurrentUpload**: `UnsignedInt`

> :warning:
> Not enforced yet

      The maximum number of concurrent requests the server will accept to the upload endpoint.  Suggested minimum: 4.
    - **maxSizeRequest**: `UnsignedInt`

> :warning:
> Not enforced yet

      The maximum size, in octets, that the server will accept for a single
      request to the API endpoint. Suggested minimum: 10,000,000.
    - **maxConcurrentRequests**: `UnsignedInt`

> :warning:
> Not enforced yet

      The maximum number of concurrent requests the server will accept to
      the API endpoint. Suggested minimum: 4.
    - **maxCallsInRequest**: `UnsignedInt`

> :warning:

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/ianaconsiderations.mdown
=====================================================
# IANA Considerations

## Assignment of jmap Service Name

IANA has assigned the 'jmap' service name in the "Service Name and Transport Protocol Port Number Registry" [@!RFC6335].

Service Name: jmap

Transport Protocol(s): tcp

Assignee: IESG

Contact: IETF Chair

Description: JSON Meta Application Protocol

Reference: [@!RFC8620]

Assignment Notes: This service name was previously assigned under the name *JSON Mail Access Protocol*. This has been de-assigned and re-assigned with the approval of the previous assignee.

## Registration of Well-Known URI suffix for JMAP

IANA has registered the following suffix in the "Well-Known URIs" registry for JMAP, as described in [@!RFC8615]:

URI Suffix: jmap

Change Controller: IETF

Specification Document: [@!RFC8620], Section 2.2.

## Registration of the jmap URN Sub-namespace

IANA has registered the following URN sub-namespace in the "IETF URN Sub-namespace for Registered Protocol Parameter Identifiers" registry within the "Uniform Resource Name (URN) Namespace for IETF Use" registry as described in [@!RFC3553].

Registered Parameter Identifier: jmap

Reference: [@!RFC8620], Section 9.4

IANA Registry Reference: http://www.iana.org/assignments/jmap

## Creation of "JMAP Capabilities" Registry

IANA has created the "JMAP Capabilities" registry as described in Section 2. JMAP capabilities are advertised in the *capabilities* property of the Session object. They are used to extend the functionality of a JMAP server. A capability is referenced by a URI. The JMAP capability URI can be a URN starting with `urn:ietf:params:jmap:` plus a unique suffix that is the index value in the jmap URN sub-namespace. Registration of a JMAP capability with another form of URI has no impact on the jmap URN sub-namespace.

This registry follows the expert review process unless the "intended use" field is *common* or *placeholder*, in which case registration follows the specification required process.

A JMAP capability registration can have an intended use of *common*, *placeholder*, *limited*, or *obsolete*. IANA will list common-use registrations prominently and separately from those with other intended use values.

The JMAP capability registration procedure is not a formal standards process but rather an administrative procedure intended to allow community comment and sanity checking without excessive time delay.


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/binary.mdown
=====================================================
# Binary Data

> :information_source:
> Implemented

Binary data is referenced by a *blobId* in JMAP and uploaded/downloaded separately to the core API. The blobId solely represents the raw bytes of data, not any associated metadata such as a file name or content type. Such metadata is stored alongside the blobId in the object referencing it. The data represented by a blobId is immutable.

Any blobId that exists within an account may be used when creating/updating another object in that account. For example, an Email type may have a blobId that represents the object in Internet Message Format [@!RFC5322]. A client could create a new Email object with an attachment and use this blobId, in effect attaching the old message to the new one. Similarly, it could attach any existing attachment of an old message without having to download and upload it again.

When the client uses a blobId in a create/update, the server MAY assign a new blobId to refer to the same binary data within the new/updated object. If it does so, it MUST return any properties that contain a changed blobId in the created/updated response, so the client gets the new ids.

A blob that is not referenced by a JMAP object (e.g., as a message attachment) MAY be deleted by the server to free up resources. Uploads (see below) are initially unreferenced blobs. To ensure interoperability:

* The server SHOULD use a separate quota for unreferenced blobs to the
  account's usual quota. In the case of shared accounts, this quota SHOULD be separate per user.
* This quota SHOULD be at least the maximum total size that a single
  object can reference on this server. For example, if supporting JMAP Mail, this should be at least the maximum total attachments size for a message.
* When an upload would take the user over quota, the server MUST delete
  unreferenced blobs in date order, oldest first, until there is room for the new blob.
* Except where quota restrictions force early deletion, an unreferenced blob
  MUST NOT be deleted for at least 1 hour from the time of upload; if reuploaded, the same blobId MAY be returned, but this SHOULD reset the expiry time.
* A blob MUST NOT be deleted during the method call that removed the last
  reference, so that a client can issue a create and a destroy that both reference the blob within the same method call.

## Uploading Binary Data

There is a single endpoint that handles all file uploads for an account, regardless of what they are to be used for. The Session object (see Section 2) has an *uploadUrl* property in URI Template (level 1) format [@!RFC6570], which MUST contain a variable called `accountId`. The client may use this template in combination with an *accountId* to get the URL of the file upload resource.

To upload a file, the client submits an authenticated POST request to the file upload resource.

A successful request MUST return a single JSON object with the following properties as the response:

- **accountId**: `Id`
  The id of the account used for the call.
- **blobId**: `Id`
  The id representing the binary data uploaded. The data for this id is immutable. The id *only* refers to the binary data, not any metadata.
- **type**: `String`
  The media type of the file (as specified in [@!RFC6838], Section 4.2) as set in the Content-Type header of the upload HTTP request.
- **size**: `UnsignedInt`
  The size of the file in octets.

If identical binary content to an existing blob in the account is uploaded, the existing blobId MAY be returned.

Clients should use the blobId returned in a timely manner. Under rare circumstances, the server may have deleted the blob before the client uses it; the client should keep a reference to the local file so it can upload it again in such a situation.

When an HTTP error response is returned to the client, the server SHOULD return a JSON "problem details" object as the response body, as per [@!RFC7807].

As access controls are often determined by the object holding the reference to a blob, unreferenced blobs MUST only be accessible to the uploader, even in shared accounts.

## Downloading Binary Data

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/api.mdown
=====================================================
# Structured Data Exchange

The client may make an API request to the server to get or set structured data. This request consists of an ordered series of method calls. These are processed by the server, which then returns an ordered series of responses.

## Making an API Request

To make an API request, the client makes an authenticated POST request to the API resource, which is defined by the *apiUrl* property in the Session object (see Section 2).

The request MUST be of type `application/json` and consist of a single JSON-encoded **Request** object, as defined in Section 3.3. If successful, the response MUST also be of type `application/json` and consist of a single **Response** object, as defined in Section 3.4.

## The Invocation Data Type

> :information_source:
> Implemented

Method calls and responses are represented by the **Invocation** data type. This is a tuple, represented as a JSON array containing three elements:

1. A `String` **name** of the method to call or of the response.
2. A `String[*]` object containing *named* **arguments** for that method or
   response.
3. A `String` **method call id**: an arbitrary string from the client to be
   echoed back with the responses emitted by that method call (a method may return 1 or more responses, as it may make implicit calls to other methods; all responses initiated by this method call get the same method call id in the response).

## The Request Object

> :information_source:
> Implemented

A **Request** object has the following properties:

- **using**: `String[]`
  The set of capabilities the client wishes to use. The client MAY include capability identifiers even if the method calls it makes do not utilise those capabilities.

    The server advertises the set of specifications it supports in the Session object (see Section 2), as keys on the *capabilities* property.

- **methodCalls**: `Invocation[]`
  An array of method calls to process on the server. The method calls MUST be processed sequentially, in order.

- **createdIds**: `Id[Id]` (optional)
  A map of a (client-specified) creation id to the id the server assigned when a record was successfully created.

    As described later in this specification, some records may have a property that contains the id of another record. To allow more efficient network usage, you can set this property to reference a record created earlier in the same API request. Since the real id is unknown when the request is created, the client can instead specify the creation id it assigned, prefixed with a `#` (see Section 5.3 for more details).

    As the server processes API requests, any time it successfully creates a new record, it adds the creation id to this map (see the *create* argument to "/set" in Section 5.3), with the server-assigned real id as the value. If it comes across a reference to a creation id in a create/update, it looks it up in the map and replaces the reference with the real id, if found.

    The client can pass an initial value for this map as the *createdIds* property of the Request object. This may be an empty object. If given in the request, the response will also include a createdIds property. This allows proxy servers to easily split a JMAP request into multiple JMAP requests to send to different servers. For example, it could send the first two method calls to server A, then the third to server B, before sending the fourth to server A again. By passing the createdIds of the previous response to the next request, it can ensure all of these still resolve. See Section 5.8 for further discussion of proxy considerations.

Future specifications MAY add further properties to the Request object to extend the semantics. To ensure forwards compatibility, a server MUST ignore any other properties it does not understand on the JMAP Request object.

### Example Request

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/jmap/intro.mdown
=====================================================
# Introduction

 The JSON Meta Application Protocol (JMAP) is used for synchronising data, such as mail, calendars, or contacts, between a client and a server. It is optimised for mobile and web environments and aims to provide a consistent interface to different data types.

This specification is for the generic mechanism of data synchronisation. Further specifications define the data models for different data types that may be synchronised via JMAP.

JMAP is designed to make efficient use of limited network resources. Multiple API calls may be batched in a single request to the server, reducing round trips and improving battery life on mobile devices. Push connections remove the need for polling, and an efficient delta update mechanism ensures a minimum amount of data is transferred.

JMAP is designed to be horizontally scalable to a very large number of users. This is facilitated by separate endpoints for users after login, the separation of binary and structured data, and a data model for sharing that does not allow data dependencies between accounts.

## Notational Conventions

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [@!RFC2119] [@!RFC8174] when, and only when, they appear in all capitals, as shown here.

The underlying format used for this specification is JSON. Consequently, the terms "object" and "array" as well as the four primitive types (strings, numbers, booleans, and null) are to be interpreted as described in Section 1 of [@!RFC8259]. Unless otherwise noted, all the property names and values are case sensitive.

Some examples in this document contain "partial" JSON documents used for illustrative purposes.  In these examples, three periods "..." are used to indicate a portion of the document that has been removed for compactness.

For compatibility with publishing requirements, line breaks have been inserted inside long JSON strings, with the following continuation lines indented. To form the valid JSON example, any line breaks inside a string must be replaced with a space and any other white space after the line break removed.

Unless otherwise specified, examples of API exchanges only show the methodCalls array of the Request object or the methodResponses array of the Response object. For compactness, the rest of the Request/Response object is omitted.

Type signatures are given for all JSON values in this document. The following conventions are used:

* `*` – The type is undefined (the value could be any type, although permitted
  values may be constrained by the context of this value).
* `String` – The JSON string type.
* `Number` – The JSON number type.
* `Boolean` – The JSON boolean type.
* `A[B]` – A JSON object where the keys are all of type `A`, and the values
  are all of type `B`.
* `A[]` – An array of values of type `A`.
* `A|B` – The value is either of type `A` or of type `B`.

Other types may also be given, with their representation defined elsewhere in this document.

Object properties may also have a set of attributes defined along with the type
signature. These have the following meanings:

* `server-set` – Only the server can set the value for this property. The
  client MUST NOT send this property when creating a new object of this type.
* `immutable` – The value MUST NOT change after the object is created.
* `default` – (This is followed by a JSON value). The value that will be used
  for this property if it is omitted in an argument or when creating a new object of this type.

## The Id Data Type

> :information_source:
> Implemented


=====================================================
== File: server/protocols/jmap-rfc-8621/doc/specs/spec/authentication.mdown
=====================================================
# Authentication

JMAP RFC-8620 deliberately does not address authentication concerns, and only assumes authenticated requests are handled.

Discovery of available authentication mechanism is not part of the JMAP specification.

This document summarizes available authentication mechanism on top of JMAP RFC-8621 implementation as part of the James
project.

## Basic authentication

James JMAP RFC-8621 supports [Basic Authentication](https://en.wikipedia.org/wiki/Basic_access_authentication).

Please note that while convenient for testing purpose, this authentication mechanism should not be used for production
workflow: the credentials are transmitted again and over again, should be retained in memory, authentication is
challenged for each request...

## JWT authentication

We rely on a third party software to supply a signed JWT token, valid according to the James JWT public key.
If valid, the request is blindly trusted.

[Read more](https://github.com/apache/james-project/blob/master/docs/modules/servers/pages/distributed/configure/jmap.adoc#generating-a-jwt-key-pair).

## Implementing new authentication mechanisms

Administrator might need to adapt authentication to their needs.

To implement custom authentication mechanisms, you need to implement `org.apache.james.jmap.http.AuthenticationStrategy`
and register it in `RFC8621MethodsModule::provideAuthenticator`.

Note that the Apache James project would happily welcome contributions regarding support of other authentication flows.

=====================================================
== File: server/protocols/jmap-rfc-8621/doc/README.md
=====================================================
Annotated JMAP documentation
============================

This directory contains annotated JMAP documentation as found on https://jmap.io/.

Officially finalized specifications so far regarding JMAP are:

* [The core protocol](https://jmap.io/spec-core.html) [[RFC 8620](https://tools.ietf.org/html/rfc8620)]
* [JMAP Mail](https://jmap.io/spec-mail.html) [[RFC 8621](https://tools.ietf.org/html/rfc8621)]

Annotations aim at tracking implementation progress in James project.

Annotations are usually represented in the documentation by an `aside` tag. That tag can have two classes:

* `notice` More like an informative annotation, usually used to mark that a feature has been implemented
* `warning` To get the developer's attention, usually to say that maybe a point or detail of an implemented feature has 
not been implemented, or partially

=====================================================
== File: server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/method/PushSubscriptionSetCreatePerformer.scala
=====================================================
package org.apache.james.jmap.method

import java.nio.charset.StandardCharsets

import eu.timepit.refined.auto._
import javax.inject.Inject
import org.apache.james.jmap.api.model.{DeviceClientIdInvalidException, ExpireTimeInvalidException, PushSubscriptionCreationRequest, PushSubscriptionExpiredTime, PushSubscriptionId, PushSubscriptionKeys, PushSubscriptionServerURL, VerificationCode}
import org.apache.james.jmap.api.pushsubscription.PushSubscriptionRepository
import org.apache.james.jmap.core.SetError.SetErrorDescription
import org.apache.james.jmap.core.{Properties, PushSubscriptionCreation, PushSubscriptionCreationId, PushSubscriptionCreationParseException, PushSubscriptionCreationResponse, PushSubscriptionSetRequest, SetError}
import org.apache.james.jmap.json.{PushSerializer, PushSubscriptionSerializer}
import org.apache.james.jmap.method.PushSubscriptionSetCreatePerformer.{CreationFailure, CreationResult, CreationResults, CreationSuccess}
import org.apache.james.jmap.pushsubscription.{PushRequest, PushTTL, WebPushClient}
import org.apache.james.mailbox.MailboxSession
import org.slf4j.LoggerFactory
import play.api.libs.json.{JsObject, JsPath, Json, JsonValidationError}
import reactor.core.scala.publisher.{SFlux, SMono}

object PushSubscriptionSetCreatePerformer {
  private val LOGGER = LoggerFactory.getLogger(classOf[PushSubscriptionSetCreatePerformer])
  trait CreationResult

  case class CreationSuccess(clientId: PushSubscriptionCreationId, response: PushSubscriptionCreationResponse) extends CreationResult

  case class CreationFailure(clientId: PushSubscriptionCreationId, e: Throwable) extends CreationResult {
    def asMessageSetError: SetError = e match {
      case e: PushSubscriptionCreationParseException =>
        LOGGER.info("Failure to parse PushSubscription/set create", e)
        e.setError
      case e: ExpireTimeInvalidException =>
        LOGGER.info("Invalid time expiracy for push subscription: {}", e.getMessage)
        SetError.invalidArguments(SetErrorDescription(e.getMessage), Some(Properties("expires")))
      case e: DeviceClientIdInvalidException =>
        LOGGER.info("Invalid deviceId for push subscription: {}", e.getMessage)
        SetError.invalidArguments(SetErrorDescription(e.getMessage))
      case e: IllegalArgumentException =>
        LOGGER.info("Illegal argument in PushSubscription/set create", e)
        SetError.invalidArguments(SetErrorDescription(e.getMessage))
      case e =>
        LOGGER.error("Failed to create push subscription", e)
        SetError.serverFail(SetErrorDescription(e.getMessage))
    }
  }

  case class CreationResults(results: Seq[CreationResult]) {
    def created: Option[Map[PushSubscriptionCreationId, PushSubscriptionCreationResponse]] =
      Option(results.flatMap {
        case result: CreationSuccess => Some((result.clientId, result.response))
        case _ => None
      }.toMap)

=====================================================
== File: server/protocols/jmap-rfc-8621/src/main/scala/org/apache/james/jmap/delegation/DelegatedAccountSet.scala
=====================================================
package org.apache.james.jmap.delegation

import org.apache.james.jmap.core.{AccountId, SetError, UuidState}
import org.apache.james.jmap.method.{SetRequest, WithAccountId}

case class DelegatedAccountSetRequest(accountId: AccountId,
                                      destroy: Option[Seq[UnparsedDelegateId]]) extends WithAccountId with SetRequest {
  override def idCount: Int = destroy.map(_.size).getOrElse(0)
}

case class DelegatedAccountSetResponse(accountId: AccountId,
                                       oldState: Option[UuidState],
                                       newState: UuidState,
                                       destroyed: Option[Seq[DelegationId]],
                                       notDestroyed: Option[Map[UnparsedDelegateId, SetError]])

=====================================================
== File: server/protocols/protocols-smtp/src/test/resources/log4j.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p [%-11t] [%-50c{4}] %L %m%n" />
        </layout>
    </appender>

    <logger name="james" additivity="false">
        <level value="info"></level>
        <appender-ref ref="stdout" />
    </logger>
    <logger name="org.apache.james" additivity="false">
        <level value="info"></level>
        <appender-ref ref="stdout" />
    </logger>

    
    <root>
        <priority value="info" />
        <appender-ref ref="stdout" />
    </root>
</log4j:configuration>

=====================================================
== File: server/protocols/protocols-smtp/src/test/resources/smtpserver-advancedSecurity.xml
=====================================================
<smtpserver enabled="true">
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <announce>always</announce>
        <requireSSL>true</requireSSL>
        <plainAuthEnabled>false</plainAuthEnabled>
        <!--OIDC path will be add dynamically in Tests-->
    </auth>
    <verifyIdentity>true</verifyIdentity>
    <smtpGreeting>Apache JAMES awesome SMTP Server</smtpGreeting>
    <handlerchain>
        <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
    </handlerchain>
    <gracefulShutdown>false</gracefulShutdown>
</smtpserver>

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoSameAttachments.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Fri, 27 Feb 2015 20:32:14 +0100
X-Sieve: CMU Sieve 2.2
Received: from canondir.par.lng (unknown [92.103.166.6])
	(using TLSv1 with cipher AES256-SHA (256/256 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id BAB0D728
	for <to@linagora.com>; Fri, 27 Feb 2015 20:31:38 +0100 (CET)
X-Priority: 3 (Normal)
From: "From"
 <from@linagora.com>
To: "To"
 <to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

<b>html</b>

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlMail.eml
=====================================================
Delivered-To: mister@james.org
Received: by 10.28.170.202 with SMTP id t193csp327634wme;
        Thu, 4 Jun 2015 00:36:15 -0700 (PDT)
X-Received: by 10.180.77.195 with SMTP id u3mr5042880wiw.30.1433403375307;
        Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Return-Path: <bounces+1453977-062b-mister=james.org@email.airbnb.com>
Received: from o7.email.airbnb.com (o7.email.airbnb.com. [167.89.32.249])
        by mx.google.com with ESMTPS id i2si5691730wjz.123.2015.06.04.00.36.13
        for <mister@james.org>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) client-ip=167.89.32.249;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) smtp.mail=bounces+1453977-062b-mister=james.org@email.airbnb.com;
       dkim=pass header.i=@email.airbnb.com;
       dmarc=pass (p=REJECT dis=NONE) header.from=airbnb.com
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=email.airbnb.com;
	h=from:to:subject:mime-version:content-type:content-transfer-encoding;
	s=s20150428; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=EhC2QHKb5+63egDD
	qDCAepUELCeUZXCkw8+31kGT+O1va3iAKvQSAvzXJ3qJlIL9FgdeFk8sR78Vszn/
	A73vp6NGjAW60M4gUZjxEOIPzGKIS95KfmHxg10fXUOFW0uePojNEg4ZPCcuitrZ
	HuWvzHK5I2siGnqupiivwxDgs5c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info;
	h=from:to:subject:mime-version:content-type:content-transfer-encoding:x-feedback-id;
	s=smtpapi; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=FPiYMmNJLCrL2e8v/0
	DQC4voofe8nuuE7rhXZ25oqNAhAQja4oKIysJ1qAME2aEaqh+N5aJlCEuHrSG/7+
	NAQ0OY8KaJ2zlnxAbmgJETOjnf4oGdAa+nU/nVVEPfN2NRcBCNLGQZ80U4T5k8Xi
	PakIuZvKDTRq7PiosSCSHT/FQ=
Received: by filter0490p1mdw1.sendgrid.net with SMTP id filter0490p1mdw1.13271.556FFFE7B
        2015-06-04 07:36:09.249601779 +0000 UTC
Received: from i-dee0850e.inst.aws.airbnb.com (ec2-54-90-154-187.compute-1.amazonaws.com [54.90.154.187])
	by ismtpd-017 (SG) with ESMTP id 14dbd7fa6b4.779a.254b43
	for <mister@james.org>; Thu, 04 Jun 2015 07:36:09 +0000 (UTC)
Received: by i-dee0850e.inst.aws.airbnb.com (Postfix, from userid 1041)
	id 19CBA24C60; Thu,  4 Jun 2015 07:36:09 +0000 (UTC)
Date: Thu, 04 Jun 2015 07:36:08 +0000
From: Airbnb <discover@airbnb.com>
To: mister@james.org
Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail>
Subject: Text and Html not similar
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637";
 charset=UTF-8
Content-Transfer-Encoding: 7bit
X-User-ID: 32692788
X-Locale: fr
X-Category: engagement
X-Template: low_intent_top_destinations
recipients:

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlWithLongAndComplicatedContent.eml
=====================================================
Return-Path: <bounce-md_9656357.58dbec18.v1-49d8af7b35d9488c9dead4cc3cc198b0@mandrillapp.com>
Received: from obm3-ui.linagora.dc1 (arathi.linagora.dc1 [172.16.18.50])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Wed, 29 Mar 2017 19:17:15 +0200
X-Sieve: CMU Sieve 2.2
Received: from localhost (obm3-ui.linagora.dc1 [127.0.0.1])
	by obm3-ui.linagora.dc1 (Postfix) with ESMTP id 577115A5F2;
	Wed, 29 Mar 2017 19:17:15 +0200 (CEST)
X-Virus-Scanned: Debian amavisd-new at linagora.com
X-Spam-Flag: NO
X-Spam-Score: 0
X-Spam-Level:
X-Spam-Status: No, score=x tagged_above=-99 required=2 WHITELISTED tests=[]
	autolearn=unavailable
Received: from obm3-ui.linagora.dc1 ([127.0.0.1])
	by localhost (arathi.linagora.com [127.0.0.1]) (amavisd-new, port 10024)
	with ESMTP id 4bzZP7QfPmJE; Wed, 29 Mar 2017 19:17:15 +0200 (CEST)
Received: from mail136-224.atl41.mandrillapp.com (mail136-224.atl41.mandrillapp.com [198.2.136.224])
	by obm3-ui.linagora.dc1 (Postfix) with ESMTP id 8584158403
	for <vietnam@linagora.com>; Wed, 29 Mar 2017 19:17:14 +0200 (CEST)
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=mandrill; d=mail136-224.atl41.mandrillapp.com;
 h=From:Sender:Subject:To:Message-Id:Date:MIME-Version:Content-Type; i=communication@mail136-224.atl41.mandrillapp.com;
 bh=yJhIEmCfgDbo8xdU9+tDNkfptMw=;
 b=fzGGO+DuKddeSBCRPAw/7FYZ/705poaWScEOFMYDPk0lK0xivc3RpPFf+KqnICqfh/l7tSQuixzG
   rYdpBv3panK7BO/kCtnr4Cchy9G4x6PRaIaa5Yn+4ATbNF+G5ZMEo4VQ6b2eYRpun9GNKf4KH/Xa
   JLvjpo6zlG26d18VPDE=
Received: from pmta04.mandrill.prod.atl01.rsglab.com (127.0.0.1) by mail136-224.atl41.mandrillapp.com id hrfm1k1sb1k5 for <vietnam@linagora.com>; Wed, 29 Mar 2017 17:17:12 +0000 (envelope-from <bounce-md_9656357.58dbec18.v1-49d8af7b35d9488c9dead4cc3cc198b0@mandrillapp.com>)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mandrillapp.com;
 i=@mandrillapp.com; q=dns/txt; s=mandrill; t=1490807832; h=From :
 Sender : Subject : To : Message-Id : Date : MIME-Version : Content-Type
 : From : Subject : Date : X-Mandrill-User : List-Unsubscribe;
 bh=ewlRqmSXhXnjGp1bY43oska+6G6I3EvUCfH5hCQaH4A=;
 b=UPFJiVExUycrvG/DF1YjJFTbTw/S1k2JofcEVY9AmJC8JurPBsWkiP2zljPgaDRI7ufo0r
 tahqpPJYX/sRtkYmRXSlPDKMeRCI67tBiB3XnHuUE5p9Y6+jdRoRZ+aRdskohp8jZ8gCT/pM
 LVTBwMMJSf39TNWmWRMkM2Gx9SA8c=
From: <communication@linagora.com>
Sender: <communication@mail136-224.atl41.mandrillapp.com>
Subject: MailChimp Template Test - "Formation sur les technologies Open Source avec Pa"
X-Accounttype: ff
X-Auto-Response-Suppress: OOF, AutoReply
Auto-Submitted: auto-generated
To: <vietnam@linagora.com>
X-Report-Abuse: Please forward a copy of this message, including all headers, to abuse@mandrill.com
X-Report-Abuse: You can also report abuse here: http://mandrillapp.com/contact/abuse?id=9656357.49d8af7b35d9488c9dead4cc3cc198b0
X-Mandrill-User: md_9656357
Message-Id: <9656357.20170329171712.58dbec18aa5717.87868045@mail136-224.atl41.mandrillapp.com>
Date: Wed, 29 Mar 2017 17:17:12 +0000
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="_av-17eAoYMNNKEIcqCToyLXBA"


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/ics_in_header.eml
=====================================================
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_80_888179120.1536742699653"
From: Alice <alice@linagora.com>
Message-ID: <82eb227b-d3e1-3d7a-3220-8a1b4e96a85b@linagora.com>
To: Bob <bob@linagora.com>
Date: Wed, 12 Sep 2018 10:58:18 +0200
Subject: Event Invitation Reply (Accepted):
 Point Produit

------=_Part_80_888179120.1536742699653
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20180911T144134Z
LAST-MODIFIED:20180912T085818Z
DTSTAMP:20180912T085818Z
UID:f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe
 b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672
 
SUMMARY:Point Produit
PRIORITY:5
ORGANIZER;CN=Bob;X-OBM-ID=348:mailto:bob@linagora.com
ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
 mailto:alice@linagora.com
DTSTART:20180919T123000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:0
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
 oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Téléphone
END:VEVENT
END:VCALENDAR
Content-class: urn:content-classes:calendarmessage
Content-type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
Content-Disposition: attachment


------=_Part_80_888179120.1536742699653--

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlBodyWithManyEmptyTags.eml
=====================================================
From: User1 <user1@apache.org>
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_D2911C08-3A5E-42E0-8425-66C5B77B4CFB"
Message-Id: <AB19EFD0-02FC-4141-AB01-00E5DE4ECAC7@apache.org>
Mime-Version: 1.0 (Mac OS X Mail 9.3 \(3124\))
X-Smtp-Server: 0977CE5E-80CD-4915-A107-FAFEC09C4749
Subject: Re: Subject
Date: Thu, 2 Mar 2017 17:45:51 +0100
X-Universally-Unique-Identifier: A41C9129-282B-42B3-ABE2-4FA16E75C536
References: <5982F566-52E5-45B5-80A0-D52FB38EEB2C@apache.org> <f0899677-7238-b9e6-8a15-7bad5abb8fd6@apache.org> <6F0808B0-742B-4480-AD6F-E85C093E94FB@apache.org> <30371dd1-d178-d1e3-af42-6a87b48c7c70@apache.org> <CA8C086E-13CD-40C0-B653-664436B07B3C@apache.org> <7424b885-8168-9369-d718-b3efb73bfdae@apache.org>
To: User2 <user2@apache.org>
In-Reply-To: <7424b885-8168-9369-d718-b3efb73bfdae@apache.org>


--Apple-Mail=_D2911C08-3A5E-42E0-8425-66C5B77B4CFB
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=windows-1252


--
Signature



> On 02 Mar 2017, at 17:36, User2 =
<user2@apache.org> wrote:
>=20
> Hi,=20
> Test.
>=20


--Apple-Mail=_D2911C08-3A5E-42E0-8425-66C5B77B4CFB
Content-Type: multipart/mixed;
	boundary="Apple-Mail=_B0F07404-D743-4428-AC87-850B66EAB0FF"


--Apple-Mail=_B0F07404-D743-4428-AC87-850B66EAB0FF
Content-Transfer-Encoding: 7bit
Content-Type: text/html;
	charset=windows-1252

<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""></body></html>
--Apple-Mail=_B0F07404-D743-4428-AC87-850B66EAB0FF
Content-Disposition: attachment;
	filename*0="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
	filename*1="MNOPQRSTUVW.rtf"
Content-Type: text/rtf;
	name="ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZA"

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentAndBlankCid.eml
=====================================================
Return-Path: <sender@gmail.com>
MIME-Version: 1.0
Delivered-To: test@localhost
Received: from localhost
X-Virus-Scanned: Debian
X-Spam-Flag: NO
X-Spam-Score: -1.78
X-Spam-Level:
X-Spam-Status: No, score=-1.78 tagged_above=-99 required=2
	tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, FREEMAIL_FROM=0.001,
	RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_DKIM_INVALID=0.01,
	T_FREEMAIL_DOC_PDF=0.01] autolearn=no
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:mime-version:subject:message-id:date:cc:to;
        bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=;
        b=tw7ave7egTqm3ZcXDe0NeuPSli3nkOBuqjOWLaK0MivSzO8FTQEWzCMEAlyhG4PMcP
         jkxmhKAAjNPshiFnAYzPB4LNQV6GKPNUQ5igA9HDzh4dfbdT/6GiTEvUyWKZ6VpGVASR
         x9Ioyiwxrdf4phsMYSHT7/Y+94/SvmAQj5gZZXfQ8JvmIAlxN9F4mvMnk2JQM4wcGv8Z
         15zNoTxcUPODEybnawotJUewQu2sCKL7S46vFfKiuYEiKPC/XhGPFsjvwBAvcMBfRgbm
         jJSAPk0TlXERVjhd3CSCHC1ukQ1nICb3yTZacuOK0gUgJ7rKY25zQoq2QvYgX97SuThz
         BpHw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:mime-version:subject:message-id:date:cc:to;
        bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=;
        b=VmTt7K8LRHq/MdOYtIhRnA/Lkbx41VnZh6+SYior8s5kLaKgrJWi+N/ql7SU6lCR2m
         JFTyvIfUqsNFiHy0wPMlI4RauXHNVQWe9C+UQ5hc5BT+Z67O/5dxe+KDhtchRqh7JWC5
         aWDjuvROFqhEEqphuEtGLqEqnHPbmweMZBIouasP2Z0TiHTSASSJq60HUcwf7UcVbmbw
         m5O35XykCkecEX+H9fGAqgzlvFvtfy4PDENWfz8Yhzv730FsAmDutRjww0HYriyLwgpN
         OjrT1o6p6DrWs5JlcgRh7F5qauiR/WTq+srbWbe/tLD7Lx8WRKyeXuzjKyTKJ5TjV6c5
         AHKA==
X-Gm-Message-State: AFeK/H1blcvejtSjL0KgKvb81Bc5uVOYQpq8wm/HouMZgtBr1kw+d9+VOes+FQrObRJdbQ==
X-Received: by 10.28.133.84 with SMTP id h81mr8649035wmd.23.1489999897292;
        Mon, 20 Mar 2017 01:51:37 -0700 (PDT)
From: <from@localhost>
Content-Type: multipart/mixed;
 boundary="Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4"
Subject: mail with attachment from apple mail
Message-Id: <153836C4-4563-400A-ACBF-E2E2ED0FBB49@gmail.com>
Date: Mon, 20 Mar 2017 09:51:28 +0100
To: <to@localhost>
X-Mailer: Apple Mail (2.3259)


--Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/windows1252charset.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Mon, 03 Apr 2017 12:36:55 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.145] (LFbn-1-9855-213.w86-202.abo.wanadoo.fr [86.202.211.213])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 5CD7B76B
	for <aduprat@linagora.com>; Mon,  3 Apr 2017 12:36:55 +0200 (CEST)
To: Antoine DUPRAT <aduprat@linagora.com>
From: aduprat <aduprat@linagora.com>
Subject: =?UTF-8?B?w6Agw6kgw6g=?=
Message-ID: <3325d853-c33c-bc4a-4435-cd704f6a341c@linagora.com>
Date: Mon, 3 Apr 2017 12:36:55 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.8.0
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------4609A4E8FA0583CE89472864"

This is a multi-part message in MIME format.
--------------4609A4E8FA0583CE89472864
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: 8bit

????

????

????

--------------4609A4E8FA0583CE89472864
Content-Type: text/html; charset=windows-1252
Content-Transfer-Encoding: 8bit

<html>
  <p>????</p>
  <p>????</p>
  <p>????</p>
</html>

--------------4609A4E8FA0583CE89472864--

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/embeddedMultipartWithInlineTextAttachment.eml
=====================================================
Date: Tue, 03 Jan 2017 16:05:01 +0100
From: sender <sender@james.org>
MIME-Version: 1.0
To: David DOLCIMASCOLO <david.ddo@linagora.com>
Subject: Re: [Internet] Rendez-vous
References: <9b6a4271-69fb-217a-5c14-c68c68375d96@linagora.com>
In-Reply-To: <d5c6f1d6-96e7-8172-9fe6-41fa6c9bd6ec@linagora.com>
X-Gie-Attachments: none
Cc: 
Content-type: multipart/mixed; boundary="----------=_1483455916-7086-3"

This is a multi-part message in MIME format...

------------=_1483455916-7086-3
Content-Type: multipart/alternative; boundary="------------060506070600060108040700"

This is a multi-part message in MIME format.
--------------060506070600060108040700
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

/blabla/
*bloblo*

--------------060506070600060108040700
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<i>blabla</i>
<b>bloblo</b>

--------------060506070600060108040700--

------------=_1483455916-7086-3
Content-ID: <14672787885774e5c4d4cee471352039@linagora.com>
Content-Type: text/plain; charset="iso-8859-1"; name="avertissement.txt"
Content-Disposition: inline; filename="avertissement.txt"
Content-Transfer-Encoding: binary

inline attachment

------------=_1483455916-7086-3--

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithRecipients.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Date: Fri, 17 Sep 2010 17:12:26 +0200
Subject: my subject
To: to <to@james.org>
Cc: cc@james.org
Bcc: bcc@james.org
MIME-Version: 1.0
Message-Id: <20100917151246.2A9384BA1@lenny>
From: From <from@james.org>

Mail content

-- 
Ad Min

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/noTextBodyButHtmlBody.eml
=====================================================
Return-Path: <returnPath>
Received: from localhost (localhost [127.0.0.1])
    by localhost (Postfix) with ESMTP id 27358B3A09;
    Tue, 11 Oct 2016 11:59:12 +0200 (CEST)
X-Sieve: CMU Sieve 2.2
Date: Tue, 14 Mar 2017 16:47:05 +0100 (CET)
From: "Test User (JIRA)" <test@localhost>
To: you@localhost
Message-ID: <JIRA.18278.1489506415000.375139.1489506425447@Atlassian.JIRA>
In-Reply-To: <JIRA.18278.1489506415000@Atlassian.JIRA>
References: <JIRA.18278.1489506415000@Atlassian.JIRA> <JIRA.18278.1489506415104@localhost>
Subject: [JIRA] (CHAT-338) Update + icon
MIME-Version: 1.0
Content-Type: multipart/related;
	boundary="----=_Part_370449_1340169331.1489506420401"
X-JIRA-FingerPrint: 2cc56fe0b6c36a47776991d4aa5e9674
Auto-Submitted: auto-generated
Precedence: bulk

------=_Part_370449_1340169331.1489506420401
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<a>The Test User</a> <strong>created</strong> an issue
------=_Part_370449_1340169331.1489506420401
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline
Content-ID: <jira-generated-image-static-major-2aab6bf2-4155-47c6-9c0b-b0ec1fdeaf9a>

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAMFBMVEX////QRDfQRDfQRDfQRDfQ
RDcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACFHZsIAAAABXRSTlMAEZnM3Uchgx8AAAAb
dEVYdGppcmEtc3lzdGVtLWltYWdlLXR5cGUAaWNvbroqOUUAAABESURBVHjaY2BAAsKGQIKJgYFR
SUkAzBBSYFIEMRiVHvwDCjExMMk9+PdIgYGF4f+9D//v8YJ1sQZAdEEACuP/BwYSAQCDPg0vvqNM
LwAAAABJRU5ErkJggu2YDBYHBhIBAEDzBgwy4Sb4AAAAAElFTkSuQmCC
------=_Part_370449_1340169331.1489506420401
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline
Content-ID: <jira-generated-image-static-comment-icon-d374d5f6-0597-421c-a4ef-50f59dbc5d33>

iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAADAFBMVEX///+1tbWzs7OysrKrq6um
pqalpaWdnZ2ZmZn///+VlZWPj4/7+/vu7u7p6enn5+fl5eXk5OTh4eHW1tbT09PMzMzJycm6urq5
ubm1tbWzs7OysrKrq6upqamlpaWKioqFhYWRkZGKioqHh4eDg4OAgIB/f398fHx6enp4eHh2dnZ0
dHRycnJwcHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
gg==
------=_Part_370449_1340169331.1489506420401
Content-Type: image/png
Content-Transfer-Encoding: base64
Content-Disposition: inline

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImageWithoutContentDisposition.eml
=====================================================
Return-Path: <test@linagora.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="=_78be9b39405e216b14ea426a30eef65c"
Date: Thu, 30 Jun 2016 11:26:28 +0200
From: Test <test@linagora.com>
To: test <test@linagora.com>
Subject: Mail with inlined image
Message-ID: <e544b5c4bb46598380ce57c7dd1f5340@linagora.com>
X-Sender: test@linagora.com
User-Agent: Roundcube Webmail/1.1.4

--=_78be9b39405e216b14ea426a30eef65c
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII

Inlined image: 

Signature. 
--=_78be9b39405e216b14ea426a30eef65c
Content-Type: multipart/related;
 boundary="=_09507e56cd9618e600636c7ef4ea9f8f"

--=_09507e56cd9618e600636c7ef4ea9f8f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
eva,sans-serif'>
<p>Inlined image:</p>
<p><img src=3D"cid:14672787885774e5c4d4cee471352039@linagora.com" alt=3D"" =
width=3D"32" height=3D"32" /></p>
<p>Signature.</p>
</body></html>

--=_09507e56cd9618e600636c7ef4ea9f8f
Content-Transfer-Encoding: base64
Content-ID: <14672787885774e5c4d4cee471352039@linagora.com>
Content-Type: image/png;
 name=vlc.png

iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAFrUlEQVRYw8WWW2wc1RnHf+fMZS+z
O7veXXZtr+M4Bl+IHNwrSau0ahEkNIloeCgttKoaJFT1oZUqRUJqEaqqPoAoSLRqK4FaISFUIVQQ
IMETCBmqBpSGm9OIOKbEju11vNfZnZ29zUwfxiGUkta17PZIZ85I55zv+8///11G+L7P/3Oom704
c2ff8R169ftCF2LBijz65cfs+zdjR2yGgSe+O5KciizOT2S9lBaF2bPCOtXIjB576mLpv7UlN/X5
DWt/POKlXBd6LiQivql1e1/ajKlNAYhJ55AhgRaILpgaxGjd/D+R4JcPPahPpDgzHZ0bDbUdhGhi
qzn+vJT425LfN3338eO9bQ3C/PDoFz0zPeLuOcaq0yYeCbFSrDI4XL529dRf9wBvbqsEyyuF/SP5
q6RdK2HqPrZVJmMoVCtlkR/I3bHtMTA+dvVttuMQixlYdZuYEaVWbzCcH6Swunb9tgJ4/Mmnd5fr
zlgmlabesDHjBg27SdKMU7HqjI2P773v4d8NbxsA56WH9l17lRa2bJuYmaTaBsNMU3Vcspk01tzJ

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachments.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Fri, 27 Feb 2015 20:32:14 +0100
X-Sieve: CMU Sieve 2.2
Received: from canondir.par.lng (unknown [92.103.166.6])
	(using TLSv1 with cipher AES256-SHA (256/256 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id BAB0D728
	for <to@linagora.com>; Fri, 27 Feb 2015 20:31:38 +0100 (CET)
X-Priority: 3 (Normal)
From: "From"
 <from@linagora.com>
To: "To"
 <to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

<b>html tiramisu</b>

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/multipartRelated.eml
=====================================================
Return-Path: <linshare-noreply@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
     by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
     Mon, 22 Aug 2016 14:06:47 +0200
X-Sieve: CMU Sieve 2.2
Received: from linshare1.linagora.dc1 (linshare1.linagora.dc1 [172.16.18.60])
    by alderaan.linagora.com (Postfix) with ESMTP id 36470776
    for <ddolcimascolo@linagora.com>; Mon, 22 Aug 2016 14:06:47 +0200 (CEST)
Date: Mon, 22 Aug 2016 14:06:47 +0200 (CEST)
From: LinShare <linshare-noreply@linagora.com>
Reply-To: abenchi@linagora.com
To: ddolcimascolo@linagora.com
Message-ID: <2020561626.8931471867607210.JavaMail.tomcat7@linshare1>
Subject: A user Abdulkader BENCHI has just made a file available to you!
MIME-Version: 1.0
Content-Type: multipart/alternative; 
    boundary="----=_Part_1786_771314706.1471867607209"

------=_Part_1786_771314706.1471867607209
Content-Type: multipart/related; 
    boundary="----=_Part_1787_1274970450.1471867607209"

------=_Part_1787_1274970450.1471867607209
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<html>multipart/related content</html>

------=_Part_1787_1274970450.1471867607209
Content-Type: image/png; name=gimp.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=gimp.png
Content-ID: <image.part.1@linshare.org>

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=
------=_Part_1787_1274970450.1471867607209--

------=_Part_1786_771314706.1471867607209--

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneInlinedImage.eml
=====================================================
Return-Path: <test@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Thu, 30 Jun 2016 11:26:28 +0200
X-Sieve: CMU Sieve 2.2
Received: from extranet.linagora.com (ldap.linagora.com [172.16.18.50])
	by alderaan.linagora.com (Postfix) with ESMTP id D9D01743
	for <test@linagora.com>; Thu, 30 Jun 2016 11:26:28 +0200 (CEST)
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="=_78be9b39405e216b14ea426a30eef65c"
Date: Thu, 30 Jun 2016 11:26:28 +0200
From: Test <test@linagora.com>
To: test <test@linagora.com>
Subject: Mail with inlined image
Message-ID: <e544b5c4bb46598380ce57c7dd1f5340@linagora.com>
X-Sender: test@linagora.com
User-Agent: Roundcube Webmail/1.1.4

--=_78be9b39405e216b14ea426a30eef65c
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII

Inlined image: 

Signature. 
--=_78be9b39405e216b14ea426a30eef65c
Content-Type: multipart/related;
 boundary="=_09507e56cd9618e600636c7ef4ea9f8f"

--=_09507e56cd9618e600636c7ef4ea9f8f
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
eva,sans-serif'>
<p>Inlined image:</p>
<p><img src=3D"cid:14672787885774e5c4d4cee471352039@linagora.com" alt=3D"" =
width=3D"32" height=3D"32" /></p>
<p>Signature.</p>
</body></html>

--=_09507e56cd9618e600636c7ef4ea9f8f
Content-Transfer-Encoding: base64
Content-ID: <14672787885774e5c4d4cee471352039@linagora.com>
Content-Type: image/png;
 name=vlc.png
Content-Disposition: inline;
 filename=vlc.png;

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/sameInlinedImages.eml
=====================================================
Return-Path: <test@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Thu, 29 Dec 2016 04:19:28 +0100
X-Sieve: CMU Sieve 2.2
Received: from extranet.linagora.com (ldap.linagora.com [172.16.18.50])
	by alderaan.linagora.com (Postfix) with ESMTP id F33174499
	for <test@linagora.com>; Thu, 29 Dec 2016 04:19:27 +0100 (CET)
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="=_c0feb3c9f3d562fc7adebe39b63a7f62"
Date: Thu, 29 Dec 2016 04:19:27 +0100
From: Test <test@linagora.com>
To: test <test@linagora.com>
Subject: Send many inlined images
Message-ID: <ba8178c9417b36c627a7c6de9d1470e8@linagora.com>
X-Sender: test@linagora.com
User-Agent: Roundcube Webmail/1.1.4

--=_c0feb3c9f3d562fc7adebe39b63a7f62
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset=US-ASCII

Add more images 

  
--=_c0feb3c9f3d562fc7adebe39b63a7f62
Content-Type: multipart/related;
 boundary="=_ebeed74b39dc10b43908b65b893b4ea4"

--=_ebeed74b39dc10b43908b65b893b4ea4
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
eva,sans-serif'>
<p>Add more images <img src=3D"cid:1482981567586480bfca67b793175279@linagor=
a.com" alt=3D"" width=3D"163" height=3D"71" /><img src=3D"cid:1482981567586=
480bfca67b793175279@linagora.com" alt=3D"" width=3D"163" height=3D"71" /><i=
mg src=3D"cid:1482981567586480bfca67b793175279@linagora.com" alt=3D"" width=
=3D"163" height=3D"71" /></p>
<div>&nbsp;</div>
</body></html>

--=_ebeed74b39dc10b43908b65b893b4ea4
Content-Transfer-Encoding: base64
Content-ID: <1482981567586480bfca67b793175279@linagora.com>
Content-Type: image/png;
 name="g3619(1).png"

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentID.eml
=====================================================
Return-Path: <user@localhost.com>
Received: from localhost
X-Sieve: CMU Sieve 2.4
X-Virus-Scanned: Debian amavisd-new at localhost.com
X-Spam-Flag: NO
X-Spam-Score: -1.289
X-Spam-Level:
Content-Type: multipart/mixed; boundary=Apple-Mail-E1D6D861-D1AD-47F9-A403-F2AA32CC52CC
Content-Transfer-Encoding: 7bit
From: Sender <from@localhost.com>
Mime-Version: 1.0 (1.0)
Date: Mon, 11 Dec 2017 22:06:42 +0100
Subject: Inlined Photos
Message-Id: <sendId@localhost.com>
X-Mailer: iPhone Mail (14G60)


--Apple-Mail-E1D6D861-D1AD-47F9-A403-F2AA32CC52CC
Content-Type: text/plain;
	charset=us-ascii
Content-Transfer-Encoding: 7bit




--Apple-Mail-E1D6D861-D1AD-47F9-A403-F2AA32CC52CC
Content-Type: image/jpeg;
	name=IMG_6112.JPG;
	x-apple-part-url=B11616AF-86EB-47AF-863A-176A823498DB
Content-Disposition: inline;
	filename=IMG_6112.JPG
Content-Transfer-Encoding: base64

/9j/4QZIRXhpZgAATU0AKgAAAAgACgEPAAIAAAAGAAAAhgEQAAIAAAAJAAAAjAESAAMAAAABAAYA
AAEaAAUAAAABAAAAlgEbAAUAAAABAAAAngEoAAMAAAABAAIAAAExAAIAAAAHAAAApgEyAAIAAAAU
AAAArgITAAMAAAABAAEAAIdpAAQAAAABAAAAwgAAAABBcHBsZQBpUGhvbmUgNgAAAAAASAAAAAEA
AABIAAAAATEwLjMuMwAAMjAxNzoxMjoxMSAxODowNjoyMAAAIIKaAAUAAAABAAACSIKdAAUAAAAB
AAACUIgiAAMAAAABAAIAAIgnAAMAAAABAPoAAJAAAAcAAAAEMDIyMZADAAIAAAAUAAACWJAEAAIA
AAAUAAACbJEBAAcAAAAEAQIDAJIBAAoAAAABAAACgJICAAUAAAABAAACiJIDAAoAAAABAAACkJIE
AAoAAAABAAACmJIHAAMAAAABAAUAAJIJAAMAAAABABgAAJIKAAUAAAABAAACoJIUAAMAAAAEAAAC
qJJ8AAcAAANGAAACsJKRAAIAAAAEOTExAJKSAAIAAAAEOTExAKAAAAcAAAAEMDEwMKABAAMAAAAB
AAEAAKACAAQAAAABAAAMwKADAAQAAAABAAAJkKIXAAMAAAABAAIAAKMBAAcAAAABAQAAAKQCAAMA
AAABAAAAAKQDAAMAAAABAAAAAKQFAAMAAAABAB0AAKQGAAMAAAABAAAAAKQyAAUAAAAEAAAF9qQz
AAIAAAAGAAAGFqQ0AAIAAAAiAAAGHAAAAAAAAAABAAAAIQAAAAsAAAAFMjAxNzoxMjoxMSAxODow
NjoyMAAyMDE3OjEyOjExIDE4OjA2OjIwAAAAAP0AAAAyAAAe1AAADY0AABEhAAAItAAAAAAAAAAB
AAAAUwAAABQGXwTHBwMENUFwcGxlIGlPUwAAAU1NAAsAAQAJAAAAAQAAAAUAAgAHAAACLgAAAJgA
AwAHAAAAaAAAAsYABAAJAAAAAQAAAAEABQAJAAAAAQAAAO8ABgAJAAAAAQAAAQIABwAJAAAAAQAA
AAEACAAKAAAAAwAAAy4ACQAJAAAAAQAAARMADgAJAAAAAQAAAAAAFAAJAAAAAQAAAAQAAAAAYnBs
aXN0MDBPEQIAXABhAG8AHwFaAUUBOAEfAQUB/gCJAZUBnQGxAcEByAFgAJUAVgFcATEBKAE/AVgB
dwFtAXsBqgGsAbABtAG8AXwAUwEdAe0A5gCyAIAAbACQAOwAdwGuAcUBrQGlAbMBFwE5ARwB6gCf

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/htmlAndTextMultipartWithOneAttachment.eml
=====================================================
Return-Path: <user0@open-paas.org>
MIME-Version: 1.0
Delivered-To: user0@open-paas.org
Received: from 172.18.0.1 (EHLO [172.18.0.1]) ([172.18.0.1])
          by open-paas.org (JAMES SMTP Server ) with ESMTP ID -674616268
          for <user0@open-paas.org>;
          Tue, 07 Jun 2016 14:23:37 +0000 (UTC)
To: user0@open-paas.org
From: user0 <user0@open-paas.org>
Subject: BOTH
Message-ID: <1cc7f114-dbc4-42c2-99bd-f1100db6d0c1@open-paas.org>
Date: Tue, 7 Jun 2016 16:23:37 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.1.1
Content-Type: multipart/mixed;
 boundary="------------7AF1D14DE1DFA16229726B54"

This is a multi-part message in MIME format.
--------------7AF1D14DE1DFA16229726B54
Content-Type: multipart/alternative;
 boundary="------------172F9470CFA3BF3417835D92"


--------------172F9470CFA3BF3417835D92
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

/blabla/
*bloblo*

--------------172F9470CFA3BF3417835D92
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<i>blabla</i>
<b>bloblo</b>

--------------172F9470CFA3BF3417835D92--

--------------7AF1D14DE1DFA16229726B54
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/longLine.eml
=====================================================
01234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/textInMainMultipartHtmlInInnerMultipart.eml
=====================================================
To: David DOLCIMASCOLO <david.ddo@linagora.com>
From: David DOLCIMASCOLO <david.ddo@linagora.com>
Subject: Inline twice
Message-ID: <03947d9b-4188-4d3a-b072-475278063036@linagora.com>
Date: Tue, 3 Jan 2017 17:59:01 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
Content-Type: multipart/alternative;
 boundary="------------41916E9CB699BB85B7A39ABF"

This is a multi-part message in MIME format.
--------------41916E9CB699BB85B7A39ABF
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

/blabla/
*bloblo*

--------------41916E9CB699BB85B7A39ABF
Content-Type: multipart/related;
 boundary="------------7562AB559B6C67B3BE780AA2"


--------------7562AB559B6C67B3BE780AA2
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<i>blabla</i>
<b>bloblo</b>

--------------7562AB559B6C67B3BE780AA2
Content-Type: image/png;
 name="=?UTF-8?Q?S=c3=a9lection=5f014.png?="
Content-Transfer-Encoding: base64
Content-ID: <part1.C774CD18.95513753@linagora.com>
Content-Disposition: inline;
 filename*=utf-8''%53%C3%A9%6C%65%63%74%69%6F%6E%5F%30%31%34%2E%70%6E%67

iVBORw0KGgoAAAANSUhEUgAAAUcAAAJCCAIAAADcDpISAAAAA3NCSVQICAjb4U/gAAAAEHRF
ASEB8/ejg6KNLS31fZ+u8hQAPj/AXiuIAuF4TyOAAAAAElFTkSuQmCC
--------------7562AB559B6C67B3BE780AA2--

--------------41916E9CB699BB85B7A39ABF--

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/twoAttachmentsTextPlain.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Fri, 27 Feb 2015 20:32:14 +0100
X-Sieve: CMU Sieve 2.2
Received: from canondir.par.lng (unknown [92.103.166.6])
	(using TLSv1 with cipher AES256-SHA (256/256 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id BAB0D728
	for <to@linagora.com>; Fri, 27 Feb 2015 20:31:38 +0100 (CET)
X-Priority: 3 (Normal)
From: "From"
 <from@linagora.com>
To: "To"
 <to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

html

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part1.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type:

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedWithoutContentDisposition.eml
=====================================================
FCC: imap://user@localhost.com/Sent
X-Identity-Key: id6
X-Account-Key: account7
Subject: Re: Excuse pour vendredi dernier
To: To User <to@localhost.com>
From: From User <from@localhost.com>
X-Enigmail-Draft-Status: N1110
Message-ID: <55AE39CD.8050802>
Date: Tue, 21 Jul 2015 14:23:41 +0200
X-Mozilla-Draft-Info: internal/draft; vcard=0; receipt=0; DSN=0; uuencode=0;
 attachmentreminder=0
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
 Thunderbird/38.1.0
MIME-Version: 1.0
In-Reply-To: <dcc6e01637bbd527c411f34de96e6326>
Content-Type: multipart/encrypted;
 protocol="application/pgp-encrypted";
 boundary="09AtNRN8t1bkTL9UtJde8HAiXSJ7dIX0X"

This is an OpenPGP/MIME encrypted message (RFC 4880 and 3156)
--09AtNRN8t1bkTL9UtJde8HAiXSJ7dIX0X
Content-Type: application/pgp-encrypted
Content-Description: PGP/MIME version identification

Version: 1

--09AtNRN8t1bkTL9UtJde8HAiXSJ7dIX0X
Content-Type: application/octet-stream; name="encrypted.asc"
Content-Description: OpenPGP encrypted message
Content-Disposition: inline; filename="encrypted.asc"

-----BEGIN PGP MESSAGE-----
Version: GnuPG v2

hQEMA047f/J68U5CAQf/XXJE8zpJa23r5HqXHRlWHIEQIYGebfzpa1KRy5nx6EB8
Ku8K0UBIpIK9bxuYV1529jAWfx3iK7M5ekMrAobjbbE0ANB3MfEJX+SAl2m/pNY6
RM7RoyVkYjzyaKXFshxRIxTIDXxq/YqeIre2yFSSnUYkM9k8mJZkt+f9KAm1CZ28
YF7oE/+8JmsLBEkNnblb+3c8UiqQLGOywnIVlcv017+e175bq739fJaZgcugHKK5
l4U7TIFXGHrR5OQO/ec52PZuVAGn4tFEza7ddVd4kdpW37d9DBgLEmUh1aZls0wY
F6MzvsyUqvw9S1V/B6h8pIvDsfwQL04bGaaXnm5/9dLqAU8P4g8jVlgSdDPEvH7/
WB1lZABZXgEUEE29/NXQNHYka2Ael4tK6dfDxikrHrsTK5NJUCptXLkaBKnd8+l9
nKhkUoaJTpXFxuKRYNVDHhJLKGD8klLEsM8AKwk4wEDjJ2SqtdmEGgpGLq1Tje9d
Ckb9W5NNaZJ0g5lyxtH3YbFNGs9YTP5D8WQ7k8TUxYrvgHiXRROKQwUDAVHIkLnm
8AJcBwmFFbWSfok5JL1p91jSaYCe7vbqFsggbFO6/uRtSP+U80ZIsbtg+8jhY8x/
2LAOD/UQopJV3ulIyWDeRmYjP4tiP2JJRuXoG9mYmnMnpBNulEqk0PCgoh9WTw+w
dPQEHm9DnENCD5r4oBgHXizS14NlL4JbikQjpRhZSB+AZsT7Z2MczDWZ36T8k3cb
o2ec7HjL4PNaNSpcHTXuuFoCtaKBw0C3oZVJIbSkjHKv80SD8B2+kZ3+uZSWqy6Q
2t36KJuFwQFqvKeaw69XWjVrPEpkgR8YA7CVjUibYi5q4C81RF5wNIUMzjNO7BNu
pMYI0w0Gvbmv7O/ekeuaRsClFJTMLxNKaTj1W/Ujeetnww6Ak0xbFSJHRVaR0m4y
8m7vixRsC2RHI4XHddIdn7nkGE8Y28gRsUj3iH8fzJY1hD87DV1+pNjl3uVUWRm6

=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/calendar.eml
=====================================================
Return-Path: <local@localhost.com>
MIME-Version: 1.0
Delivered-To: to@localhost.com
From: User From <fromUser@localhost.com>
Message-ID: <2d0fa16c-4c37-58de-1acc-50b5f6a23a60@localhost.com>
To: User To <toUser@linagora.com>
Date: Wed, 26 Jul 2017 10:34:02 +0200
Subject: Any subject
Content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT

BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20170726T081145Z
LAST-MODIFIED:20170726T083402Z
DTSTAMP:20170726T083402Z
UID:f1514f44bf39311568d6407249cb76c48103fcd1fb398c3c501cb72b2d293f36e04
 b2aab16e43439a608f28671ab7c10e754cbc85ddee4a07fa8cf8f4f7af05bfb502b8f6

SUMMARY:[A CONFIRMER] Call OVH
PRIORITY:5
ORGANIZER;CN=User;X-OBM-ID=id:mailto:userTo@localhost.com
ATTENDEE;CN=User;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
 mailto:user1To@linagora.com
DTSTART:20170727T130000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:2
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
 oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:uuid_value
LOCATION:01.78.14.42.61 / 1586
X-OBM-ALERT;X-OBM-ID=486:600
END:VEVENT
END:VCALENDAR


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/inlinedMultipart.eml
=====================================================
Return-Path: <returnPath>
Received: from localhost (localhost [127.0.0.1])
	by localhost (Postfix) with ESMTP id 27358B3A09;
	Tue, 11 Oct 2016 11:59:12 +0200 (CEST)
Date: Tue, 11 Oct 2016 02:59:07 -0700
From: you@apache.org
To: me@apache.org
Message-ID: messageId
Subject: Confirm your email address
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_5211_53602129.1476179947600"
Content-Disposition: inline

------=_Part_5211_53602129.1476179947600
Content-Type: multipart/alternative; 
	boundary="----=_Part_5210_1271316664.1476179947600"

------=_Part_5210_1271316664.1476179947600
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

Hello text body

------=_Part_5210_1271316664.1476179947600
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

<html>Hello html body</html>

------=_Part_5210_1271316664.1476179947600--

------=_Part_5211_53602129.1476179947600--


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/mailWithInlinedAttachmentButNoCid.eml
=====================================================
Return-Path: <sender@gmail.com>
MIME-Version: 1.0
Delivered-To: test@localhost
Received: from localhost
X-Virus-Scanned: Debian
X-Spam-Flag: NO
X-Spam-Score: -1.78
X-Spam-Level:
X-Spam-Status: No, score=-1.78 tagged_above=-99 required=2
	tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, FREEMAIL_FROM=0.001,
	RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_DKIM_INVALID=0.01,
	T_FREEMAIL_DOC_PDF=0.01] autolearn=no
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=gmail.com; s=20161025;
        h=from:mime-version:subject:message-id:date:cc:to;
        bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=;
        b=tw7ave7egTqm3ZcXDe0NeuPSli3nkOBuqjOWLaK0MivSzO8FTQEWzCMEAlyhG4PMcP
         jkxmhKAAjNPshiFnAYzPB4LNQV6GKPNUQ5igA9HDzh4dfbdT/6GiTEvUyWKZ6VpGVASR
         x9Ioyiwxrdf4phsMYSHT7/Y+94/SvmAQj5gZZXfQ8JvmIAlxN9F4mvMnk2JQM4wcGv8Z
         15zNoTxcUPODEybnawotJUewQu2sCKL7S46vFfKiuYEiKPC/XhGPFsjvwBAvcMBfRgbm
         jJSAPk0TlXERVjhd3CSCHC1ukQ1nICb3yTZacuOK0gUgJ7rKY25zQoq2QvYgX97SuThz
         BpHw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
        d=1e100.net; s=20161025;
        h=x-gm-message-state:from:mime-version:subject:message-id:date:cc:to;
        bh=lgK1xUjmh9FzAPFKLN2lvhSSlfI6ujj8K57kqImKrA8=;
        b=VmTt7K8LRHq/MdOYtIhRnA/Lkbx41VnZh6+SYior8s5kLaKgrJWi+N/ql7SU6lCR2m
         JFTyvIfUqsNFiHy0wPMlI4RauXHNVQWe9C+UQ5hc5BT+Z67O/5dxe+KDhtchRqh7JWC5
         aWDjuvROFqhEEqphuEtGLqEqnHPbmweMZBIouasP2Z0TiHTSASSJq60HUcwf7UcVbmbw
         m5O35XykCkecEX+H9fGAqgzlvFvtfy4PDENWfz8Yhzv730FsAmDutRjww0HYriyLwgpN
         OjrT1o6p6DrWs5JlcgRh7F5qauiR/WTq+srbWbe/tLD7Lx8WRKyeXuzjKyTKJ5TjV6c5
         AHKA==
X-Gm-Message-State: AFeK/H1blcvejtSjL0KgKvb81Bc5uVOYQpq8wm/HouMZgtBr1kw+d9+VOes+FQrObRJdbQ==
X-Received: by 10.28.133.84 with SMTP id h81mr8649035wmd.23.1489999897292;
        Mon, 20 Mar 2017 01:51:37 -0700 (PDT)
From: <from@localhost>
Content-Type: multipart/mixed;
 boundary="Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4"
Subject: mail with attachment from apple mail
Message-Id: <153836C4-4563-400A-ACBF-E2E2ED0FBB49@gmail.com>
Date: Mon, 20 Mar 2017 09:51:28 +0100
To: <to@localhost>
X-Mailer: Apple Mail (2.3259)


--Apple-Mail=_DF3869A6-784C-445C-8AA0-EBEFE28034A4
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/eml/oneAttachment-part2.eml
=====================================================

Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: server/protocols/jmap-draft-integration-testing/jmap-draft-integration-testing-common/src/test/resources/attachment/nonIndexableAttachment.html
=====================================================
<!DOCTYPE html>
<html class="mozilla" lang="en"><head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    





<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<meta name="application-name" content="JIRA" data-name="jira" data-version="6.4.5"><meta name="ajs-serverRenderedViewIssue" content="true">
<meta name="ajs-hasCriteriaAutoUpdate" content="true">
<meta name="ajs-viewissue-use-history-api" content="false">
<meta name="ajs-viewissue-max-cache-size" content="">
<meta name="ajs-autocomplete-enabled" content="true">
<meta name="ajs-view-issue-trace-key" content="jira.issue.refreshed">
<meta name="ajs-view-issue-psycho-key" content="jira.psycho.issue.refreshed">
<meta name="ajs-view-issue-refreshed-cached-key" content="jira.psycho.issue.refreshed.cached">
<meta name="ajs-return-to-search-trace-key" content="jira.returned.to.search">
<meta name="ajs-return-to-search-psycho-key" content="jira.psycho.returned.to.search">
<meta name="ajs-default-avatar-url" content="https://ci.open-paas.org/jira/secure/useravatar?size=xsmall&amp;avatarId=10123">
<meta name="ajs-jira.issues.preferred.layout.key" content="split-view">
<meta name="ajs-max-recent-searchers" content="10">
<meta name="ajs-jira-base-url" content="https://ci.open-paas.org/jira">
<meta name="ajs-dev-mode" content="false">
<meta name="ajs-context-path" content="/jira">
<meta name="ajs-version-number" content="6.4.5">
<meta name="ajs-build-number" content="64020">
<meta name="ajs-is-beta" content="false">
<meta name="ajs-is-rc" content="false">
<meta name="ajs-is-snapshot" content="false">
<meta name="ajs-is-milestone" content="false">
<meta name="ajs-remote-user" content="scolson">
<meta name="ajs-remote-user-fullname" content="Stephane COLSON">
<meta name="ajs-user-locale" content="en_US">
<meta name="ajs-user-locale-group-separator" content=",">
<meta name="ajs-app-title" content="OpenPaas-Linagora">
<meta name="ajs-keyboard-shortcuts-enabled" content="true">
<meta name="ajs-keyboard-accesskey-modifier" content="Alt+Shift">
<meta name="ajs-enabled-dark-features" content="[&quot;com.atlassian.jira.projects.issuenavigator&quot;,&quot;com.atlassian.jira.projects.ProjectCentricNavigation.Switch&quot;,&quot;jira.plugin.devstatus.phasetwo.enabled&quot;,&quot;com.atlassian.jira.config.PDL&quot;,&quot;jira.frother.reporter.field&quot;,&quot;jira.plugin.devstatus.phasetwo&quot;,&quot;com.atlassian.jira.darkfeature.CommonHeader&quot;,&quot;app-switcher.new&quot;,&quot;frother.assignee.field&quot;,&quot;jira.issue.status.lozenge&quot;]">
<meta name="ajs-date-relativize" content="true">
<meta name="ajs-date-time" content="h:mm a">
<meta name="ajs-date-day" content="EEEE h:mm a">
<meta name="ajs-date-dmy" content="dd/MMM/yy">
<meta name="ajs-date-complete" content="dd/MMM/yy h:mm a">
<meta name="ajs-in-admin-mode" content="false">
<meta name="ajs-is-sysadmin" content="true">
<meta name="ajs-is-admin" content="true">
<meta name="ajs-outgoing-mail-enabled" content="true">

=====================================================
== File: server/protocols/jmap-draft-integration-testing/rabbitmq-jmap-draft-integration-testing/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.james</groupId>
        <artifactId>jmap-draft-integration-testing</artifactId>
        <version>3.9.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>rabbitmq-jmap-draft-integration-testing</artifactId>
    <packaging>jar</packaging>

    <name>Apache James :: Server :: JMAP (draft) :: RabbitMQ + Object Store + Cassandra Integration testing</name>

    <dependencies>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-backends-cassandra</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-backends-opensearch</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-backends-rabbitmq</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-api</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>apache-james-mailbox-scanning-search</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>blob-s3</artifactId>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLSDefaultAuth.xml
=====================================================
<testserver enabled="true">
    <tls socketTLS="true" startTLS="false">
        <keystore>file://conf/keystore</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>

        <clientAuth/>
    </tls>
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerDisabled.xml
=====================================================
<testserver enabled="false">
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerStartTLS.xml
=====================================================
<testserver enabled="true">
    <tls socketTLS="false" startTLS="true">
        <keystore>file://conf/keystore</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLSNeedAuth.xml
=====================================================
<testserver enabled="true">
    <tls socketTLS="true" startTLS="false">
        <keystore>file://conf/keystore</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>

        <clientAuth>
            <truststore>file://conf/truststore</truststore>
            <truststoreType>JKS</truststoreType>
            <truststoreSecret>james72laBalle</truststoreSecret>
        </clientAuth>
    </tls>
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerDefaults.xml
=====================================================
<testserver enabled="true">
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerPlain.xml
=====================================================
<testserver enabled="true">
    <jmxName>testserver-custom</jmxName>
    <bind>0.0.0.0:0</bind>
    <connectionBacklog>150</connectionBacklog>
    <connectiontimeout>360</connectiontimeout>
    <connectionLimit>100</connectionLimit>
    <connectionLimitPerIP>5</connectionLimitPerIP>
    <helloName autodetect="false">custom-mailer</helloName>
</testserver>

=====================================================
== File: server/protocols/protocols-library/src/test/resources/testServerTLS.xml
=====================================================
<testserver enabled="true">
    <tls socketTLS="true" startTLS="false">
        <keystore>file://conf/keystore</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
</testserver>

=====================================================
== File: server/protocols/protocols-managesieve/pom.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.james</groupId>
        <artifactId>james-server</artifactId>
        <version>3.9.0-SNAPSHOT</version>
        <relativePath>../../pom.xml</relativePath>
    </parent>

    <artifactId>james-server-protocols-managesieve</artifactId>

    <name>Apache James :: Server :: ManageSieve</name>

    <dependencies>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-filesystem-api</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-protocols-library</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>james-server-util</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.groupId}</groupId>
            <artifactId>testing-base</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>${james.protocols.groupId}</groupId>
            <artifactId>protocols-managesieve</artifactId>
        </dependency>
        <dependency>
            <groupId>${james.protocols.groupId}</groupId>
            <artifactId>protocols-netty</artifactId>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-handler</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>

=====================================================
== File: server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/protocols/webadmin-integration-test/distributed-webadmin-integration-test/src/test/resources/eml/emailWithOnlyAttachment.eml
=====================================================
Return-Path: <abc@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <abc@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64

UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==

=====================================================
== File: server/protocols/webadmin-integration-test/memory-webadmin-integration-test/src/test/resources/jwt_publickey
=====================================================
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtlChO/nlVP27MpdkG0Bh
16XrMRf6M4NeyGa7j5+1UKm42IKUf3lM28oe82MqIIRyvskPc11NuzSor8HmvH8H
lhDs5DyJtx2qp35AT0zCqfwlaDnlDc/QDlZv1CoRZGpQk1Inyh6SbZwYpxxwh0fi
+d/4RpE3LBVo8wgOaXPylOlHxsDizfkL8QwXItyakBfMO6jWQRrj7/9WDhGf4Hi+
GQur1tPGZDl9mvCoRHjFrD5M/yypIPlfMGWFVEvV5jClNMLAQ9bYFuOc7H1fEWw6
U1LZUUbJW9/CH45YXz82CYqkrfbnQxqRb2iVbVjs/sHopHd1NTiCfUtwvcYJiBVj
kwIDAQAB
-----END PUBLIC KEY-----

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/rtf.mp.alt.eml
=====================================================
From - Wed Jan 24 16:24:38 2024
X-Mozilla-Status: 0001
X-Mozilla-Status2: 10000000
Date: Mon, 22 Jan 2024 21:15:28 +0100
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=170610834810.eCBB07cc.47912
Content-Transfer-Encoding: 7bit
Subject: TEST MAIL SORTANT 01
From: "Alexandre BOUZENAD" <bouzenad.alexandre@avocat-conseil.fr>
To: "Nicolas DAZON" <N.DAZON@cnb.avocat.fr>
Message-Id: <620821581.313185.1705954528177@cloud.avocat.fr>
Received: from bizpsie4.9services.com (84.96.93.162) by
 AM4PEPF00027A6B.mail.protection.outlook.com (10.167.16.89) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.7202.16 via Frontend Transport; Mon, 22 Jan 2024 20:15:31 +0000
Received: from AM4PEPF00027A6B.eurprd04.prod.outlook.com
 (2603:10a6:20b:458:cafe::f0) by AS8P189CA0032.outlook.office365.com
 (2603:10a6:20b:458::10) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.32 via Frontend
 Transport; Mon, 22 Jan 2024 20:15:31 +0000
Received: from cnb1012vu-01.jmsp.prod (cnb1012vu-02.cnb.priv [10.170.208.61])
 by cnb-vip-relais-smtp-pub.sfr-sh.net (Postfix) with ESMTPA id 3E6DD70544 for
 <n.dazon@cnb.avocat.fr>; Mon, 22 Jan 2024 21:15:28 +0100 (CET)
Received: from mta.avocat.fr ([87.255.138.194]) by cmsmtp with ESMTP id
 S0hcrExBB1WvcS0hcr2zQX; Mon, 22 Jan 2024 21:15:30 +0100
Received: from AS8P189CA0032.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:458::10)
 by PR0P264MB3424.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:14b::11) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7202.33; Mon, 22 Jan
 2024 20:15:31 +0000
Received: from PR0P264MB3424.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:14b::11)
 by PR1P264MB4134.FRAP264.PROD.OUTLOOK.COM with HTTPS; Mon, 22 Jan 2024
 20:15:44 +0000
X-Priority: 3
Thread-Index: AQGgb/nNNTXYh27zvUF14MtQ3tEsXQ==
Authentication-Results: spf=pass (sender IP is 84.96.93.162)
 smtp.mailfrom=avocat-conseil.fr; dkim=none (message not signed)
 header.d=none;dmarc=pass action=none
 header.from=avocat-conseil.fr;compauth=pass reason=100
X-MS-Exchange-Organization-SCL: 1
X-MS-Exchange-Organization-MessageDirectionality: Incoming
X-MS-Exchange-Organization-AuthSource:
 AM4PEPF00027A6B.eurprd04.prod.outlook.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Organization-Network-Message-Id:
 c3ddd41f-249a-4a17-0999-08dc1b86e22a
X-MS-PublicTrafficType: Email
X-MS-TrafficTypeDiagnostic:
 AM4PEPF00027A6B:EE_|PR0P264MB3424:EE_|PR1P264MB4134:EE_
X-MS-Exchange-Organization-ExpirationStartTime: 22 Jan 2024 20:15:31.3741

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_report.eml
=====================================================
Return-Path: <>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=greylist score=4.5 requiredScore=15.0
Received: from 100.96.74.171 (EHLO outgoing.avocat.fr) ([100.96.74.171])
          (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384)
          by smtps.avocat.fr (JAMES SMTP Server ) with ESMTP ID 1c2a7467
          for <comptetest15.linagora@avocat.fr>;
          Wed, 14 Feb 2024 11:10:03 +0000 (UTC)
Received: by outgoing.avocat.fr (Postfix)
	id E7271402C0; Wed, 14 Feb 2024 12:10:02 +0100 (CET)
Date: Wed, 14 Feb 2024 12:10:02 +0100 (CET)
From: Mail Delivery System <MAILER-DAEMON@outgoing.avocat.fr>
Subject: Undelivered Mail Returned to Sender
To: comptetest15.linagora@avocat.fr
Auto-Submitted: auto-replied
MIME-Version: 1.0
Content-Type: multipart/report; report-type=delivery-status;
	boundary="593CE40281.1707909002/outgoing.avocat.fr"
Content-Transfer-Encoding: 8bit
Message-Id: <20240214111002.E7271402C0@outgoing.avocat.fr>

This is a MIME-encapsulated message.

--593CE40281.1707909002/outgoing.avocat.fr
Content-Description: Notification
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

This is the mail system at host outgoing.avocat.fr.

I'm sorry to have to inform you that your message could not
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to postmaster.

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

                   The mail system

<invalid@linagora.com>: host 67504e1f.21.ik2.com[66.228.130.220] said: 500
    5.1.1 invalid@linagora.com Address Error (in reply to RCPT TO command)

--593CE40281.1707909002/outgoing.avocat.fr
Content-Description: Delivery report
Content-Type: message/delivery-status

Reporting-MTA: dns; outgoing.avocat.fr
X-Postfix-Queue-ID: 593CE40281
X-Postfix-Sender: rfc822; comptetest15.linagora@avocat.fr

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested.eml
=====================================================
Return-Path: <me@linagora.com>
Delivered-To: me@linagora.com
Content-Type: multipart/mixed; boundary="------------8Z6SfsfcYTjrhgeuagphvHB4"
Message-ID: <bb76dd1c-044f-316f-c4aa-12d143256e0f@linagora.com>
Date: Wed, 3 May 2023 07:37:27 +0700
MIME-Version: 1.0
References: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
Subject: Fwd: test subject
To: Me ME <me@linagora.com>
From: Me ME <me@linagora.com>
In-Reply-To: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
X-Forwarded-Message-Id: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>

This is a multi-part message in MIME format.
--------------8Z6SfsfcYTjrhgeuagphvHB4
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

CF the attachment

--------------8Z6SfsfcYTjrhgeuagphvHB4
Content-Type: message/rfc822; name="test subject.eml"
Content-Disposition: attachment; filename="test subject.eml"
Content-Transfer-Encoding: 7bit

Return-Path: <me@linagora.com>
Delivered-To: me@linagora.com
Content-Type: multipart/mixed; boundary="------------F6Ykx4Sf21a3Ovh9U5C4q1Qb"
Message-ID: <ed24d4ad-53c0-48c7-2fc9-39f762e4d98d@linagora.com>
Date: Wed, 3 May 2023 07:36:49 +0700
MIME-Version: 1.0
To: Me ME <me@linagora.com>
From: Me ME <me@linagora.com>
Subject: test subject

This is a multi-part message in MIME format.
--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

test body

--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb
Content-Type: text/plain; charset=UTF-8; name="whatever.txt"
Content-Disposition: attachment; filename="whatever.txt"
Content-Transfer-Encoding: base64

dGVzdCBhdHRhY2htZW50Cg==

--------------F6Ykx4Sf21a3Ovh9U5C4q1Qb--

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-single-attachment.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Main test message...

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn



=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_complex.eml
=====================================================
Return-Path: <tungexplorer@linagora.com>
X-JAMES-MDN-JMAP-MESSAGE-ID: 49c73510-9108-11eb-a5a7-11eb7059e7ef
Delivered-To: magiclan@linagora.com
MIME-Version: 1.0
Content-Type: multipart/report; report-type=disposition-notification;
 boundary="-=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-"
To: magiclan@linagora.com
X-LINAGORA-Copy-Delivery-Done: 1
From: tungexplorer@linagora.com
Subject: Read: test
Date: Tue, 30 Mar 2021 03:31:50 +0000
Message-ID: <Mime4j.f.9089aa43e656a14b.1788130035c@linagora.com>

---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: text/plain; charset=UTF-8

To: magiclan@linagora.com
Subject: test
Message was displayed on Tue Mar 30 2021 10:31:50 GMT+0700 (Indochina Time)
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/disposition-notification; charset=UTF-8

Reporting-UA: OpenPaaS Unified Inbox; UA_Product
Original-Recipient: rfc822; tungexplorer@linagora.com
Final-Recipient: rfc822; tungexplorer@linagora.com
Original-Message-ID: <633c6811-f897-ec7c-642a-2360366e1b93@linagora.com>
Disposition: manual-action/MDN-sent-manually;displayed
Error: Message1
Error: Message2
X-OPENPAAS-IP: 177.177.177.77
X-OPENPAAS-PORT: 8000

---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/rfc822

Subject: test
To: magiclan@linagora.com
Content-Type: text/plain

This is content of original message, that already on third bodypart
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/related_in_alternative_multipart.eml
=====================================================
Return-Path: <from@linagora.com>
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="----sinikael-?=_1-16049770230370.5904051543231188"

This is a multi-part message in MIME format.
------sinikael-?=_1-16049770230370.5904051543231188
Content-Type: multipart/alternative;
 boundary="----sinikael-?=_2-16049770230370.5904051543231188"

------sinikael-?=_2-16049770230370.5904051543231188
Content-Type: multipart/related; type="text/html";
 boundary="----sinikael-?=_3-16049770230370.5904051543231188"

------sinikael-?=_3-16049770230370.5904051543231188
Content-Type: text/html
Content-Transfer-Encoding: base64

PHRhYmxlPjwvdGFibGU+
------sinikael-?=_3-16049770230370.5904051543231188--

------sinikael-?=_2-16049770230370.5904051543231188
Content-Type: text/calendar; charset=UTF-8; method=CANCEL
Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
ZWN0IDQuMS4zLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6Q0FOQ0VMDQpCRUdJTjpW
VElNRVpPTkUNClRaSUQ6QXNpYS9KYWthcnRhDQpCRUdJTjpTVEFOREFSRA0KVFpPRkZTRVRGUk9N
OiswNzAwDQpUWk9GRlNFVFRPOiswNzAwDQpUWk5BTUU6V0lCDQpEVFNUQVJUOjE5NzAwMTAxVDAw
MDAwMA0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJTjpWRVZFTlQNClVJRDpkYTdj
MzljNS0xNzg3LTQ0MDktYjAwNS05MjBmZTBiMmMxYTINCkRUU1RBTVA6MjAyMDExMTBUMDI1NzAx
Wg0KU0VRVUVOQ0U6MQ0KU1VNTUFSWTo8QVQ+IFZlcmlmeSBVc2VyIFNlbmQgRW1haWwgVG8gQXR0
ZW5kZWVzIFR1ZSBOb3ZlbWJlciAxMCAwOTo1MjoxMiBVDQogVEMgMjAyMA0KRFRTVEFSVDoyMDIw
MTIwNlQwMzAwMDBaDQpEVEVORDoyMDIwMTIwNlQwNDAwMDBaDQpPUkdBTklaRVI7Q049VXNlciBB
Om1haWx0bzp1c2VyYUBxYS5vcGVuLXBhYXMub3JnDQpBVFRFTkRFRTtDTj06bWFpbHRvOnVzZXJk
QHFhLm9wZW4tcGFhcy5vcmcNCkVORDpWRVZFTlQNCkVORDpWQ0FMRU5EQVINCg==
------sinikael-?=_2-16049770230370.5904051543231188--

------sinikael-?=_1-16049770230370.5904051543231188
Content-Type: application/ics; name=meeting.ics
Content-Disposition: attachment; filename=meeting.ics
Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSDQpWRVJTSU9OOjIuMA0KUFJPRElEOi0vL1NhYnJlLy9TYWJyZSBWT2Jq
ZWN0IDQuMS4zLy9FTg0KQ0FMU0NBTEU6R1JFR09SSUFODQpNRVRIT0Q6Q0FOQ0VMDQpCRUdJTjpW
VElNRVpPTkUNClRaSUQ6QXNpYS9KYWthcnRhDQpCRUdJTjpTVEFOREFSRA0KVFpPRkZTRVRGUk9N
OiswNzAwDQpUWk9GRlNFVFRPOiswNzAwDQpUWk5BTUU6V0lCDQpEVFNUQVJUOjE5NzAwMTAxVDAw
MDAwMA0KRU5EOlNUQU5EQVJEDQpFTkQ6VlRJTUVaT05FDQpCRUdJTjpWRVZFTlQNClVJRDpkYTdj
MzljNS0xNzg3LTQ0MDktYjAwNS05MjBmZTBiMmMxYTINCkRUU1RBTVA6MjAyMDExMTBUMDI1NzAx
Wg0KU0VRVUVOQ0U6MQ0KU1VNTUFSWTo8QVQ+IFZlcmlmeSBVc2VyIFNlbmQgRW1haWwgVG8gQXR0

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.cal.eml
=====================================================
Return-Path: <j@linagora.com>
MIME-version: 1.0
X-LINAGORA-Copy-Delivery-Done: 1
From: J <j@linagora.com>
Message-ID: <00ecbe90-cdbc-7222-75c4-0e297c5a8eef@linagora.com>
To: B <b@linagora.com>
Date: Thu, 14 Oct 2021 16:04:30 +0200
Subject: A little explanation
Content-type: multipart/mixed; boundary="Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)"


--Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)
Content-type: multipart/alternative;
 boundary="Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)"


--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)
Content-type: text/plain; charset=UTF-8
Content-transfer-encoding: 8BIT

J <j@linagora.com> a accepté votre invitation.
--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)
Content-type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
BEGIN:VTIMEZONE
END:VTIMEZONE
BEGIN:VEVENT
UID:08985ae5-8e62-4f3e-971d-27c8b40cf838
END:VEVENT
END:VCALENDAR


--Boundary_(ID_ryU4ZdJoASiZ+Jo21dCbwA)--

--Boundary_(ID_qyG4ZdjoAsiZ+Jo19dCbWQ)
Content-type: application/ics; name=invite.ics
Content-transfer-encoding: 8BIT
Content-disposition: attachment; filename=invite.ics

BEGIN:VCALENDAR
VERSION:2.0
METHOD:REPLY
BEGIN:VTIMEZONE
END:VTIMEZONE
BEGIN:VEVENT
UID:08985ae5-8e62-4f3e-971d-27c8b40cf838

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/html.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------64D8D789FC30153D6ED18258"

This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

<p>Send<br/>concerted from html</p>


--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
 name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="text1"

LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
 name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="text2"

c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp
QWpsRDFNd05JWEpyL1dFVDYrOU1tdVRTSVlXV1U5NGNzRG45V1ZNelJoYUFicGZuU3FJeDhU
ZFV0ck4vWnpYMkpldFBTYXIvYlU5blhBV2VpQy9qUEZRMXFLSDRHZURyWVhSTEt1NFQ4Nzgy
T3JHSDhKeXJvcjk3VGxOWGhQcmpkUkxFQjRiUXFtbVpoYjNId2NEOGE5WHpmWnFsbTdHUldM
bzFXUU1HdC9OcFFMQzdqTWY0ZkE2LytranpzVHNweHdkZ0w3NEdKcVBmT1hPaXdnTEhYOENa
Ni81UnlUcWhUNnBEM01rdFNOV2F6L3pJSFBORXFmNUJZOUNCTTFURlI1dys2TURIbzBnbWlJ
c1hGRUpUUG5maEJ2SERoU2pCMVJJMEt4VUNseVlySjRmQmxVVmVLZm5hd29WY3U3WXZDcUY0
RjUgcXV5bmhubkBsaW5hZ29yYQo=
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Main test message...

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn--



=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_simple.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------64D8D789FC30153D6ED18258"

This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Send


--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
 name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="text1"

LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
 name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="text2"

c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp
QWpsRDFNd05JWEpyL1dFVDYrOU1tdVRTSVlXV1U5NGNzRG45V1ZNelJoYUFicGZuU3FJeDhU
ZFV0ck4vWnpYMkpldFBTYXIvYlU5blhBV2VpQy9qUEZRMXFLSDRHZURyWVhSTEt1NFQ4Nzgy
T3JHSDhKeXJvcjk3VGxOWGhQcmpkUkxFQjRiUXFtbVpoYjNId2NEOGE5WHpmWnFsbTdHUldM
bzFXUU1HdC9OcFFMQzdqTWY0ZkE2LytranpzVHNweHdkZ0w3NEdKcVBmT1hPaXdnTEhYOENa
Ni81UnlUcWhUNnBEM01rdFNOV2F6L3pJSFBORXFmNUJZOUNCTTFURlI1dys2TURIbzBnbWlJ
c1hGRUpUUG5maEJ2SERoU2pCMVJJMEt4VUNseVlySjRmQmxVVmVLZm5hd29WY3U3WXZDcUY0
RjUgcXV5bmhubkBsaW5hZ29yYQo=
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_simple.eml
=====================================================
Return-Path: <tungexplorer@linagora.com>
X-JAMES-MDN-JMAP-MESSAGE-ID: 49c73510-9108-11eb-a5a7-11eb7059e7ef
Delivered-To: magiclan@linagora.com
MIME-Version: 1.0
Content-Type: multipart/report; report-type=disposition-notification;
 boundary="-=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-"
To: magiclan@linagora.com
X-LINAGORA-Copy-Delivery-Done: 1
From: tungexplorer@linagora.com
Subject: Read: test
Date: Tue, 30 Mar 2021 03:31:50 +0000
Message-ID: <Mime4j.f.9089aa43e656a14b.1788130035c@linagora.com>

---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: text/plain; charset=UTF-8

This is simple body of human-readable part
---=Part.e.fbba3f3ef449cf21.1788130035a.be0dce94fc2486bf=-
Content-Type: message/disposition-notification; charset=UTF-8

Final-Recipient: rfc822; tungexplorer@linagora.com
Disposition: manual-action/MDN-sent-manually;displayed

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/multipart_complex.eml
=====================================================
Date: Tue, 03 Jan 2017 16:05:01 +0100
From: sender <sender@james.org>
MIME-Version: 1.0
To: David DOLCIMASCOLO <david.ddo@linagora.com>
Subject: Re: [Internet] Rendez-vous
References: <9b6a4271-69fb-217a-5c14-c68c68375d96@linagora.com>
In-Reply-To: <d5c6f1d6-96e7-8172-9fe6-41fa6c9bd6ec@linagora.com>
X-Gie-Attachments: none
Cc:
Content-type: multipart/mixed; boundary="----------=_1483455916-7086-3"

This is a multi-part message in MIME format...

------------=_1483455916-7086-3
Content-Type: multipart/alternative; boundary="------------060506070600060108040700"

This is a multi-part message in MIME format.
--------------060506070600060108040700
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit

/blabla/
*bloblo*

--------------060506070600060108040700
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit

<i>blabla</i>
<b>bloblo</b>

--------------060506070600060108040700--

------------=_1483455916-7086-3
Content-ID: <14672787885774e5c4d4cee471352039@linagora.com>
Content-Type: text/plain; charset="iso-8859-1"; name="avertissement.txt"
Content-Disposition: inline; filename="avertissement.txt"
Content-Transfer-Encoding: binary

inline attachment

------------=_1483455916-7086-3--

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested_mixed_alternative.txt
=====================================================
Return-Path: <btellier@linagora.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=-4.0 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
          by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID 0ae4733b
          for <btellier@linagora.com>;
          Wed, 21 Feb 2024 21:58:57 +0000 (UTC)
Received: from smtp.linagora.com (smtp.linagora.com [54.36.8.78])
	by incoming.linagora.com (Postfix) with ESMTPS id 18D6714004C
	for <btellier@linagora.com>; Wed, 21 Feb 2024 21:58:57 +0000 (UTC)
Received: from [192.168.1.23] (lfbn-lyo-1-2021-156.w90-66.abo.wanadoo.fr [90.66.189.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.linagora.com (Postfix) with ESMTPSA id CADE13EC33
	for <btellier@linagora.com>; Wed, 21 Feb 2024 22:58:55 +0100 (CET)
Content-Type: multipart/mixed; boundary="------------6a0Tq7Y8z9M0dIG10PnZ7l7E"
Message-ID: <b3493b24-116a-4d6b-a61c-1a3b09e44619@linagora.com>
Date: Wed, 21 Feb 2024 22:58:55 +0100
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
References: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
Subject: Fwd: Will be nested
Content-Language: en-US
To: btellier@linagora.com
X-LINAGORA-Copy-Delivery-Done: 1
From: "btellier@linagora.com" <btellier@linagora.com>
In-Reply-To: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
X-Forwarded-Message-Id: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>

This is a multi-part message in MIME format.
--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit


--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: message/rfc822; name="Will be nested.eml"
Content-Disposition: attachment; filename="Will be nested.eml"
Content-Transfer-Encoding: 7bit

Return-Path: <btellier@linagora.com>
org.apache.james.rspamd.flag: NO
org.apache.james.rspamd.status: No, actions=no action score=0.0 requiredScore=15.0
Delivered-To: btellier@linagora.com
Received: from 172.17.0.1 (EHLO incoming.linagora.com) ([172.17.0.1])
          by incoming.linagora.com (JAMES SMTP Server ) with ESMTP ID a67da490
          for <btellier@linagora.com>;
          Wed, 21 Feb 2024 21:58:20 +0000 (UTC)
Received: from smtp.linagora.com (smtp.linagora.com [54.36.8.78])

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mdn_relate_original_message.eml
=====================================================
Return-Path: <return.path@james.apache.org>
Mailing-List: contact contact1@james.apache.org; run by ABC
Message-ID: <messageId1@Atlassian.JIRA>
In-Reply-To: <JIRA.12781874.1426269127000@Atlassian.JIRA>
References: <JIRA.12781874.1426269127000@Atlassian.JIRA> <JIRA.12781874.1426269127444@arcas>
Subject: This is subject of original message that mdn has been related
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394
----------------------------------

This is body content

---------------------------------------------------------------------
To unsubscribe, e-mail: server1@james.apache.org


=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/iso-8859-1.eml
=====================================================
Subject: =?UTF-8?Q?Re=3a_=5bInternet=5d_Pr=c3=a9sent_!?=
To: Xavier <xavier@free.fr>
From: "Recipient"
 <recipient@free.fr>
Date: Tue, 30 Jan 2024 09:19:23 +0100
Message-ID:
 <deba8ec5-f24f-a433-f03c-0d277f0ac94a@free.fr>
MIME-Version: 1.0
Cc: 
Content-type: multipart/mixed; boundary="----------=_1706602778-31669-7"

This is a multi-part message in MIME format...

------------=_1706602778-31669-7
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: fr

Salut,
motivé pour un dîner :-\ ?
A+

------------=_1706602778-31669-7
Content-Type: text/plain; name="avertissement.txt"
Content-Disposition: inline; filename="avertissement.txt"
Content-Transfer-Encoding: base64

Q2UgbWVzc2FnZSDpbGVjdHJvbmlxdWUgZXQgdG91cyBsZXMgZmljaGllcnMgYXR0YWNo6XMgcXUn
aWwgY29udGllbnQgc29udCBjb25maWRlbnRpZWxzIGV0IGRlc3RpbulzIGV4Y2x1c2l2ZW1lbnQg
4CBsJ3VzYWdlIGRlIGxhIHBlcnNvbm5lIOAgbGFxdWVsbGUgaWxzIHNvbnQgYWRyZXNz6XMuIFNp
IHZvdXMgYXZleiByZed1IGNlIG1lc3NhZ2UgcGFyIGVycmV1ciwgbWVyY2kgZGUgbGUgcmV0b3Vy
bmVyIOAgc29uIOltZXR0ZXVyLiBMYSBwdWJsaWNhdGlvbiwgbCd1c2FnZSwgbGEgZGlzdHJpYnV0
aW9uLCBsJ2ltcHJlc3Npb24gb3UgbGEgY29waWUgbm9uIGF1dG9yaXPpZSBkZSBjZSBtZXNzYWdl
IGV0IGRlcyBhdHRhY2hlbWVudHMgcXUnaWwgY29udGllbnQgc29udCBzdHJpY3RlbWVudCBpbnRl
cmRpdHMuCgpFbiBjYXMgZCd1cmdlbmNlLCBjb21wb3NleiBsZSAxNyBvdSBsZSAxMTIuCkFmaW4g
ZGUgY29udHJpYnVlciBhdSByZXNwZWN0IGRlIGwnZW52aXJvbm5lbWVudCwgbWVyY2kgZGUgbidp
bXByaW1lciBjZXQgZS1tYWlsIHF1J2VuIGNhcyBkZSBuZWNlc3NpdGUuCgpUaGlzIGUtbWFpbCBh
bmQgYW55IGZpbGVzIHRyYW5zbWl0dGVkIHdpdGggaXQgYXJlIGNvbmZpZGVudGlhbCBhbmQgaW50
ZW5kZWQgc29sZWx5IGZvciB0aGUgdXNlIG9mIHRoZSBpbmRpdmlkdWFsIHRvIHdob20gaXQgaXMg
YWRkcmVzc2VkLiBJZiB5b3UgaGF2ZSByZWNlaXZlZCB0aGlzIGVtYWlsIGluIGVycm9yIHBsZWFz
ZSBzZW5kIGl0IGJhY2sgdG8gdGhlIHBlcnNvbiB0aGF0IHNlbnQgaXQgdG8geW91LiBVbmF1dGhv
cml6ZWQgcHVibGljYXRpb24sIHVzZSwgZGlzc2VtaW5hdGlvbiwgZm9yd2FyZGluZywgcHJpbnRp
bmcgb3IgY29weWluZyBvZiB0aGlzIGVtYWlsIGFuZCBpdHMgYXNzb2NpYXRlZCBhdHRhY2htZW50
cyBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLgoKSW4gY2FzZSBvZiBlbWVyZ2VuY3ksIGRpYWwgbnVt
YmVyIDE3IG9yIDExMi4KVG8gY29udHJpYnV0ZSB0byB0aGUgZW52aXJvbm1lbnRhbCBwcm90ZWN0
aW9uLCBwbGVhc2UgcHJpbnQgdGhpcyBlLW1haWwgb25seSBpZiBuZWNlc3NhcnkuIAo=

------------=_1706602778-31669-7--

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/mixed_alternative.eml
=====================================================
Return-Path: <comptetest15.linagora@avocat.fr>
MIME-Version: 1.0
Subject: efvvbe
From: Test SFR15 <comptetest15.linagora@avocat.fr>
To: comptetest15.linagora@avocat.fr
Reply-To: comptetest15.linagora@avocat.fr
Date: Fri, 16 Feb 2024 07:43:48 +0000
Message-ID: <Mime4j.1c.9f6396389b10101f.18db0df1ea7@avocat.fr>
User-Agent: Team-Mail/0.11.3 Mozilla/5.0 (X11; Linux x86_64)
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36
Content-Type: multipart/mixed;
 boundary="-=Part.1e.ad48eadb4d16313.18db0df1ef2.27f27d27a1f5f6c9=-"

---=Part.1e.ad48eadb4d16313.18db0df1ef2.27f27d27a1f5f6c9=-
Content-Type: multipart/alternative;
 boundary="-=Part.1d.e7a28233d3e94785.18db0df1ef1.4fa526bb3070cbce=-"

---=Part.1d.e7a28233d3e94785.18db0df1ef1.4fa526bb3070cbce=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable


reber
---=Part.1d.e7a28233d3e94785.18db0df1ef1.4fa526bb3070cbce=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div><br>reber</div>
---=Part.1d.e7a28233d3e94785.18db0df1ef1.4fa526bb3070cbce=---

---=Part.1e.ad48eadb4d16313.18db0df1ef2.27f27d27a1f5f6c9=-
Content-Type: image/jpeg; name="=?US-ASCII?Q?0_WXYsA=5FWrYTAaQMRH.jpg?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64

/9j/4QC8RXhpZgAASUkqAAgAAAAGABIBAwABAAAAAQAAABoBBQABAAAAVgAAABsBBQABAAAAXgAA
ACgBAwABAAAAAgAAABMCAwABAAAAAQAAAGmHBAABAAAAZgAAAAAAAABIAAAAAQAAAEgAAAABAAAA
BgAAkAcABAAAADAyMTABkQcABAAAAAECAwAAoAcABAAAADAxMDABoAMAAQAAAP//AAACoAQAAQAA
AH4CAAADoAQAAQAAAN8BAAAAAAAA/9sAQwAGBgYGBwYHCAgHCgsKCwoPDgwMDg8WEBEQERAWIhUZ
FRUZFSIeJB4cHiQeNiomJio2PjQyND5MRERMX1pffHyn/9sAQwEGBgYGBwYHCAgHCgsKCwoPDgwM
Dg8WEBEQERAWIhUZFRUZFSIeJB4cHiQeNiomJio2PjQyND5MRERMX1pffHyn/8AAEQgB3wJ+AwEi
AAIRAQMRAf/EAB0AAQABBQEBAQAAAAAAAAAAAAAGAgMEBQcBCAn/xABUEAABAwMBAwQLDAgFAwMD
BQABAAIDBAURBhIhMRMUQVEHIlVhcXSRk7Gz0RUWMjQ2QlJTVHOBkjM1cnWUoaLSCCNisuFDwcMk
N+ImRPAXOEVjgv/EABoBAQADAQEBAAAAAAAAAAAAAAACBAUDAQb/xAAiEQEAAgMAAgIDAQEAAAAA
AAAAAQIDBBEFEjFREyFBInH/2gAMAwEAAhEDEQA/APqlERAREQEREBERAREQEREBERAREQEREBER
AREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQER
EBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAR
EQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREB
ERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQ
EREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBERAREQEREBER

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/alternative.eml
=====================================================
Return-Path: <from@linagora.com>
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------64D8D789FC30153D6ED18258"

This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

<p>Send<br/>concerted from html</p>


--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
 name="text1"
Content-Transfer-Encoding: 7bit

I am the text plain part!

--------------64D8D789FC30153D6ED18258

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/jmap-rfc-8621-integration-tests-common/src/main/resources/eml/nested2.eml
=====================================================
Content-Type: multipart/mixed; boundary="------------6a0Tq7Y8z9M0dIG10PnZ7l7E"
Message-ID: <b3493b24-116a-4d6b-a61c-1a3b09e44619@linagora.com>
Date: Wed, 21 Feb 2024 22:58:55 +0100
MIME-Version: 1.0
References: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
Subject: Fwd: Will be nested
To: btellier@linagora.com
From: "btellier@linagora.com" <btellier@linagora.com>
In-Reply-To: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
X-Forwarded-Message-Id: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>

This is a multi-part message in MIME format.
--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit


--------------6a0Tq7Y8z9M0dIG10PnZ7l7E
Content-Type: message/rfc822; name="Will be nested.eml"
Content-Disposition: attachment; filename="Will be nested.eml"
Content-Transfer-Encoding: 7bit

MIME-Version: 1.0
Subject: Will be nested
From: Benoit TELLIER <bxxxx@linagora.com>
To: =?ISO-8859-1?Q?Beno=EEt_TELLIER?= <bxxxx@linagora.com>
Reply-To: btellier@linagora.com
Date: Wed, 21 Feb 2024 21:58:17 +0000
Message-ID: <Mime4j.8f3.69abfdd624c15c44.18dcdad3859@linagora.com>
Content-Type: multipart/mixed;
 boundary="-=Part.8f5.4ee8b8343a133e4f.18dcdad38b0.f1b9fcef27eb8231=-"

---=Part.8f5.4ee8b8343a133e4f.18dcdad38b0.f1b9fcef27eb8231=-
Content-Type: multipart/alternative;
 boundary="-=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-"

---=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Nested body

--=C2=A0

Best regards,

Benoit TELLIER

---=Part.8f4.9ab3439f1c0c1361.18dcdad38b0.b6d054e4dd1744c7=-
Content-Type: text/html; charset=UTF-8

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/memory-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
=====================================================
# Configuration urlPrefix for JMAP routes.
url.prefix=http://domain.com
websocket.url.prefix=ws://domain.com
upload.max.size=20M
webpush.maxTimeoutSeconds=10
webpush.maxConnections=10
dynamic.jmap.prefix.resolution.enabled=true

=====================================================
== File: server/protocols/jmap-rfc-8621-integration-tests/distributed-jmap-rfc-8621-integration-tests/src/test/resources/jmap.properties
=====================================================
# Configuration urlPrefix for JMAP routes.
url.prefix=http://domain.com
websocket.url.prefix=ws://domain.com
upload.max.size=20M
dynamic.jmap.prefix.resolution.enabled=true

=====================================================
== File: server/protocols/protocols-pop3/src/test/resources/pop3server.xml
=====================================================
<?xml version="1.0"?>
<pop3server enabled="true">
    <jmxName>pop3server</jmxName>
    <bind>127.0.0.1:0</bind>
    <helloName>myMailServer</helloName>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <connectiontimeout>3600</connectiontimeout>
    <handlerchain>
        <handler class="org.apache.james.pop3server.core.CoreCmdHandlerLoader"/>
    </handlerchain>
    <gracefulShutdown>false</gracefulShutdown>
</pop3server>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSNotFound.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.notfound.jks</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>123456</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEM.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
        <secret>123456</secret>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthAllowed.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSSLCompress.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="true" startTLS="false">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>64K</inMemorySizeLimit>
    <literalSizeLimit>128K</literalSizeLimit>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <compress>true</compress>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslDefaultJKS.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.jks</keystore>
        <secret>123456</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthEnabledWithoutRequireSSL.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
    </auth>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/oauth.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
        <secret>123456</secret>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>true</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsFalse.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="false">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>true</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisabled.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>false</plainAuthEnabled>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMBadPass.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
        <secret>badbad</secret>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerProxy.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
    <proxyRequired>true</proxyRequired>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.p12</keystore>
        <keystoreType>PKCS12</keystoreType>
        <secret>123456</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSSL.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="true" startTLS="false">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>64K</inMemorySizeLimit>
    <literalSizeLimit>128K</literalSizeLimit>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMNoPass.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.nopass.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerCompress.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <compress>true</compress>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerImapConnectCheck.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>64K</inMemorySizeLimit>
    <literalSizeLimit>128K</literalSizeLimit>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
    <additionalConnectionChecks>org.apache.james.imapserver.netty.IpConnectionCheck</additionalConnectionChecks>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/private.nopass.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAsjjah2w8AKpnGKya4QG/tdRoR9pJkKWfyf17ywcYWBxcpj0Q
+dkn+CXvBafhQ2zlf+bPkWxYhBuXyMB8QNCp/sMlaQ8dGFw/LGojglHk8T4aIu+a
Ffy0hgN9yniuEHmFdjP2XECbA7UbHQPZTO/DU3QJ0FabqKO61pHB4bliNsTWGjzg
seU5kdS1Uup0AK/URO2pSLpnDPV/l0yNmxvGfO/ulPNVJyxiJuT+Rl51LlxpWhu3
G/hFX2mJP0Mn/cX3xNm2HrYIaasglum7bXN/vfiqSFAg46LgT7UJ4pCHoLI99K7Z
OpgBqK/Q4P4UxOggxkawI+JmVLTmCpz1c6JR3QIDAQABAoIBAEvx7DVfCuahtpMO
ImWVkDMUk2di/owz97ZkXRc0K8yIMXbpeM1vGxgkWgmH83b+9YEeQv9OMx4AgBqc
45XfFUGpuMxfE1/pF0Z+6CjFaxDeDNcsUPXjnK2q2TSpXktI7XVkSSwgn63hw+8G
T9f4J7ztKq1r6qLfOmPq8rqUe+SoH5tkwmJJgnxx3Qt2xZ4nmFXiuscOcVUjV3D/
EdghjcExNSgxmo8HN34DLQPZrDDwarrYJouiufe7m0Etk8m9bOWkNsoCif0wQ0mS
uQVAHMzCKqrUmAM3X1IimTnwOWu2sYle9VXYijwDkZ0PGQnS4rywz9D9MWy57ZLM
zklb5MUCgYEA5qrK9PmMGNi6ihhjkDw6b4sqOs4Dec89jdkhhYdrbPVXZzB+Shmh
CDhviXhLi7m5G5d707DLPloPR0LdNmf3YsLCvMej70O8DrDG/z1Vv++DF2XcAtvW
TLoXOcSS1E3tKRSp2Uks7osWIwUAomhkEIXsDJ+esH9wHD7rOYA02fsCgYEAxcuR
Sp0rcVqwyuINEmrvH5zxSWk0O5MqM95kyvElFuPCPAKv0EK9t8T7dv7fEtQoupqa
hbDGzatif7B4tVaeWZRYJUrr9uwIyZfVSfYUi5y2KwHGJJPH+EkoQ6sZlRw6Aqj/
AeW4/cnmhK+IrgBDKF99DiVs1nVTgeA0vEneVAcCgYBh9l0VpznJf5nRdkQqiHmk
z6ySptWxEMOqj3F+HSIRdyy0hVLNM49BR36PGoizAaBMyIvtPqNCisr8T7hVF9hn
mCFOPVcxEUo3zvnkgm79gcHh2P+UMzsTAOFGRma5RZMYJE9yGXK8qFMxcjlvv/fn
UIkMX2nsuWKqjEon9Hv9qwKBgFLk760/lVdaVMGSXzwayMCM+6pyhst477TxPXi3
+31OUrbnwVscvXno+iJyynaPp8ocxSnGXmsPqqYtBUmqVY7hVte6QI4peb1S/raS
hSXFtarsgWgO7z2lG1TQvlX5kG5Q+R6IcjEajpuJHVUfEwY2jqiBEs4GOcsydad7
pcu9AoGBANHQQS7U1o0Ks2H9iB02b72rq0Lr7d4xJ7bbeL0PdJNxnKWYtYYrNKvu
R7wWF6MBH+pfm0CzJo0Pog58wkAiKnD8nPuVUdXgi/3PQXu/ZARY0g30wqubaBeZ
UN7bL/TrIc67ldEi07A8Wo6H5Gd6jIHBnmO93an2zXlrvhrvACRX
-----END RSA PRIVATE KEY-----

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12MissingPassword.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.p12</keystore>
        <keystoreType>PKCS12</keystoreType>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServer.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>64K</inMemorySizeLimit>
    <literalSizeLimit>128K</literalSizeLimit>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKSBadPassword.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.jks</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>badbad</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMExtraPass.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.nopass.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
        <secret>123456</secret>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerNoLimits.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>65536</inMemorySizeLimit> <!-- 64 KB -->
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslNoKeys.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapSSL.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="true" startTLS="false">
        <privateKey>private.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
        <secret>123456</secret>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>true</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/private.key
=====================================================
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,5D8E78A6193D484A

YaZzaxmoE+/F5WUWlWAsKXY4e+9oSjYDFFcutiFgxK7UOIFnITTK15ri6VrPzh4R
/VlXVyxNp37NRLiHKG4t+w7F12Vo8j2V6n+3DInOBRjh2z7rP4k9WTefTX8QoXgT
pHXAUf8p3mcooHPhsLk2rQAPmzDXGG7fg9UMoFIVXTvyDi0alLmm8+k2HT0pllIp
drhUg5Rknm09JcD/js45r4qkOVLMh8guU5g+M7x1jOf4PzF8CWTJSLpXmXPwwEHI
DquwjDbaDN2543qOQZYPtJQ6LBlE1vfybFsy8IsYfcfrf6hkXrBdCTUx9FZgOOiF
B9c9gkxWDkZ4Gc2qC7NYebGKsvzg5sKeED/g8ynMCzSQnn6WuhWmsqCmAJR+B0vm
DeBioHW4hfbge+qfkRtcivodxFOGhJkMvBQ5nee84XK5ivZRR7YfBdNO9ES7uYgX
1zr7XvkwOW9tZKDHSPfgwWXcNY7oZ9JgIHbDKp6sndeVJDEA/pJzfNSHWmIjWmld
r7WTAZPghB+I2H2rPGYTUs1iuenyaZVYMX2RAX23zZEBx/TZSmEKp2dO12G2M0ru
LX7ft0gcj7wmT376WnJJ07OG41R041+RAlAr6Im1oUAx7PhPTj21sM8WFsmczip7
RdVBbUCdRd0UjIfd7PjNlut0RFTtctC+oTgD+bOp1jx/UB1bSu/i6JRO52zsggxP
T6yRg59a2TzZEoM4gmRKyF5TFIlTDAsRJXStL2v847pA442fA0S6kaa9sFEf9PrT
CipSCb/DJeVZxslAOZwKMWG/XK3/L3zZ9ctDvqw+OxSYGKKZHcAdNa/nJTZ7f1W9
aSMWBHViZz3nxsuJ2Q8eVGG5YETtyzqgDJ1R16bfBjDGJvR4fdghJge2Nqhliz4G
NeJWqoXdvKobj4CdoGLT6mWlyrmZ/Z9kKKtKm0Oc0MY6MijkKGwJWDjn7ybrsN5h
LG2fYoyBly95n+1phxLXxmJMrCBSyhuxIMnXmFEn/0jYDleHRR+lN95ZFWrmXpPC
vDSBLxmp03EMqj5BpVXwTA3S3WUOlk5Ao8tgvg8MXvzNbZ5Sgzix9Ms/H+ofK53k
YLfpurKZ6rfMF+tbN0cZ4WSYZUJil6vBu03xxJJ2hyGt2b9cupT1ftxewjjBvq4W
C4+eI86WRsTxRfVnsBob9Ok+A0IxxR8MNHfQVBFLTm2XgjFKdMku+eqop5nV3m3m
iltSEoJlkBmCfBsDvkeueTG3M9Gg96MJ05LZQtmdYcW79R6ynvdVeA/KFJ1I7PbM
tmZ5UjyVnbIsEjEw+O++uG7xQWQBqnI4tU6wPqYpJDND4Hsp3CWP5zW0LfFXzzdG
e473CQTJRhiyBHUUhE1+RzHNt1GY5mR9DNfwS3nJdL36k9Hnu2mo+Vzif1JLs2pE
LjKg62lYSic3g73AlnB02tAsjxRA1Pv2OZjhIMQ3WT+caqpckt1Xvqc4ABS9fT8c
4d3kQ4bcsSoRN7lyO+KPwqGl7YPK8+utih12P8ZUqgxhYuCqpWVf7YxEQVzZqmWO
uHx1fpFCbzmDnoIhUQOOMAwxMpDus8huwroycfr67ukzpwxje+6shA==
-----END RSA PRIVATE KEY-----

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsTrue.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>false</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsTrueAndStartSSLIsTrue.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>true</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerPlainAuthDisallowed.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="false">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <plainAuthDisallowed>true</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerStartTLS.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <connectionBacklog>200</connectionBacklog>
    <connectionLimit>0</connectionLimit>
    <connectionLimitPerIP>0</connectionLimitPerIP>
    <idleTimeInterval>120</idleTimeInterval>
    <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
    <enableIdle>true</enableIdle>
    <inMemorySizeLimit>64K</inMemorySizeLimit>
    <literalSizeLimit>128K</literalSizeLimit>
    <plainAuthDisallowed>false</plainAuthDisallowed>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslJKS.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.jks</keystore>
        <keystoreType>JKS</keystoreType>
        <secret>123456</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPEMMissingPass.xml
=====================================================

<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <privateKey>private.key</privateKey>
        <certificates>certs.self-signed.csr</certificates>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/certs.csr
=====================================================
-----BEGIN CERTIFICATE REQUEST-----
MIICijCCAXICAQAwRTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUx
ITAfBgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALI42odsPACqZxismuEBv7XUaEfaSZCln8n9e8sH
GFgcXKY9EPnZJ/gl7wWn4UNs5X/mz5FsWIQbl8jAfEDQqf7DJWkPHRhcPyxqI4JR
5PE+GiLvmhX8tIYDfcp4rhB5hXYz9lxAmwO1Gx0D2Uzvw1N0CdBWm6ijutaRweG5
YjbE1ho84LHlOZHUtVLqdACv1ETtqUi6Zwz1f5dMjZsbxnzv7pTzVScsYibk/kZe
dS5caVobtxv4RV9piT9DJ/3F98TZth62CGmrIJbpu21zf734qkhQIOOi4E+1CeKQ
h6CyPfSu2TqYAaiv0OD+FMToIMZGsCPiZlS05gqc9XOiUd0CAwEAAaAAMA0GCSqG
SIb3DQEBCwUAA4IBAQCLTucL2oggfXTuGZTHVv1N6U9ZlTh7ikMDex3aCTlZZG1m
rT3BJ0Z7QcvJDkUOT0iEgrES6ta61uy2l9BFbfBYgIWJUXaCijid1oaB3YaxFeHb
Y8rTGsJQqHPxjy720ZUiNXrOQuF+QA++auHIAzC2t51H6e3EjIrpNqio8IWYhmEH
wSpYERm5yQ7WSPcWWXI0GoCSYsOgJeE9VwrlXaTv62UwJKfCJM6dUgieKXxtEHpX
eAviSOqU1WJhCQqNJaqtP78Q2g95qMdf7193WigtsMqqgeyT5ewozvQCe8V9Y0H0
zjwS/1kBp50gGs5PWizQJYHra/KVzgIaobgD5u3Z
-----END CERTIFICATE REQUEST-----

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/certs.self-signed.csr
=====================================================
-----BEGIN CERTIFICATE-----
MIIDETCCAfkCFEng6ISWvEq/JkD8u64MA+x2VhS/MA0GCSqGSIb3DQEBCwUAMEUx
CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl
cm5ldCBXaWRnaXRzIFB0eSBMdGQwHhcNMjEwODMwMDQwMzIwWhcNMjIwODMwMDQw
MzIwWjBFMQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UE
CgwYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOC
AQ8AMIIBCgKCAQEAsjjah2w8AKpnGKya4QG/tdRoR9pJkKWfyf17ywcYWBxcpj0Q
+dkn+CXvBafhQ2zlf+bPkWxYhBuXyMB8QNCp/sMlaQ8dGFw/LGojglHk8T4aIu+a
Ffy0hgN9yniuEHmFdjP2XECbA7UbHQPZTO/DU3QJ0FabqKO61pHB4bliNsTWGjzg
seU5kdS1Uup0AK/URO2pSLpnDPV/l0yNmxvGfO/ulPNVJyxiJuT+Rl51LlxpWhu3
G/hFX2mJP0Mn/cX3xNm2HrYIaasglum7bXN/vfiqSFAg46LgT7UJ4pCHoLI99K7Z
OpgBqK/Q4P4UxOggxkawI+JmVLTmCpz1c6JR3QIDAQABMA0GCSqGSIb3DQEBCwUA
A4IBAQAzSrClRytVW1fzL1rXMw7rYVoyoQ6ar3+e/SYiy5p+uSlEda9M/suNSvnV
HAdoZS5Ka6v4AAsWtc6gfwa91jGzxMr5O+mvcx/VCCwahwzQe9KOm17WDhHfObq0
sWDkXSVrrXiZC7gWkB4tczHQJNJKD3aNzYmlKX6GaCKVdBT3eCgIzMkolvIQdW5r
lexckmoeEI+52UzgSyLFYzw+HLphmvszsYNLo6s6LBqgHWLdjVA1KsqSKGrqaNJd
xdjw3S5PHAgOdwxNgip5Vdg1Rq8MjtoVGSC2fn678SyZYOAqxEeKf1CtkYTLySjz
w0ipBFOo1qLHlaT5lHQxOIAmKsK1
-----END CERTIFICATE-----

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerRequireSSLIsFalseAndStartSSLIsFalse.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="false">
        <keystore>classpath://keystore</keystore>
        <secret>james72laBalle</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        <algorithm>SunX509</algorithm>
    </tls>
    <auth>
        <plainAuthEnabled>true</plainAuthEnabled>
        <requireSSL>false</requireSSL>
    </auth>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/protocols/protocols-imap4/src/test/resources/imapServerSslPKCS12WrongPassword.xml
=====================================================
<imapserver enabled="true">
    <jmxName>imapserver</jmxName>
    <bind>0.0.0.0:0</bind>
    <tls socketTLS="false" startTLS="true">
        <keystore>keystore.p12</keystore>
        <keystoreType>PKCS12</keystoreType>
        <secret>badbad</secret>
        <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
    </tls>
    <gracefulShutdown>false</gracefulShutdown>
</imapserver>

=====================================================
== File: server/Overview.md
=====================================================
Apache James Server
===================

This document is an effort to document the architecture and components that make Apache James. As a new committer to
the project I found out fast that the lack of documentation made development slow. On my quest to solving issues I
decided to document what I understand about Apache James.

Feel free to add/change things if you think it's required.

Server structure: components and services
=========================================

The directory structure is presented bellow. All directories are maven projects and correspond roughly to a component/service.
I'll explain what I mean by 'component' and 'service' bellow.

~~~
|-- app
|-- container
    `-- cli
    `-- core
    `-- lifecycle-api
    `-- filesystem-api
    `-- mailbox-adapter
    `-- spring
    `-- util
|-- data
    `-- data-api
    `-- data-file
    `-- data-jdbc
    `-- data-jpa
    `-- data-ldap
    `-- data-library
|-- dns-service
    `-- dnsservice-api
    `-- dnsservice-dnsjava
    `-- dnsservice-library
|-- karaf
    `-- distribution
     `-- features
     `-- integration
|--mailet
    `-- mailetcontainer-api
    `-- mailetcontainer-camel
    `-- mailets
|-- protocols
    `-- protocols-imap4
    `-- protocols-library
    `-- protocols-lmtp
    `-- protocols-pop3
    `-- protocols-smtp

=====================================================
== File: server/mailet/rate-limiter-redis/redis.properties
=====================================================
redisURL=redis://redis:6379
cluster.enabled=false

=====================================================
== File: server/mailet/rate-limiter-redis/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rate.limiter.redis.RedisRateLimiterModule

=====================================================
== File: server/mailet/rate-limiter-redis/docker-compose.yml
=====================================================
version: '3'

services:

  redis:
    image: redis:7.0.12
    command:
      - "--loglevel"
      - "debug"
  james:
    image: apache/james:memory-latest
    depends_on:
      - redis
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/james-server-rate-limiter-redis-jar-with-dependencies.jar:/root/extensions-jars/james-server-rate-limiter-redis.jar
      - $PWD/extensions.properties:/root/conf/extensions.properties
      - $PWD/redis.properties:/root/conf/redis.properties
      - $PWD/mailetcontainer.xml:/root/conf/mailetcontainer.xml

=====================================================
== File: server/mailet/rate-limiter-redis/README.adoc
=====================================================
= Distributed Rate limiting for Apache James on top of Redis

This package provides distributed rate limiting using Redis as a shared data store.

It reuses work of xref:../rate-limiter/README.adoc[the Rate Limiter extensions] but substitute a Redis implementation
for the underlying rate limiting.

== Running rate limiting with the memory implementation

- 1. Compile this project.
- 2. Place the generated "jar with dependencies" in James `extensions-jars` folder.
- 3. Configure James to use the redis implementation for Rate Limiting by putting the following content within
`extension.properties`:

----
guice.extension.module=org.apache.james.rate.limiter.redis.RedisRateLimiterModule
----

- 4. Provide a `redis.properties` file:

----
redisURL=redis://redis:6379
cluster.enabled=false
----

- 5. Use the rate limiting mailets within `mailetcontainer.xml`

We provide a sample `docker-compose` demonstrating this setup.

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-multipart-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID 926590876
          for <bob@james.james.org>;
          Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.68.1])
	by incoming.james.org (Postfix) with ESMTPS id B39A643
	for <bob@james.james.org>; Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from duc-HP-ProBook-450-G4 (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id F11B13F386
	for <bob@james.org>; Tue, 21 Jan 2020 08:12:55 +0100 (CET)
Date: Tue, 21 Jan 2020 14:12:39 +0700 (ICT)
X-LINAGORA-Copy-Delivery-Done: 1
From: bob@james.org
To: bob@james.org
Message-ID: <423733503.3.1579590775567@duc-HP-ProBook-450-G4>
Subject: UTF-8 8bit multipart
Content-Type: multipart/mixed; 
	boundary="----=_Part_0_238762799.1579590759052"

------=_Part_0_238762799.1579590759052
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

A 8bit encoded body with €uro symbol.
------=_Part_0_238762799.1579590759052
Content-Type: application/octet-stream; name=james-logo.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=james-logo.png

iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW+BNItB2t
NiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhls2SnOj1pYIfN
1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOmyTRpmhNF4Shzg8ud
059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu8D6wNQVQoelZBc6HaUi4
jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZrspsOsjYcHoGgd2I+lyVw1SQA
CpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8O0VzENJxxrxvD7gYeB7NyJLWahpk
Nw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4iyNCU65E51yGNxDUK/veQNE92GuCSBE0a
BDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIgigaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0ns
B0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emID
C4G0z65HEMcB6xRApTupbyFpkKkBK0uBi6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrU
pEEWrblqLDoaGTQJ/WFU2s/SpEE2HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQ
FdMQfS496FeTBpkiwHIEMBXfC0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo
/i5NSSn2sKqLB2+gYOaZMfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o
3r99K+0jzLUG0zQ3ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkC
N4clMJikeO9f3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu7

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/crypted.eml
=====================================================
To: sender@localdomain
From: sender <sender@localdomain>
Subject: test
Message-ID: <7fe4c217-ab73-d149-9bd0-e6aa3aebfc14@localdomain>
Date: Tue, 3 Jan 2017 16:30:03 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
MIME-Version: 1.0
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=

MIAGCSqGSIb3DQEHA6CAMIACAQAxggKHMIICgwIBADBrMGYxCzAJBgNVBAYTAkZSMQ8wDQYD
VQQIDAZGcmFuY2UxDTALBgNVBAcMBEx5b24xETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQL
DAVKYW1lczEUMBIGA1UEAwwLbG9jYWxkb21haW4CAQEwDQYJKoZIhvcNAQEBBQAEggIAjNnW
2EhtDcfG/naGChQPZ2EOiPo5BRabR3dXvLcOPImX97mV51B4sggqpYdUrirD/beRkpbr814i
0LCFbNh3Xm6ojhZGiBHscStNysNjun7MOtUHXs5eDVOthsPVes/YjkHklxtJKH9J7QYwJY/m
L9MgQES2HkALhfqiQDN9UDtn7AE89m70FZfkxJQZSD1NByF7dxiFvhZbd8CFmcV1C0vZRlH9
opZcVg9AkbDytKO+U4FF9/uGmiIQ99Qng0YqcG7abZqwouJ59yxmKTwrggk1+MyJ0NqB1wVP
w2t1C/8hmvMISiij2bidoTTIYCybwvbuM/35POmDJVsvakLMZLG7aHSKvA+Bj+iR/RBgHHvd
c7UdDMvkH0O8tYDsuAW8uh0H8LkvJ/ZWbOsev8DuAVYTm85Zd8d7islgDqfYmjvPeTHqSSgA
sIFdPikRxtetU3JJKRls2BrKV6gM06++/Su+IFvTMaQYRbiQOeGc0ZfGHtlz3BSAeK32tjZu
OrVrxR+BLP4huBqctvcfgjiqtRB5i06wX4q5v/5UNMq9BAtQEDEhERAoXSOWSu3wvocBWtlX
xY5xw34KoFvsztHewakENjgfBG3ysH031UoOIZD0OvHyQ7BGUiu+lM22rj4Pnp6M2W+V1Jjm
OHmV9siU2YsUBE78Lu+hiOcrbydgptswgAYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAiTtikP
UrH82KCABHhPrx30MofZ4L1e9dmHrvHo32h93dFJpTLqG0E3T8y8Y5fySEu7x3jWtZNIXERs
/SJYDeww9tOi4tjV2z+3OCXMQjy7P9Pzb+sekX9GuVo640q7Z/2F6C1hShqyLVa7eJFZK8Na
1JasVj9lst+HD+A0SBA63Z+90bsECIXa4/tJqoBPAAAAAAAAAAAAAA==

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-multipart-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -973333758
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id 8151D43
	for <bob@james.james.org>; Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id D6C653F38C
	for <bob@james.org>; Wed, 22 Jan 2020 04:47:31 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: multipart
Message-ID: <69bd7da2-5b13-de50-bd77-c985f6b0215c@james.org>
Date: Wed, 22 Jan 2020 10:47:17 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: multipart/mixed;
 boundary="------------C3FD44EAF9B6A93E163D9176"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

A quoted-printable encoded body with =E2=82=ACuro symbol.



--------------C3FD44EAF9B6A93E163D9176
Content-Type: image/png;
 name="james-logo.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="james-logo.png"

iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9i
ZSBJbWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW
+BNItB2tNiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhl
s2SnOj1pYIfN1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOm
yTRpmhNF4Shzg8ud059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu
8D6wNQVQoelZBc6HaUi4jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZr
spsOsjYcHoGgd2I+lyVw1SQACpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/dlp_read_mail_with_attachment.eml
=====================================================
To: user2@james.org
From: user@james.org
Subject: dlp subject
Message-ID: <df73c05a-2e18-3e22-040c-9eda6abe02ae@open-paas.org>
Date: Fri, 1 Nov 2019 10:21:39 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------589DDD2515E3B3CC74D74E40"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------589DDD2515E3B3CC74D74E40
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

matchAnother



--------------589DDD2515E3B3CC74D74E40
Content-Type: image/jpeg;
 name="linux.jpeg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="linux.jpeg"

/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBxMSEhIQEBIVFRUXFRcYFhgVFxUVGBUQFRgW
FhcVFxUdHSggGBonGxUWITIlJSkrLi4uFx8/ODMsNygtLisBCgoKDg0OGhAQGjMlICY4Mi83
NSs3LTcyMC8wLTAtLS0tLy0tNS0vLzUtLS0tLS0tLzYvKy0tLS0tLy0tLS0tLf/AABEIAOEA
4QMBIgACEQEDEQH/xAAcAAEAAgIDAQAAAAAAAAAAAAAAce
BgcEBQIDCAH/xABDEAABAwICBwUE
CAMGBwAAAAABAAIDBBEFIQYHEjFBUWETInGBkTJSobEUI0JicoLB0QiS8BUzotLh8SRDY3OD
ssL/xAAaAQEAAgMBAAAAAAAAAAAAAAAABAUBAgMG/8QALBEBAAIBAwIEBQUBAQAAAAAAAAEC
AwQRIQUSEzFBUSIzgZGhYXGx0fBDMv/aAAwDAQACEQMRAD8AvFERAREQEREBERAREQEREBV/
pJrPjildSUELqydtw7YIEUbhlZ8m7eCFia0tK3hww2lkLHubtVEjfaihO5jTwe7PPgLqJ4OI
4WCOJoa0cuJ5k8SgkDcWxqe5NRS0o4BkZlcByJcbX8Fk08mNRi7a6mqD7ssJjv8AmYcj5LCp
q3qtrTVqDMwrWGGytpsUgNHK42Y8kOglP3ZdwO7I8+CnQKr7E6WKrhfTztDmOHHe08HDkQo1
qq0ykpqp+B1zy7Ye5lPI43yHsxk8i3NvjbkguZERAREQEREBERAREQEREBERAREQEREBERAR
EQFh4viDKeCaok9iKN73fhY0uIHM5LMVda+sQMWEyMBzmkjj67Id2h/9APNBTVLiz5nyVMpv
JM90jvPcB0AAHktvTVvVQXDqk7IHJbemrUZTimreq2lNWqD01atrTVqCcU1b1VM6f1t8Tnli
cQWujsRkRJHHGLjqHNUyxPSFtPEXk3duaObuHkqpnmL3Oe43c4kk8yTcow9haD479Ooaary2
nxjbtwmb3Xi3AbQNuhC3qqf+HOuL6CeE7o5zbwe0H9FbCAiIgIiICIiAiIgIiICIiAiIgIiI
CIiAiIgKvNbOCitdQ07yQwPkkkAyLmsa1oF+Fy4eV1YahGsev7FrntNntppXN42s6Nu1bkC4
HyQU5p3oKKSP6XSXDG2EjCS6zSbB4JztfeoPHWDjkVdmi2JMqjNh8kjpw6Fzmuk2S4syZIxx
aAD7bSMuJ5KisRpTFLLCd7HuZ47JIv8ABBt6Ss2nBrLucdwaC4nwAzWzxCSpp2bTqaVo957S
Gjr/AL2Voar9FYqOkbVSgCWVge97v+XHvDB7uWZ5nwCkcOLUtQ4wB4cXA2a9pAe3js7Qs7yQ
3eYayrfK7akNz8AOQC6FL9ZujAoKu0QtDK3bj+6b2cy/GxsfBwUQQXp/DVL3a1nWM/AhXeqX
/hrj+prXf9Rg6+ySroQEREBERAREQEREBERAREQEREBERAREQEREBVXrZqmCtoYJHbLKmGop

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-text-only-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

A 8bit encoded body with €uro symbol.

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/crypted_with_attachment.eml
=====================================================
Return-Path: <sender@localdomain>
MIME-Version: 1.0
Delivered-To: sender@localdomain
Received: from 172.17.0.1 (EHLO [127.0.0.1]) ([172.17.0.1])
          by localdomain (JAMES SMTP Server ) with ESMTP ID 1899632362
          for <sender@localdomain>;
          Thu, 05 Jan 2017 14:37:00 +0000 (UTC)
To: sender@localdomain
From: sender <sender@localdomain>
Subject: with attachment
Message-ID: <6e654951-2131-11df-2949-ce94c5a9f629@localdomain>
Date: Thu, 5 Jan 2017 15:37:00 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=

MIAGCSqGSIb3DQEHA6CAMIACAQAxggKHMIICgwIBADBrMGYxCzAJBgNVBAYTAkZSMQ8wDQYD
VQQIDAZGcmFuY2UxDTALBgNVBAcMBEx5b24xETAPBgNVBAoMCExpbmFnb3JhMQ4wDAYDVQQL
DAVKYW1lczEUMBIGA1UEAwwLbG9jYWxkb21haW4CAQEwDQYJKoZIhvcNAQEBBQAEggIAtA5t
92TBG5Jsqz7C2JNHtV06CwT21xkrjr8muwFBgOAIzIgivVN8Ok5flU8DmqKKv7XOgAnDp9+j
UcS5fFaW1gGpppArIxOmlQdYZYOg+NRUanGbwSHBdL4kAe++oEcD4MI36JIeHj9JZ60dUI5e
8NRcH5r1Nedg43YxC/L/WT2bl1Y0DchXgLs97lfGaC6K3RiSfepN5ZWmE7D1RkjJMeTqx7EY
67apiBp4/JvLhr8+SURtaFmfuW2SXGaRgnANlGzHVwaJvr2IOBxBjxruCbNnw2ifWcwep1rt
6gFxN+9PVaMETu2ra5vf26wr+V739b/yladIFkwQEtKo3teJLI/0OeUHec8Rpz1CA/Eo1unL
mqij4G/u0BoJVSiwJM7ObU/CpJvK4SZ7WKuo9Oz4R9emeDOs2c48ueETwZ+htiN1ibEJ/Joz
tehYMiFOCXdmXEcrJKbz1ZzhfMoZvHx3iSs9s4dQD60U1n/nAbxhq36am1xu+Q1vCnQux3p9
zVGflhGopgYsdF/ewObkZBDiJg9wqP/e2newOXR+N2zUCOUQtRjEyOVrhX6hmj7yWh3npsvb
wbVL3fpaEv0sV5NYVUB6y8SbEC0IjyvYU5HxWBEtRelzNyD0q+UiA9M5InU5p0ODwsz0tCv2
zDgsCBqz58s+Jsn2x3o4e38NZ6DUKTkwgAYJKoZIhvcNAQcBMBQGCCqGSIb3DQMHBAgY++oJ
+tJ9G6CABIIgAI1YI3XeCBqt55XEr8WnaxLB3aTNuAA/S7N78YNEQxT+iglY7GRNRMhF3Hab
Dz12LPycAMlx9dpm69gmnWOUS9/6Td/f+ci9Jw/oJyyBfLmmVhVh5jxusW4h9H01KhZJTYBd
NlqxFtxxdpQ0BunRZO9zBVxui2hxEuKNIF2jH5tIkIctba5fxl83Ot3zJLir+3lXZI8mU/DO
aUqJTrKWEb9suL7Cx8uxCmgWgZDyXRdWyY5SWvHerXu+SCxkorPr/ZF2HnR7BVlooJPAjjpI
GfIBSuB+1p8K0bWtn5v7GCILQYORf9tqEuHxR/f9ywQRK6imQiG5/XUNQyHw3aEed86S+TEM
Za+3uixhuBMIMFVKqihaJLKztbcktrhHN1tqSNV9b4orWwGmzQ/LqdVcI6792uPdDZIf+cIb
5oa6FulJd9y03z0++dtuJ8yOXU2o43nel0kw6CSPiyhopHoGeKGTHNJ2BqvCvI7jRA83Dlxg
/KlCqpWMcU5RL/I5fOjOSHbeU9Ze0p/ozX2ajGR7adNCKHyiBI+D3c4DPGE2zJqi4bIpalJp
AwFWuKnVozbq3TCK2X8OjxZ9AsvhN1dEKbahpCGCg6v4rS0DnRaRMKu7xgzwP1RtOXy8w2nY
5GDVTwbychGrRY2cVLfXwFqYvXmLrSloIxKO1VJf+KM4wl4CirZB9CB71bSJ1E6Mf+5fNB8x
8YtqJzO+7dtS5T99vHY1n7Q/bOSJvCtrSSy8TC97xJxsJDvtpAlYp2dGRjIPuA/Hfiu8Sa8t
OoGWQpUR1YqNB+AnnxaNTz0DasZDROneGndEZY/SzFfCqkUXmkoJQf3FVk8pkcvHTJRbhzqH
bC+reJX1QSpLkT9uLPycb2IcglOdjRkAU2JrIxqqinAVbJ3caTVdZ7+YTb1AxjunFUF5TSrW
y4rhstNBGeoF04x77c1phoAz3QzSXSDW5tTdxlAh807D62iepeLsJMMMBjSjQJ9yCYGfkYyl
1V0u4Ra4aUK9XIjr1OVLw9gg0g9gKZ5KMdI8IQ4BNA7O38xC82cLPvj3OQWSj3+Sf54KTvam
76Iy8LWw0whD/4l13LucUfexOIBY8/tpr7zJpRqwWnpPyWilrQQ22xPtk962B7ugITR6KU/K
oH3NhE67hsW2z9c/2cHt/SD+NiHBN4wvNRUAo0ADJ3wxUEMkEHVPU39Fusi7qw+siD0u7Ys6
4RvdS+wxrbeJN/1ihU2LvwisLbgSlCkVq5J0uSqEqsBAOvw8f9OlNR5BjvbUtv8/eqNr70IA

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/message-text-only-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

A quoted-printable encoded body with =E2=82=ACuro symbol.

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/calendar.eml
=====================================================
Return-Path: <local@localhost.com>
MIME-Version: 1.0
Delivered-To: to@localhost.com
From: User From <fromUser@localhost.com>
Message-ID: <2d0fa16c-4c37-58de-1acc-50b5f6a23a60@localhost.com>
To: User To <toUser@linagora.com>
Date: Wed, 26 Jul 2017 10:34:02 +0200
Subject: Any subject
Content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT

BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20170726T081145Z
LAST-MODIFIED:20170726T083402Z
DTSTAMP:20170726T083402Z
UID:f1514f44bf39311568d6407249cb76c48103fcd1fb398c3c501cb72b2d293f36e04
 b2aab16e43439a608f28671ab7c10e754cbc85ddee4a07fa8cf8f4f7af05bfb502b8f6

SUMMARY:[A CONFIRMER] Call OVH
PRIORITY:5
ORGANIZER;CN=User;X-OBM-ID=id:mailto:userTo@localhost.com
ATTENDEE;CN=User;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
 mailto:user1To@linagora.com
DTSTART:20170727T130000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:2
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
 oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:uuid_value
LOCATION:01.78.14.42.61 / 1586
X-OBM-ALERT;X-OBM-ID=486:600
END:VEVENT
END:VCALENDAR


=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/bad_crypted.eml
=====================================================
Return-Path: <bad@localdomain>
MIME-Version: 1.0
Delivered-To: bad@localdomain
Received: from 172.17.0.1 (EHLO [127.0.0.1]) ([172.17.0.1])
          by HOSTNAME (JAMES SMTP Server ) with ESMTP ID 1133072046
          for <bad@localdomain>;
          Wed, 04 Jan 2017 11:00:49 +0000 (UTC)
To: bad@localdomain
From: bad <bad@localdomain>
Subject: test
Message-ID: <6a568227-58c9-a3bc-f0d4-dd3eeb6bce43@localdomain>
Date: Wed, 4 Jan 2017 12:00:49 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.5.1
Content-Type: application/pkcs7-mime; name="smime.p7m"; smime-type=enveloped-data
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7m"
Content-Description: =?UTF-8?Q?Message_chiffr=c3=a9_S/MIME?=

MIAGCSqGSIb3DQEHA6CAMIACAQAxggKpMIICpQIBADCBjDCBhjELMAkGA1UEBhMCRlIxDzAN
BgNVBAgMBkZyYW5jZTENMAsGA1UEBwwETHlvbjERMA8GA1UECgwITGluYWdvcmExDjAMBgNV
BAsMBUphbWVzMRQwEgYDVQQDDAtsb2NhbGRvbWFpbjEeMBwGCSqGSIb3DQEJARYPYmFkQGxv
Y2FsZG9tYWluAgEBMA0GCSqGSIb3DQEBAQUABIICAI1UxuCdpInNJ0BRSWReJNkt1N+hX+dr
JrRlFRT2BnLcpzumGtVr9uEYC6JIkgAg3NVMqI7E9LQG260NSoQfKgDkBli/x9S5DJMtvqCz
wlOj3uyMKXK1rRKvLlVm3wJJHsO2n2oMRsDkf8cStshGBYsvMObxENt5n6X7HGsa9oF8KpwD
WPwdjN6OvFIkfRW+v5y6SLrjH4sZUm2kSIAdDgrZym3ELgUrtus0LMklMzpRiUAuqgRKXoga
DmX/7TrbdZrZPjQi7Pe4jc1A2i8m9xQFcctgcn2IbCxAV9o8wHkmMAOh70SOijMI+kNeyh6r
PiLcRH18EWhv/kdWcRX41wEGhV9RFQObH1CyOBoy5LJIkfITggo4qz4Pa1Z25LM5ma3ajHu8
6u2TImH/Dx2szQm3FiQ3+zA3WlRQjnN+TbOPvfx0wl+Ve7jDHC0wkW0L5w3c3esUsH1ftk2b
S8hG1RLK3gBSOF0nKPcG0nK7AF0d2sd7FA71ao4PR4de7LE2tABNVDuMWVggwCYL4pfh77VM
kKH7vhA1YWwn7oAo/3ZWoPOWUSJaHJYbb65APjRQ+yVl3ucwl/ok6vrU+YoQZATIcu+kU56e
ZsaJiFyEmv7j9K3sEtjvwkoAYwf5sQmIbtZo+Dux6IisTFNWDQhGSmjfImuoYQ8kLckj2Wx1
wyv+MIAGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIlSYUQVkU/yqggAR44PWcNvdwIMSxYl/t
ZtCd6BGwHPDRGOKAzsYcRuIWwA2wHQljjqTDiORW7uqVDyiEMDPd2nVXtAbjkZN4sujVbh5q
TNbDUOihMiUn+gXcYq4Go6UD4djqx6K7YT6LIHONtP6zgygeS+EfM/9CaJd/7Z/bfuY4Jcko
BAhb/n3N2DrjfgAAAAAAAAAAAAA=

=====================================================
== File: server/mailet/integration-testing/src/main/resources/eml/yahooInvitation.eml
=====================================================
Return-Path: <do-not-reply@yahoo.com>
Date: 23 Jan 2017 12:16:35 +0000
To: raph.ouazana@linagora.com
From: "OBM Linagora" <obmlinagora@yahoo.fr>
Reply-To: "OBM Linagora" <obmlinagora@yahoo.fr> 
MIME-Version: 1.0
X-Yahoo-Newman-Property: calendar-remind
X-Yahoo-Newman-Id: calendar-remind-87cf88d6-0909-4010-99a4-f156b375adbd
Subject: ***SPAM*** =?UTF-8?Q?Invitation=C3=82=C2=A0:?= Test from Yahoo
Content-Type: multipart/mixed;
        boundary="_004_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_"
Message-Id: <20170123121641.2505248D3F@obm3-ui.linagora.dc1>


--_004_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: multipart/alternative;
        boundary="_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_"

--_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: quoted-printable


--_000_CD15A92E9002734AADB6F2075789C4D70108100CB8EDEGLEX07VS01_
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit

<div style="min-width: 300px; max-width: 585px; padding: 15px 15px 15px 15px; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: 13px; ">

    <table style="margin: 0px 0px 0px 0px" cellspacing="0" cellpadding="0">
			<tr>
                <td>
<div style="width:55px;height:55px;border-radius:5px;text-align:center;font-family:Helvetica Neue medium, Helvetica, Arial, sans-serif;color:white;background-color:#400090;">
                        <div style="padding-top:5px;line-height:20px">
                                <div style="font-size:12px;font-weight:lighter;">
                                    JANV.
                                </div>
                                <div style="font-size:32px;font-weight:bolder;font-family:Helvetica Neue bold, Helvetica, Arial, sans-serif;">
                                    27
                                </div>
                        </div>
				    </div>
					</td>
				<td width="40px" />
				<td
					style="font-size: 24px; vertical-align: middle; color: #454545; font-weight: lighter; line-height: 26px;">
                        
    		"Test from Yahoo"
	                        
			

=====================================================
== File: server/mailet/rate-limiter/extensions.properties
=====================================================
guice.extension.module=org.apache.james.rate.limiter.memory.MemoryRateLimiterModule

=====================================================
== File: server/mailet/rate-limiter/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - $PWD/target/james-server-rate-limiter-jar-with-dependencies.jar:/root/extensions-jars/james-server-rate-limiter.jar
      - $PWD/extensions.properties:/root/conf/extensions.properties
      - $PWD/mailetcontainer.xml:/root/conf/mailetcontainer.xml

=====================================================
== File: server/mailet/rate-limiter/README.adoc
=====================================================
= Rate limiting for Apache James

This maven module provide a James extension allowing one to enforce rate limiting for Apache James email processing.

== Running rate limiting with the memory implementation

 - 1. Compile this project.
 - 2. Place the generated "jar with dependencies" in James `extensions-jars` folder.
 - 3. Configure James to use the memory implementation for Rate Limiting by putting the following content within
`extension.properties`:

----
guice.extension.module=org.apache.james.rate.limiter.memory.MemoryRateLimiterModule
----

 - 4. Use the rate limiting mailets within `mailetcontainer.xml`

We provide a sample `docker-compose` demonstrating this setup.

== Mailets

=== PerSenderRateLimit

*PerSenderRateLimit* allows defining and enforcing rate limits for the sender of matching emails.

This allows writing rules like:

 - A sender can send 10 emails per hour
 - A sender can send email to a total of 20 recipients per hour
 - A sender can send 100 MB of emails (total computed taking only the email size into account) per hour
 - A sender can send 200 MB of emails (total computed taking each recipient copies into account) per hour

Depending on its position and the matcher it is being combined with, those rate limiting rules could be applied to
submitted emails, received emails or emitted email being relayed to third parties.

Here are supported configuration parameters:

 - *keyPrefix*: An optional key prefix to apply to rate limiting. Choose distinct values if you specify
 this mailet twice within your `mailetcontainer.xml` file. Defaults to none.
 - *exceededProcessor*: Processor to which emails whose rate is exceeded should be redirected to. Defaults to error.
 Use this to customize the behaviour upon exceeded rate.
 - *duration*: Duration during which the rate limiting shall be applied. Compulsory, must be a valid duration of at least one second. Supported units includes s (second), m (minute), h (hour), d (day).
 - *precision*: Defines the time precision that will be used to approximate the sliding window. A lower duration increases precision but requests more computing power. The precision must be greater than 1 second. Optional, default to duration means fixed window counters. Supported units includes s (second), m (minute), h (hour), d (day).
 - *count*: Count of emails allowed for a given sender during duration. Optional, if unspecified this rate limit is not applied.
 - *recipients*: Count of recipients allowed for a given sender during duration. Optional, if unspecified this rate limit is not applied.
 - *size*: Size of emails allowed for a given sender during duration (each email count one time, regardless of recipient count). Optional, if unspecified this rate limit is not applied. Supported units : B ( 2^0 ), K ( 2^10 ), M ( 2^20 ), G ( 2^30 ), defaults to B.
 - *totalSize*: Size of emails allowed for a given sender during duration (each recipient of the email email count one time). Optional, if unspecified this rate limit is not applied. Supported units : B ( 2^0 ), K ( 2^10 ), M ( 2^20 ), G ( 2^30 ), defaults to B. Note that
   totalSize is limited in increments of 2exp(31) - ~2 billions: sending a 10MB file to more than 205 recipients will be rejected if this parameter is enabled.



=====================================================
== File: server/mailet/mailets/src/main/resources/managesieve.help.txt
=====================================================
managesieve implements the commands defined by RFC 5804 ((http://tools.ietf.org/html/rfc5804) to manage sieve scripts via mail messages. A mail is sent to the managesieve user with the command and parameters in the subject header. Sieve scripts are exchanged as mail attachments.

Consult your mail administrator for the name of the managesieve user configured for your installation.

Users MUST be SMTP authenticated to execute all except the CAPABILITY and HELP commands (see note (1) below).

Commands are executed and answered within the namespace of the sending user as denoted by the sender header of the mail. Thus, a command such as LISTSCRIPTS lists the scripts within namespace of the user identified by the sender header.

The supported commands are summarised in "Command Summary" below. Generally the responses are self describing. For full details see RFC 5804 - Commands (http://tools.ietf.org/html/rfc5804#section-2).

In these descriptions the following keywords apply:

- sieve-name
    The name of a sieve script enclosed in parentheses, eg: "my script". An empty name is not allowed.
- active-sieve-name
    As sieve-name, except an empty name, eg: "", is allowed.
- old-sieve-name
    As sieve-name
- new-sieve-name
    As sieve-name    
- sieve-script
    A mail attachment recognised as a sieve script. This is the first attachment in a mail satisfying any of these characteristics:
        - A MIME type of "application/sieve"
        - A filename with the suffix ".sieve"
        - A filename with the suffix ".siv"
    Returned sieve-scripts always have the MIME type of "application/sieve"

Command Summary
---------------

CAPABILITY
    Subject:
        CAPABILITY
    Attachments: 
        none
Answers the capabilities of the underlying sieve inplementation.

CHECKSCRIPT
    Subject:
        CHECKSCRIPT
    Attachments: 
        sieve-script
Verifies the attached sieve-script without storing it on the server.

DELETESCRIPT
    Subject: 
        DELETESCRIPT sieve-name
    Attachments: 
        none
Deletes the named sieve script.

=====================================================
== File: server/mailet/mailets/src/test/resources/noReplyTo.eml
=====================================================
Return-Path: <root-bounces@listes.apache.org>
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
MIME-Version: 1.0
From: "Content-filter at spam.apache.org" <postmaster@apache.org>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.apache.org>
Message-ID: <VASs-IZaXqmZao@spam.apache.org>
Subject: Original subject
X-BeenThere: root@listes.apache.org
Errors-To: root-bounces@listes.apache.org
Sender: "root" <root-bounces@listes.apache.org>
Reply-To: <>

This is a multi-part message in MIME format...

------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

No viruses were found.

Content type: Unchecked
Internal reference code for the message is 12583-16/Ss-IZaXqmZao

According to a 'Received:' trace, the message apparently originated at:
  [198.252.153.129], [127.0.0.1] localhost [127.0.0.1] Authenticated sender:
  quentin.h

Return-Path: <quentin.h@apache.org>
From: Quentin <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Subject: XYZ
Not quarantined.

The message WILL BE relayed to:
<xxx@apache.org>


------------=_1433322346-12583-0
Content-Type: text/rfc822-headers; name="header"
Content-Disposition: inline; filename="header"
Content-Transfer-Encoding: 7bit
Content-Description: Message header section

Return-Path: <quentin.h@apache.org>
Message-ID: <556EC361.6000308@apache.org>
Date: Wed, 03 Jun 2015 11:05:37 +0200
From: Quentin <quentin.h@apache.org>
MIME-Version: 1.0

=====================================================
== File: server/mailet/mailets/src/test/resources/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
	by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
	Wed,  3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
	by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
	t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
	h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
	 List-Subscribe:From;
	b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
	 EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
	 4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
	by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
 by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
 for <root@listes.minet.net>; Wed,  3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
 by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
 for <root@listes.minet.net>; Wed,  3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: Original subject
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>

This is a multi-part message in MIME format...

------------=_1433322346-12583-0
Content-Type: text/plain; charset="UTF-8"
Content-Disposition: inline
Content-Transfer-Encoding: 7bit

No viruses were found.

=====================================================
== File: server/mailet/mailets/src/test/resources/eml/gmail.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?=
 <tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	Antoine Duprat <duprat@gmail.com>
Répondre à : 	antduprat@gmail.com
Pour : 	aduprat@linagora.com




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>

=====================================================
== File: server/mailet/mock-smtp-server/README.adoc
=====================================================
= James Mock SMTP server

This is our custom made Mock SMTP server that we use for some of our tests in James.

== Dockerized Mock SMTP server

Compile and build the image into a tarball with maven:

    $ mvn compile jib:buildTar

*Note* : You can add the option '-DskipTests' if you want to skip tests

After Jib created the image, you can load it into Docker with:

    $ docker load --input target/jib-image.tar

You can alternatively directly build your image directly to a Docker daemon. To to so:

    $ mvn compile jib:dockerBuild

Then run it with:

    $ docker run --rm -p 25:25 -p 8000:8000 linagora/mock-smtp-server

Where ports:

* 25 : SMTP
* 8000 : HTTP interface for setting mock SMTP server behavior

Then you can use the http endpoints. Let's demonstrate them via the standard unix `curl` command.

Right after startup, the server should have no emails, no behaviors.

----
$ curl -X GET localhost:8000/smtpBehaviors
[]
$ curl -X GET localhost:8000/smtpMails
[]
$ curl -X GET localhost:8000/smtpMailsCount
0
$
----

Given you send an email on port 25, the counter updates to 1 and you're able to observe the email
via the smtpMails endpoint.

----
$ cat mail.txt
From: Alice
To: Bob

=====================================================
== File: server/mailet/mock-smtp-server/src/main/jib/logback.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} %highlight([%-5level]) %logger{15} - %msg%n%rEx</pattern>
                        <immediateFlush>false</immediateFlush>
                </encoder>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
        </root>

        <logger name="org.apache.james.mock.smtp.server" level="DEBUG"/>
        <logger name="org.subethamail.smtp" level="DEBUG"/>

</configuration>

=====================================================
== File: server/mailet/mock-smtp-server/src/test/java/org/apache/james/mock/smtp/server/ConfigurationClientTest.java
=====================================================
/****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  The ASF licenses this file   *
 * to you under the Apache License, Version 2.0 (the            *
 * "License"); you may not use this file except in compliance   *
 * with the License.  You may obtain a copy of the License at   *
 *                                                              *
 *   http://www.apache.org/licenses/LICENSE2.0                 *
 *                                                              *
 * Unless required by applicable law or agreed to in writing,   *
 * software distributed under the License is distributed on an  *
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
 * KIND, either express or implied.  See the License for the    *
 * specific language governing permissions and limitations      *
 * under the License.                                           *
 ****************************************************************/

package org.apache.james.mock.smtp.server;

import static org.apache.james.mock.smtp.server.Fixture.BEHAVIOR_LIST;
import static org.assertj.core.api.Assertions.assertThat;

import org.apache.james.core.MailAddress;
import org.apache.james.mock.smtp.server.Fixture.MailsFixutre;
import org.apache.james.mock.smtp.server.model.Mail;
import org.apache.james.mock.smtp.server.model.SMTPExtension;
import org.apache.james.mock.smtp.server.model.SMTPExtensions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.testcontainers.shaded.com.google.common.collect.ImmutableList;

class ConfigurationClientTest {
    private ConfigurationClient testee;
    private HTTPConfigurationServer.RunningStage server;
    private SMTPBehaviorRepository behaviorRepository;
    private ReceivedMailRepository mailRepository;

    @BeforeEach
    void setUp() {
        behaviorRepository = new SMTPBehaviorRepository();
        mailRepository = new ReceivedMailRepository();
        server = HTTPConfigurationServer.onRandomPort(behaviorRepository, mailRepository)
            .start();

        testee = ConfigurationClient.fromServer(server);
    }


=====================================================
== File: server/container/filesystem-api/src/test/resources/classpathTest.txt
=====================================================
Non empty

=====================================================
== File: server/container/filesystem-api/src/test/resources/class path Test.txt
=====================================================
Non empty

=====================================================
== File: server/container/core/src/test/resources/JAMES-1593.eml
=====================================================
Return-Path: <c@yahoo.com>
Received: from 10.6.1.81 (EHLO ws1.comp.us/127.0.0.1) ([10.6.1.81])
          by ws1.comp.us (JAMES SMTP Server ) with ESMTP ID 273836343
          for <s@yahoo.com>;
          Fri, 10 Jul 2015 19:30:01 +0000 (UTC)
Delivered-To: d@f.com
Received: from 10.6.1.53 (EHLO egate3.comp.us) ([10.6.1.53])
          by ws1.comp.us (JAMES SMTP Server ) with ESMTP ID 18268234
          for <d@f.com>;
          Wed, 08 Jul 2015 19:35:41 +0000 (UTC)
Received: from nm2-vm2.bullet.mail.ne1.yahoo.com (nm2-vm2.bullet.mail.ne1.yahoo.com [98.138.91.18])
	(using TLSv1 with cipher RC4-SHA (128/128 bits))
	(No client certificate requested)
	by egate3.comp.us (Postfix) with ESMTPS id 5CA816007B
	for <d@f.com>; Wed,  8 Jul 2015 19:35:28 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1436384127; bh=FSXIN3+naGGGcYCXqSW4VRdVxpAgX6l36HzbsAmcUMs=; h=To:Date:From:Subject:From:Subject; b=aoCPczTdZENebjurWW5X8+IOGzgTp2AJ2TF0Cg5Zr0wCGPnNa3pzLN7XtpcCkQAaHpzpvSn/WLxVosJiV9ylnDyFTJg/i+ik1937k2LTaCP7Dc9bjqLSrZAjFd+u2YalXanSOXrKIz6L05xrwEeIgBV+IvarvleEZ4/mSRtAwKJJ2w8nZOKX1hxJ1uN/rYMUAhNaNnafHKZ9ZTj6Bb2PWQLKylHy98dq48PJYOe757Ns3I5DhxyS1swVvuNv7ROj1ix+wIK5vgchMliF5C50IAF4HZ9GZwlBCSUUV6C0fiyp7p2MbtDO1cdNGzUUAyrSt9UiwBX/OyIkPcya7Bzxjg==
Received: from [98.138.226.176] by nm2.bullet.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
Received: from [98.138.226.56] by tm11.bullet.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
Received: from [127.0.0.1] by smtp207.mail.ne1.yahoo.com with NNFMP; 08 Jul 2015 19:35:27 -0000
X-Yahoo-Newman-Id: 948689.21253.bm@smtp207.mail.ne1.yahoo.com
Message-ID: <948689.21253.bm@smtp207.mail.ne1.yahoo.com>
X-Yahoo-Newman-Property: ymail-5
X-YMail-OSG: PKdW3f0VM1mqo5bJtNcAn9nrmSrO6somPjt3dkTFZefq.k9
 8mtErk2hfr0pzo.g4.3D1TYDy1yPA52CEt1K7yWtY4G54.wVaqrTbNsp1SHi
 YOVrR_WNprH82OItTUXOWs4b6tIZjrnQwhvgiYNQ0v0y.5mavYexI7V7vHjE
 AQau2gFnHDMI4VkGKk5VtkVYo7m9kyLljxFn6JBpDfm2BHCQ6nB44vr_KEGb
 fu4siLPPBgE3DD2x1jPSgZuePniFPh94ohDe_ZDsbYXPM4Fy1udmEuial5Me
 lrgOmh8mjeybAFdj_y4kbpHb.xjlxg_AgrZEY5LjdL2_xp8JljEZyvKo5ccA
 CTVQSOEe5m8qlhRIWMGLqqp3DLOBwgQ4lKfOXyt3.MaFgClF1yPm5aSFxG.g
 O52rSXRe9QwcFLgeLk3U6h2fuUGnH4Ejw75ni0rPKFEBQn9y0X3vVtjgQPbc
 K3fZUXI48vD3IjhR4ZdnoRfuJDmdgjmV_MbGVQ_IglrFNWe5dKb0WmCr455A
 E.B_E_RcROdsq06R72Be7Nap1ySUo
X-Yahoo-SMTP: P5ZpI6KswBDOCixizgOFZTojz9DhLg.Dm91rJ0th
To: <d@f.com>
Date: Wed, 8 Jul 2015 12:35:24 -0700
From: =?UTF-8?B?QmV2ZXJseSBIaWxscyBNRA0==?=  <c@yahoo.com>
Subject: =?ISO-8859-1?Q?How=20to=20lift=20saggy=20skin,=20without=20surgery=20(Video)?=
Msg-Id: <993367577.OlyOp7onoD1vcPAHU+z/IXX2rD.secm@nycaptrentals.com>
MIME-Version: 1.0
Content-Type: multipart/alternative;
              boundary="----=_NextPart_000_0000_047F21AD.5CEFB1C0"
Content-Transfer-Encoding: "base64"
X-comp-Information: Please contact administrator@comp.com for more information
X-comp-ID: 5CA816007B.A1BA5
X-comp-general: Clean
X-comp-SpamCheck: spam, SpamAssassin (not cached, score=12.4,
	required 3, autolearn=disabled, BASE64_LENGTH_79_INF 2.02,
	BODY_URI_ONLY 1.00, DKIM_ADSP_CUSTOM_MED 0.00, DKIM_SIGNED 0.10,
	FREEMAIL_FROM 0.00, FROM_EXCESS_BASE64 0.10, HTML_IMAGE_ONLY_12 1.63,
	HTML_MESSAGE 0.00, HTML_SHORT_LINK_IMG_1 0.14, MIME_HTML_MOSTLY 0.00,

=====================================================
== File: server/container/core/src/test/resources/mail-containing-unicode-characters.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

Unicode €uro symbol.

=====================================================
== File: server/container/guice/memory/README.md
=====================================================
# James Memory server

In order to build both the ZIP and docker packaging, run:

```
mvn clean install -DskipTests
```

## ZIP distribution

Available in `target` directory, the ZIP include detailed instructions.

## Docker distribution

To import the image locally:

```
docker image load -i target/jib-image.tar
```

Then run it:

```
docker run apache/james:memory-latest
```


For security reasons you are required to generate your own keystore, that you can mount into the container via a volume:

```
keytool -genkey -alias james -keyalg RSA -keystore keystore
docker run -v $PWD/keystore:/root/conf/keystore apache/james:cassandra-latest
```

Use the [JAVA_TOOL_OPTIONS environment option](https://github.com/GoogleContainerTools/jib/blob/master/docs/faq.md#jvm-flags) 
to pass extra JVM flags. For instance:

```
docker run -e "JAVA_TOOL_OPTIONS=-Xmx500m -Xms500m" apache/james:memory-latest
```

[Glowroot APM](https://glowroot.org/) is packaged as part of the docker distribution to easily enable valuable performances insights.
Disabled by default, its java agent can easily be enabled:

```
docker run -e "JAVA_TOOL_OPTIONS=-javaagent:/root/glowroot.jar" apache/james:memory-latest
```
The [CLI](https://james.apache.org/server/manage-cli.html) can easily be used:

```

=====================================================
== File: server/container/guice/configuration/src/test/resources/b.properties
=====================================================
prop=value2

=====================================================
== File: server/container/guice/configuration/src/test/resources/a.properties
=====================================================
prop=value1
keyByList=value1, value2, value3, value4, value5
thisIsEmpty=

=====================================================
== File: server/container/guice/configuration/src/test/resources/env.properties
=====================================================
keyByEnv=${env:PROPERTIES_PROVIDER_ENV_VARIABLES}

=====================================================
== File: server/container/guice/common/src/test/resources/eml/mail-containing-unicode-characters.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

Unicode €uro symbol.

=====================================================
== File: server/container/guice/common/src/test/resources/test.properties
=====================================================
# Configuration file for cassandra mailbox

cassandra.nodes=127.0.0.1:9142
cassandra.keyspace=apache_james
cassandra.replication.factor=1

=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-two.properties
=====================================================
extensions.routes=org.apache.custom.webadmin.CustomRoute,org.apache.custom.webadmin.AnotherCustomRoute

=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-one.properties
=====================================================
extensions.routes=org.apache.custom.webadmin.CustomRoute

=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-empty.properties
=====================================================
extensions.routes=

=====================================================
== File: server/container/guice/protocols/webadmin/src/test/resources/webadmin-none.properties
=====================================================

=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-empty.properties
=====================================================
guice.extension.module=

=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-two.properties
=====================================================
guice.extension.module=org.apache.custom.extensions.CustomExtension,org.apache.custom.extension.AnotherCustomExtension

=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-none.properties
=====================================================

=====================================================
== File: server/container/guice/utils/src/test/resources/extensions-one.properties
=====================================================
guice.extension.module=org.apache.custom.extensions.CustomExtension

=====================================================
== File: server/container/guice/testing/custom-mailets/README.md
=====================================================
# How to

This project is used to generate custom mailet / matcher used in unit tests of the underlying Guice project.

This associated JAR is in the test resources.

Run:

```
mvn clean install
```

And overwrite it in *server/container/guice/mailet/src/test/resources/recursive/extensions-jars/\*.jar* to update it.

=====================================================
== File: server/container/guice/cassandra/src/test/resources/modules/mailbox/cassandra.properties
=====================================================
mailbox.max.retry.acl=1
mailbox.max.retry.modseq=2
mailbox.max.retry.uid=3
mailbox.max.retry.message.flags.update=4
mailbox.max.retry.message.id.flags.update=5
fetch.advance.row.count=6
chunk.size.message.read=7
chunk.size.expunge=8
mailbox.blob.part.size=9
attachment.v2.migration.read.timeout=10
message.attachmentids.read.timeout=11

=====================================================
== File: server/container/mailbox-jmx/src/test/resources/eml/frnog.eml
=====================================================
Message-ID: <556D7ED7.2090108>
Date: Tue, 2 Jun 2015 12:00:55 +0200
From: sender <sender@domain.com>
MIME-Version: 1.0
To: <list@james.org>
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 8bit

Bonjour


Je cherche un partenaire.

Merci d'avance !


Cordialement,

=====================================================
== File: server/data/data-library/src/test/resources/sieve/my_sieve
=====================================================
require ["reject"];

if size :over 100K {
   reject "Email too big";
}

=====================================================
== File: server/data/data-library/src/test/resources/cucumber/rewrite_tables.feature
=====================================================
Feature: Rewrite Tables tests

  @readonly
  Scenario: rewrite tables should be empty when none defined
    Then mappings should be empty

# Regexp mapping

  Scenario: stored regexp mapping should be retrieved when one mapping matching
    Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
    Then mappings for user "test" at domain "localhost" should contain only "user@localhost"

  Scenario: stored regexp mapping should be retrieved when two mappings matching
    Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
    And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
    Then mappings for user "test" at domain "localhost" should contain only "user@localhost, user2@localhost"

  Scenario: stored regexp mapping should not be retrieved by another user
    Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
    And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
    Then mappings for user "test2" at domain "localhost" should be empty

  Scenario: removing a stored regexp mapping should work
    Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
    And store "tes(.+)@localhost:user2@localhost" regexp mapping for user "test" at domain "localhost"
    When user "test" at domain "localhost" removes a regexp mapping "tes(.+)@localhost:user2@localhost"
    Then mappings for user "test" at domain "localhost" should contain only "user@localhost"

  Scenario: storing an invalid regexp mapping should not work
    When store an invalid ".*):" regexp mapping for user "test" at domain "localhost"
    Then a "InvalidRegexException" exception should have been thrown

  Scenario: storing a wrong formatted regexp mapping should not be retrieved
    Given store "(.*)@localhost" regexp mapping for user "test" at domain "localhost"
    Then mappings for user "test" at domain "localhost" should be empty

  Scenario: chained stored regexp mapping should be retrieved when two levels
    Given store "(.*)@localhost:user@localhost" regexp mapping for user "test" at domain "localhost"
    And store "use(.+)@localhost:final@localhost" regexp mapping for user "user" at domain "localhost"
    Then mappings for user "test" at domain "localhost" should contain only "final@localhost"

# Address mapping

  Scenario: stored address mapping should be retrieved when one mapping matching
    Given store "test@localhost2" address mapping for user "test" at domain "localhost"
    Then mappings for user "test" at domain "localhost" should contain only "test@localhost2"

  Scenario: stored address mapping should be retrieved when two mappings matching
    Given store "test@localhost2" address mapping for user "test" at domain "localhost"
    And store "test@james" address mapping for user "test" at domain "localhost"

=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-enableVirtualHosting.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
                 ldapHost="ldap://myldapserver:389"
                 principal="uid=ldapUser,ou=system"
                 credentials="password"
                 userBase="ou=People,o=myorg.com,ou=system"
                 userIdAttribute="uid"
                 userObjectClass="person">
    <enableVirtualHosting>true</enableVirtualHosting>
</usersrepository>

=====================================================
== File: server/data/data-ldap/src/test/resources/invalid/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit

dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
userPassword: secret
description: James user

=====================================================
== File: server/data/data-ldap/src/test/resources/localpartLogin/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit

dn: ou=empty, dc=james,dc=org
ou: empty
objectClass: organizationalUnit

dn: ou=whatever, dc=james,dc=org
ou: whatever
objectClass: organizationalUnit

dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user

dn: uid=james-user-app1, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user-app1
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user App 1

dn: uid=james-user-app2, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user-app2
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user App 2

dn: uid=alice, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: alice
cn: alice-cn
sn: alice-sn
mail: alice@james.org
userPassword: secret
description: Alice user

dn: uid=alice-app1, ou=people, dc=james,dc=org
objectClass: inetOrgPerson

=====================================================
== File: server/data/data-ldap/src/test/resources/ldif-files/populate.ldif
=====================================================
dn: ou=people, dc=james,dc=org
ou: people
objectClass: organizationalUnit

dn: ou=empty, dc=james,dc=org
ou: empty
objectClass: organizationalUnit

dn: ou=whatever, dc=james,dc=org
ou: whatever
objectClass: organizationalUnit

dn: uid=james-user, ou=people, dc=james,dc=org
objectClass: inetOrgPerson
uid: james-user
cn: james-user
sn: james-user
mail: james-user@james.org
userPassword: secret
description: James user

dn: uid=bob, ou=whatever, dc=james,dc=org
objectClass: inetOrgPerson
uid: bob
cn: bob
sn: bob
mail: bob@extra.org
userPassword: secret
description: bob user

=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-supportsVirtualHosting.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
                 ldapHost="ldap://myldapserver:389"
                 principal="uid=ldapUser,ou=system"
                 credentials="password"
                 userBase="ou=People,o=myorg.com,ou=system"
                 userIdAttribute="uid"
                 userObjectClass="person">
    <supportsVirtualHosting>true</supportsVirtualHosting>
</usersrepository>

=====================================================
== File: server/data/data-ldap/src/test/resources/usersrepository-default.xml
=====================================================
<usersrepository name="LocalUsers" class="org.apache.james.user.ldap.ReadOnlyUsersLDAPRepository"
                 ldapHost="ldap://myldapserver:389"
                 principal="uid=ldapUser,ou=system"
                 credentials="password"
                 userBase="ou=People,o=myorg.com,ou=system"
                 userIdAttribute="uid"
                 userObjectClass="person">
</usersrepository>

=====================================================
== File: server/data/data-jpa/src/test/resources/log4j.properties
=====================================================
log4j.rootLogger=WARN, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

=====================================================
== File: server/data/data-file/src/test/resources/org/apache/james/mailrepository/testdata/Inbox
=====================================================
From - Sat Sep 16 14:01:26 2006
X-Account-Key: account4
X-UIDL: Mail1158408075937-0
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Message-ID: <12617107.11158408076390.JavaMail.maurer@byteacti-757792>
MIME-Version: 1.0
Return-Path: <nm@localhost>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Delivered-To: test@localhost
Received: from localhost ([127.0.0.1])
          by byteacti-757792 (JAMES SMTP Server 3.0-dev) with SMTP ID 842
          for <test@localhost>;
          Sat, 16 Sep 2006 14:01:14 +0200 (CEST)
Date: Sat, 16 Sep 2006 14:01:14 +0200 (CEST)
From: nm@localhost
invalid
test: test
test



From - Sat Sep 16 14:02:40 2006
X-Account-Key: account4
X-UIDL: Mail1158408158171-1
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
Message-ID: <3534544.31158408158203.JavaMail.maurer@byteacti-757792>
MIME-Version: 1.0
Return-Path: <nm@localhost>
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Delivered-To: test@localhost
Received: from localhost ([127.0.0.1])
          by byteacti-757792 (JAMES SMTP Server 3.0-dev) with SMTP ID 317
          for <test@localhost>;
          Sat, 16 Sep 2006 14:02:38 +0200 (CEST)
Date: Sat, 16 Sep 2006 14:02:38 +0200 (CEST)
From: nm@localhost
testmail
test: test

test


=====================================================
== File: server/data/data-jmap/src/test/java/org/apache/james/jmap/api/upload/UploadUsageRepositoryContract.scala
=====================================================
package org.apache.james.jmap.api.upload

import org.apache.james.core.Username
import org.apache.james.core.quota.QuotaSizeUsage
import org.apache.james.jmap.api.upload.UploadUsageRepositoryContract.USER_NAME
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import reactor.core.publisher.Mono
import reactor.core.scala.publisher.SMono

object UploadUsageRepositoryContract {
  val USER_NAME = Username.of("james@abc.com")
}

trait UploadUsageRepositoryContract {
  def uploadUsageRepository: UploadUsageRepository

  def resetCounterToZero(): Unit = {
    Mono.from(uploadUsageRepository.resetSpace(USER_NAME, QuotaSizeUsage.size(0))).block
  }

  @Test
  def increaseSpaceShouldIncreaseSuccessfully(): Unit = {
    SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(100))).block()
    val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
    assertThat(expected.asLong()).isEqualTo(100)
  }

  @Test
  def decreaseSpaceShouldDecreaseSuccessfully(): Unit = {
    SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(200))).block()
    SMono.fromPublisher(uploadUsageRepository.decreaseSpace(USER_NAME, QuotaSizeUsage.size(100))).block()
    val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
    assertThat(expected.asLong()).isEqualTo(100)
  }

  @Test
  def resetSpaceShouldResetSuccessfully(): Unit = {
    SMono.fromPublisher(uploadUsageRepository.increaseSpace(USER_NAME, QuotaSizeUsage.size(200))).block()
    SMono.fromPublisher(uploadUsageRepository.resetSpace(USER_NAME, QuotaSizeUsage.size(99))).block()
    val expected = SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(USER_NAME)).block()
    assertThat(expected.asLong()).isEqualTo(99)
  }

  @Test
  def getSpaceUsageShouldReturnZeroWhenRecordDoesNotExist(): Unit = {
    assertThat(SMono.fromPublisher(uploadUsageRepository.getSpaceUsage(Username.of("aaa"))).block().asLong()).isEqualTo(0)
  }

}

=====================================================
== File: server/grafana-reporting/prometheus-datasource/README.md
=====================================================
# Dashboards for James on top of Prometheus / Grafana

The boards are slightly different than what we used to do with ES reporter, as we 
count now on Prometheus to scrap metrics from the /metrics endpoint exposed from James.

This is just a rough conversion for starters, it will likely need more refining over time.

# Grafana reporting

This is a collection of Grafana dashboards to display James metrics.

## Expose metrics for Prometheus collection

To enable James metrics, add ``extensions.routes`` to [webadmin.properties]( https://github.com/apache/james-project/blob/master/server/apps/distributed-app/docs/modules/ROOT/pages/configure/webadmin.adoc) file:
```
extensions.routes=org.apache.james.webadmin.dropwizard.MetricsRoutes
```

## Configure Prometheus Data source
You need to set up [Prometheus](https://prometheus.io/docs/prometheus/latest/getting_started/) first to scrape James metrics.\
Add Apache James WebAdmin Url or IP address to `prometheus.yaml` configuration file.

```
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'WebAdmin url Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['james-webamin-url']
  - job_name: 'WebAdmin IP Example'
    scrape_interval: 5s
    metrics_path: /metrics
    static_configs:
      - targets: ['192.168.100.10:8000']      
```   
For Kubernetes deployment, we recommend using Prometheus `ServiceMonitor` to collect James metrics through James Webadmin service. Please see our James Helm-chart for more information.

## Connect Data source to Grafana

Add Prometheus data source to Grafana.\
You can do this either from [Grafana UI](https://prometheus.io/docs/visualization/grafana/) or from a [configuration file](https://grafana.com/docs/grafana/latest/datasources/prometheus/). 

The following `docker-compose.yaml` will help you install a simple Prometheus/ Grafana stack :

```
version: '3'
#Metric monitoring
  grafana:
    image: grafana/grafana:latest

=====================================================
== File: server/grafana-reporting/es-datasource/README.md
=====================================================
# Grafana reporting

This is a collection of Grafana dashboards to display James metrics.

## Run Grafana 

The following command allow you to run a fresh grafana server :

```
docker run -i -p 3000:3000 grafana/grafana
```

## Configure a data source
Once running, you need to set up an [ElasticSearch data-source](https://grafana.com/docs/grafana/latest/datasources/elasticsearch/).
You can do this either from UI or from a configuration file.

## Setting up via UI
 - name it DS_JAMES_ES
 - select proxy mode
 - Select version 6.x of ElasticSearch
 - make the URL point your ES node
 - Specify the index name. By default, it should be :

```
[james-metrics-]YYYY-MM
```

## Setting up using a configuration file

Look up file grafana-datasource.yaml from Grafana and add following data source into it:

```
apiVersion: 1

datasources:
  - name: DS_JAMES_ES
    type: elasticsearch
    access: proxy
    database: "[james-metrics-]YYYY-MM"
    url: http://elasticsearch:9200
    version: 6
    editable: true
    jsonData:
      interval: Daily
      timeField: "@timestamp"
```

## Getting dashboards

Import the different dashboard JSON files in this directory to Grafana via UI

=====================================================
== File: mailet/icalendar/src/test/resources/ics_in_header.eml
=====================================================
MIME-Version: 1.0
Content-Type: multipart/mixed; 
	boundary="----=_Part_80_888179120.1536742699653"
From: Alice <alice@linagora.com>
Message-ID: <82eb227b-d3e1-3d7a-3220-8a1b4e96a85b@linagora.com>
To: Bob <bob@linagora.com>
Date: Wed, 12 Sep 2018 10:58:18 +0200
Subject: Event Invitation Reply (Accepted):
 Point Produit

------=_Part_80_888179120.1536742699653
BEGIN:VCALENDAR
PRODID:-//Mozilla.org/NONSGML Mozilla Calendar V1.1//EN
VERSION:2.0
METHOD:REPLY
BEGIN:VEVENT
CREATED:20180911T144134Z
LAST-MODIFIED:20180912T085818Z
DTSTAMP:20180912T085818Z
UID:f1514f44bf39311568d64072945fc3b2973debebb0d550e8c841f3f0604b2481e047fe
 b2aab16e43439a608f28671ab7c10e754cbbe63441a01ba232a553df751eb0931728d67672
 
SUMMARY:Point Produit
PRIORITY:5
ORGANIZER;CN=Bob;X-OBM-ID=348:mailto:bob@linagora.com
ATTENDEE;CN=Alice;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL;X-OBM-ID=810:
 mailto:alice@linagora.com
DTSTART:20180919T123000Z
DURATION:PT1H
TRANSP:OPAQUE
SEQUENCE:0
X-LIC-ERROR;X-LIC-ERRORTYPE=VALUE-PARSE-ERROR:No value for X property. Rem
 oving entire property:
CLASS:PUBLIC
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Téléphone
END:VEVENT
END:VCALENDAR
Content-class: urn:content-classes:calendarmessage
Content-type: text/calendar; method=REPLY; charset=UTF-8
Content-transfer-encoding: 8BIT
Content-Disposition: attachment


------=_Part_80_888179120.1536742699653--

=====================================================
== File: mailet/icalendar/src/test/resources/ics/no_event.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_dtstamp.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTART:20170111T090000Z
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
 b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
 DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
 X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
 X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
 OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
 ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
 S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/ics_with_error.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTAMP:20170106T115036Z
DTSTART;TZID="Pacific Time (US & Canada),Tijuana":20041011T223000
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
VEVENT:62
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
 b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
 DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
 X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
 X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
 OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
 ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
 S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_sequence.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
 com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
 b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_2.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
 com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
 b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_uid.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
 com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483703436
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
CREATED:20170106T115035Z
LAST-MODIFIED:20170106T115036Z
DTSTAMP:20170106T115036Z
DTSTART:20170111T090000Z
DURATION:PT1H30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint planning #23
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=128;CN=Raphael OUAZANA:MAILTO:ouazana@linagora.com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:Hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d640727cff54e819573448d09d2e5677987ff29caa01a9e047fe
 b2aab16e43439a608f28671ab7c10e754ce92be513f8e04ae9ff15e65a9819cf285a6962bc
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Matthieu EXT_BAECHLER;PARTSTAT=NEE
 DS-ACTION;X-OBM-ID=302:MAILTO:baechler@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Laura ROYET;PARTSTAT=NEEDS-ACTION;
 X-OBM-ID=723:MAILTO:royet@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Raphael OUAZANA;PARTSTAT=ACCEPTED;
 X-OBM-ID=128:MAILTO:ouazana@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Luc DUZAN;PARTSTAT=NEEDS-ACTION;X-
 OBM-ID=715:MAILTO:duzan@linagora.com
ATTENDEE;CUTYPE=RESOURCE;CN=Salle de reunion Lyon;PARTSTAT=ACCEPTED;X-OBM-
 ID=66:MAILTO:noreply@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Antoine DUPRAT;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=453:MAILTO:duprat@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Benoît TELLIER;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=623:MAILTO:tellier@linagora.com
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Quynh Quynh N NGUYEN;PARTSTAT=NEED
 S-ACTION;X-OBM-ID=769:MAILTO:nguyen@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/icalendar/src/test/resources/ics/meeting_without_method.ics
=====================================================
BEGIN:VCALENDAR
PRODID:-//Aliasource Groupe LINAGORA//OBM Calendar 3.2.1-rc2//FR
CALSCALE:GREGORIAN
X-OBM-TIME:1483439571
VERSION:2.0
BEGIN:VEVENT
CREATED:20170103T103250Z
LAST-MODIFIED:20170103T103250Z
DTSTAMP:20170103T103250Z
DTSTART:20170120T100000Z
DURATION:PT30M
TRANSP:OPAQUE
SEQUENCE:0
SUMMARY:Sprint Social #3 Demo
DESCRIPTION:
CLASS:PUBLIC
PRIORITY:5
ORGANIZER;X-OBM-ID=468;CN=Attendee 1:MAILTO:attendee1@linagora.
 com
X-OBM-DOMAIN:linagora.com
X-OBM-DOMAIN-UUID:02874f7c-d10e-102f-acda-0015176f7922
LOCATION:hangout
CATEGORIES:
X-OBM-COLOR:
UID:f1514f44bf39311568d64072ac247c17656ceafde3b4b3eba961c8c5184cdc6ee047fe
 b2aab16e43439a608f28671ab7c10e754c301b1e32001ad51dd20eac2fc7af20abf4093bbe
ATTENDEE;CUTYPE=INDIVIDUAL;RSVP=TRUE;CN=Attendee 2;PARTSTAT=NEEDS-ACTI
 ON;X-OBM-ID=348:MAILTO:attendee2@linagora.com
END:VEVENT
END:VCALENDAR

=====================================================
== File: mailet/standard/src/test/resources/mime/sendToRemoteHttp.mime
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	Antoine Duprat <duprat@gmail.com>
Répondre à : 	antduprat@gmail.com
Pour : 	aduprat@linagora.com




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-forward-container"><br>

=====================================================
== File: mailet/standard/src/test/resources/mime/gmail.mime
=====================================================
Return-Path: <aduprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (aduprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	Antoine Duprat <duprat@gmail.com>
Répondre à : 	antduprat@gmail.com
Pour : 	aduprat@linagora.com




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-forward-container"><br>

=====================================================
== File: mailet/standard/src/test/resources/mime/headerFolded.mime
=====================================================
Return-Path: <duprat@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (duprat@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_TELLIER?= <tellier@linagora.com>
From: aduprat
 <duprat@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (duprat@linagora.com)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	Antoine Duprat <duprat@gmail.com>
Répondre à : 	antduprat@gmail.com
Pour : 	aduprat@linagora.com




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>

=====================================================
== File: mailet/standard/src/test/resources/mime/space.eml
=====================================================
Content-Type: multipart/mixed; boundary="------------gwA6NAbT8Pk0FYCy0yoPh61m"
Message-ID: <1745dbd6-f23b-44d0-be4c-9b9472c50348@linagora.com>
Date: Tue, 27 Feb 2024 07:38:14 +0100
MIME-Version: 1.0
To: BT TEST <xxx@linagora.com>
From: "xxx@linagora.com" <xxx@linagora.com>
Subject: Space

This is a multi-part message in MIME format.
--------------gwA6NAbT8Pk0FYCy0yoPh61m
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

space in attachment filename

--------------gwA6NAbT8Pk0FYCy0yoPh61m
Content-Type: application/pdf
Content-Disposition: attachment; filename=Vietnam Airline.pdf
Content-Transfer-Encoding: base64

JVBERi0xLjUKJbXtrvsKMyAwIG9iago8PCAvTGVuZ3RoIDQgMCBSCiAgIC9GaWx0ZXIgL0Zs
YXRlRGVjb2RlCj4+CnN0cmVhbQp4nN1aS6/buhHe61foD1ghh28g0OIC3XTVAgfooujC9jm+

--------------gwA6NAbT8Pk0FYCy0yoPh61m--

=====================================================
== File: mailet/standard/src/test/resources/mime/incorrect-headers.mime
=====================================================
Return-Path: <james@linagora.com>
Subject: Fwd: Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
 (CET) (james@linagora.com)
To: =?UTF-8?Q?Beno=c3=aet_SOMEONE?= <someone@linagora.com>
From: james <james@linagora.com>
X-Forwarded-Message-Id: <001a114380a6a260d105467765ab@google.com>
Message-ID: <f18fa52e-2e9d-1125-327d-2100b23f8a6b@linagora.com>
Date: Thu, 19 Jan 2017 20:36:37 +0100
MIME-Version: 1.0
In-Reply-To: <001a114380a6a260d105467765ab@google.com>
Content-Type: multipart/mixed;charset=charset=us-ascii;
 boundary="------------17D96D411CBD55D8239A8C1F"

This is a multi-part message in MIME format.
--------------17D96D411CBD55D8239A8C1F
Content-Type: multipart/alternative;
 boundary="------------64D716A3DDAEC185D3E67448"


--------------64D716A3DDAEC185D3E67448
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit




-------- Message transéré --------
Sujet : 	Invitation: (Aucun objet) - ven. 20 janv. 2017 14:00 - 15:00
(CET) (jamef@linagora.com)
Date : 	Thu, 19 Jan 2017 19:18:23 +0000
De : 	James <james@gmail.com>
Répondre à : 	james@gmail.com
Pour : 	james@linagora.com




--------------64D716A3DDAEC185D3E67448
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <p><br>
    </p>
    <div class="moz-forward-container"><br>

=====================================================
== File: mailet/standard/LICENSE.apache
=====================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally

=====================================================
== File: mailet/standard/LICENSE.activation
=====================================================
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0

1. Definitions.

1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.

1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.

1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.

1.4. Executable means the Covered Software in any form other than Source Code.

1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.

1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.

1.7. License means this document.

1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.

1.9. Modifications means the Source Code and Executable form of any of the following:

A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;

B. Any new file that contains any part of the Original Software or previous Modification; or

C. Any new file that is contributed or otherwise made available under the terms of this License.

1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.

1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.

1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.

1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)?the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)?ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

2. License Grants.

2.1. The Initial Developer Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
(c) The licenses granted in Sections?2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
(d) Notwithstanding Section?2.1(b) above, no patent license is granted: (1)?for code that You delete from the Original Software, or (2)?for infringements caused by: (i)?the modification of the Original Software, or (ii)?the combination of the Original Software with other software or devices.

2.2. Contributor Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)?Modifications made by that Contributor (or portions thereof); and (2)?the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
(c) The licenses granted in Sections?2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.

=====================================================
== File: mailet/standard/LICENSE.mail
=====================================================
COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0

1. Definitions.

1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications.

1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.

1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.

1.4. Executable means the Covered Software in any form other than Source Code.

1.5. Initial Developer means the individual or entity that first makes Original Software available under this License.

1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.

1.7. License means this document.

1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.

1.9. Modifications means the Source Code and Executable form of any of the following:

A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;

B. Any new file that contains any part of the Original Software or previous Modification; or

C. Any new file that is contributed or otherwise made available under the terms of this License.

1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License.

1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.

1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.

1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a)?the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b)?ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.

2. License Grants.

2.1. The Initial Developer Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
(c) The licenses granted in Sections?2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
(d) Notwithstanding Section?2.1(b) above, no patent license is granted: (1)?for code that You delete from the Original Software, or (2)?for infringements caused by: (i)?the modification of the Original Software, or (ii)?the combination of the Original Software with other software or devices.

2.2. Contributor Grant.
Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1)?Modifications made by that Contributor (or portions thereof); and (2)?the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
(c) The licenses granted in Sections?2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.

=====================================================
== File: mailet/base/src/test/resources/eml/text-only-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

A 8bit encoded body with =E2=82=ACuro symbol.

=====================================================
== File: mailet/base/src/test/resources/eml/multipart-7bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -973333758
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id 8151D43
	for <bob@james.james.org>; Wed, 22 Jan 2020 03:47:32 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id D6C653F38C
	for <bob@james.org>; Wed, 22 Jan 2020 04:47:31 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: multipart
Message-ID: <69bd7da2-5b13-de50-bd77-c985f6b0215c@james.org>
Date: Wed, 22 Jan 2020 10:47:17 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: multipart/mixed;
 boundary="------------C3FD44EAF9B6A93E163D9176"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------C3FD44EAF9B6A93E163D9176
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

A 8bit encoded body with =E2=82=ACuro symbol.



--------------C3FD44EAF9B6A93E163D9176
Content-Type: image/png;
 name="james-logo.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="james-logo.png"

iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9i
ZSBJbWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW
+BNItB2tNiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhl
s2SnOj1pYIfN1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOm
yTRpmhNF4Shzg8ud059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu
8D6wNQVQoelZBc6HaUi4jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZr
spsOsjYcHoGgd2I+lyVw1SQACpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8

=====================================================
== File: mailet/base/src/test/resources/eml/multipart-7bit-attachment-content.txt
=====================================================
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9i
ZSBJbWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW
+BNItB2tNiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhl
s2SnOj1pYIfN1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOm
yTRpmhNF4Shzg8ud059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu
8D6wNQVQoelZBc6HaUi4jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZr
spsOsjYcHoGgd2I+lyVw1SQACpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8
O0VzENJxxrxvD7gYeB7NyJLWahpkNw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4i
yNCU65E51yGNxDUK/veQNE92GuCSBE0aBDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIg
igaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0nsB0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM
0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emIDC4G0z65HEMcB6xRApTupbyFpkKkBK0uB
i6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrUpEEWrblqLDoaGTQJ/WFU2s/SpEE2
HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQFdMQfS496FeTBpkiwHIEMBXf
C0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo/i5NSSn2sKqLB2+gYOaZ
MfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o3r99K+0jzLUG0zQ3
ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkCN4clMJikeO9f
3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu76Hs5+KTB
GTTW8HwF2YNz4pX+Fn/2yc88OAE+ePKzD7LzLihoMRzJYaqYiVosNC3WJ2M+iCwEEvO5z9hq
H4+2f57p0//EoibD8wxrAEjPnvzcg+IcAcaHTI0jHMmhlwXQtHiQAXhOWQYB5IlmIXLTT9Eg
HpiOuSc//8AkHy1L10z4v+prt1/4xDy0WpmNjyai/6iHSmlKCcgMZg19L2PIJvAecH1wzcOw
CucygCnnn3NwGh5Pq/fkFz9Rm3E5qwr3HOmR9JpSA7KPf/M98Mu8rgAiDp4c8D78rgvgw7fs
k6kogpI9+aXXUfsB+FgLzk/839M3FVWWCdBaTFPKNNlAAx1fiSaOwIOg2QWu+CH8gdYCLee1
AoDMD+4d/GdkWBH47PKXX5/2lkd7Cvd0tBbTlDqQffyf/x01mROizZCLwLvABSZGHokznFfY
PjAe+TX01XqX+dfLUyyjSoDlWIuCpvRpMtJmEvAgl4Gr8LsA19xBaH/AggYsC8DkvloWuH35
6fsTA406n8eZoI6OKGqaJU001QUAdAhAq/pRw6vgA/IDGxwouJAnrkmfY0YkaEVqX755/+Fr
b79fnyCLeYV7Yg9sfvPBl6S7uLz93tc0YDVNT5O99o3voM91FDAVyXwc+mhlv28sw0rAdiC8
L7AXxrXLt7bbE2RxV+GeRwnS5dNkgtzSIqVpuubiQPscQiruGPCgWXjCVjwAmtcZdFIH+Urw
hEL8Ppcv3zKTAk1Fk2nNoyndIHvtn94faLMMH+EhBQ+0/gA0DO8z75AANGIjyEzsAij/x6/G
AxqtmTiOXL2UgKb0azIE2tcfHwAY7GvAuQYe3yfrAR/5If5A1HEYHAFP0VgDXgfeGDBbB6CV
YgFNBWRai2laDpANzEavIpqMEeDJAXjOjLvMht8FtgGm5h34/w4BSjzfIKCtD8/L//lZZaCp
rjylSdNygAz32wIANTkwGGofOXiycG/PeNkHXQHut/n9bCNw/108eiPe8MofVLZUgKYyeuQd
LQKalkeTAf3k3zsHABhrqIU2RmC7Bp47CDSvZ7zkoWYrAHjgOY9lNnwgjXjdY2J6XKM9/cJW
WX8+TctA018Sbp2VjBWvNwh0jIIXhnA+7A8bnLfB1Nz98b86L3zw21stMC9r4nOh54Nj+2lt
i3308LwjycnWMn6QNx98abhB4dvvfc2Z43t531/ivj5IwyRfeKb9hWI/JbzHmvU70HeH9yR2
LWayCeAHn9vKsRVarIaDTAaY0bnl96W98AcSt4VpMVfvNXje2GB5gwwr/NhXzq990Iv7tKpW
NOH8sYMEHwDTDVvGwIKPUYghkJjOLhttICjzG1GQcK/rrurHhvSD+UNBqQeECIec7Uvqie+r
diwTZCoDWhR7kvw7lPfjScBA76lSPmX1xOuokwQQ8I4ilSPP5EEzf7dUNuhbtcQyLWSnzadf
3MoRyLIUVXyFjvlQ4AyAiDOuS94LP2DSpvuvaDDjukZzQB/vvHpw7i4DyODZcoRgqwRqmvCO
Q4U8Xvuw8JwhCFSbqW8HhcJUEoUX0jhg6rvehKahqE1abDRySJWwjg5igKvF1DcYCTYi2BA1
v/7tr7pzB1kkAH93qwxJt4ba6ip4XH9OWh8yn4F7MlTBxlB7sUHXwBWgdT/yh98tJQBZKcnu
l0lBBs/V2HRGhWBrXYkLMjYY3pZjamudBAlb8AKCBNJuJxD8K2koms29GCCO/S54B36LSecy
YvrbUSDLsDnRh3+0ZQKXgduZDdb2I4wUns8Mgxp+sCML3DZ+xGtl7np1Y92rwG83w4Mga94g
pL8m9KWtsaL7Z/dqCStonjStBWDL1ALHpUZCgDECZ4sEszxBGo05AIy/q0faUKbBalNq8Nz5
Bj7CAPbHW1ljxUOtVLxm+onK8qoZWUZzMZPxKt4Lo4B+mmF4uTA/jYIqjed/fq/7ypcveLDA
ZCkjDGTAx+2ECKlo64uBmyj/oJUAtMUIP4PXWVS9lcf4Kipp1KAOmjLBJFCcRACMm2jP6fcr
TL68BAd1XVJ/UVrQEt6xFeE3H80/uhhCr/6J7y+Vnv3pT9UQDIKZiAWxDZx/Nli+IAgef4QI
aLC61/enzDQAmLXh0gXsSlAl60cqwUSIATJnAVhrCsKKgDsFgetGtOoy08zE1jjqWQVzqh4M
SJAprLoJokX+T9w0ilR2mbaVPVcP80cRtBG+G4L6VMwj5c+UNBaliEAPDxbt0bGrEgHOzFO6
Nv/gu4cAmB3fBFzzNjN3+/XMHS8PJp/pm41gDvq8NmBjcJ4Fbq/cRe434bkS/O/6913vV8v/
z99+LEfzyMbSIsYt0kdBf2oT/apxICHfy4kwiSbxV6yQ91nUUI0zpVHAotIoRaSxGxFFlJlw

=====================================================
== File: mailet/base/src/test/resources/eml/multipart-8bit-attachment-content.txt
=====================================================
iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW+BNItB2t
NiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhls2SnOj1pYIfN
1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOmyTRpmhNF4Shzg8ud
059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu8D6wNQVQoelZBc6HaUi4
jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZrspsOsjYcHoGgd2I+lyVw1SQA
CpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8O0VzENJxxrxvD7gYeB7NyJLWahpk
Nw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4iyNCU65E51yGNxDUK/veQNE92GuCSBE0a
BDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIgigaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0ns
B0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emID
C4G0z65HEMcB6xRApTupbyFpkKkBK0uBi6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrU
pEEWrblqLDoaGTQJ/WFU2s/SpEE2HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQ
FdMQfS496FeTBpkiwHIEMBXfC0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo
/i5NSSn2sKqLB2+gYOaZMfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o
3r99K+0jzLUG0zQ3ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkC
N4clMJikeO9f3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu7
6Hs5+KTBGTTW8HwF2YNz4pX+Fn/2yc88OAE+ePKzD7LzLihoMRzJYaqYiVosNC3WJ2M+iCwEEvO5
z9hqH4+2f57p0//EoibD8wxrAEjPnvzcg+IcAcaHTI0jHMmhlwXQtHiQAXhOWQYB5IlmIXLTT9Eg
HpiOuSc//8AkHy1L10z4v+prt1/4xDy0WpmNjyai/6iHSmlKCcgMZg19L2PIJvAecH1wzcOwCucy
gCnnn3NwGh5Pq/fkFz9Rm3E5qwr3HOmR9JpSA7KPf/M98Mu8rgAiDp4c8D78rgvgw7fsk6kogpI9
+aXXUfsB+FgLzk/839M3FVWWCdBaTFPKNNlAAx1fiSaOwIOg2QWu+CH8gdYCLee1AoDMD+4d/Gdk
WBH47PKXX5/2lkd7Cvd0tBbTlDqQffyf/x01mROizZCLwLvABSZGHokznFfYPjAe+TX01XqX+dfL
UyyjSoDlWIuCpvRpMtJmEvAgl4Gr8LsA19xBaH/AggYsC8DkvloWuH356fsTA406n8eZoI6OKGqa
JU001QUAdAhAq/pRw6vgA/IDGxwouJAnrkmfY0YkaEVqX755/+Frb79fnyCLeYV7Yg9sfvPBl6S7
uLz93tc0YDVNT5O99o3voM91FDAVyXwc+mhlv28sw0rAdiC8L7AXxrXLt7bbE2RxV+GeRwnS5dNk
gtzSIqVpuubiQPscQiruGPCgWXjCVjwAmtcZdFIH+UrwhEL8Ppcv3zKTAk1Fk2nNoyndIHvtn94f
aLMMH+EhBQ+0/gA0DO8z75AANGIjyEzsAij/x6/GAxqtmTiOXL2UgKb0azIE2tcfHwAY7GvAuQYe
3yfrAR/5If5A1HEYHAFP0VgDXgfeGDBbB6CVYgFNBWRai2laDpANzEavIpqMEeDJAXjOjLvMht8F
tgGm5h34/w4BSjzfIKCtD8/L//lZZaCprjylSdNygAz32wIANTkwGGofOXiycG/PeNkHXQHut/n9
bCNw/108eiPe8MofVLZUgKYyeuQdLQKalkeTAf3k3zsHABhrqIU2RmC7Bp47CDSvZ7zkoWYrAHjg
OY9lNnwgjXjdY2J6XKM9/cJWWX8+TctA018Sbp2VjBWvNwh0jIIXhnA+7A8bnLfB1Nz98b86L3zw
21stMC9r4nOh54Nj+2lti3308LwjycnWMn6QNx98abhB4dvvfc2Z43t531/ivj5IwyRfeKb9hWI/
JbzHmvU70HeH9yR2LWayCeAHn9vKsRVarIaDTAaY0bnl96W98AcSt4VpMVfvNXje2GB5gwwr/NhX
zq990Iv7tKpWNOH8sYMEHwDTDVvGwIKPUYghkJjOLhttICjzG1GQcK/rrurHhvSD+UNBqQeECIec
7Uvqie+rdiwTZCoDWhR7kvw7lPfjScBA76lSPmX1xOuokwQQ8I4ilSPP5EEzf7dUNuhbtcQyLWSn
zadf3MoRyLIUVXyFjvlQ4AyAiDOuS94LP2DSpvuvaDDjukZzQB/vvHpw7i4DyODZcoRgqwRqmvCO
Q4U8Xvuw8JwhCFSbqW8HhcJUEoUX0jhg6rvehKahqE1abDRySJWwjg5igKvF1DcYCTYi2BA1v/7t
r7pzB1kkAH93qwxJt4ba6ip4XH9OWh8yn4F7MlTBxlB7sUHXwBWgdT/yh98tJQBZKcnul0lBBs/V
2HRGhWBrXYkLMjYY3pZjamudBAlb8AKCBNJuJxD8K2koms29GCCO/S54B36LSecyYvrbUSDLsDnR
h3+0ZQKXgduZDdb2I4wUns8Mgxp+sCML3DZ+xGtl7np1Y92rwG83w4Mga94gpL8m9KWtsaL7Z/dq
CStonjStBWDL1ALHpUZCgDECZ4sEszxBGo05AIy/q0faUKbBalNq8Nz5Bj7CAPbHW1ljxUOtVLxm
+onK8qoZWUZzMZPxKt4Lo4B+mmF4uTA/jYIqjed/fq/7ypcveLDAZCkjDGTAx+2ECKlo64uBmyj/
oJUAtMUIP4PXWVS9lcf4Kipp1KAOmjLBJFCcRACMm2jP6fcrTL68BAd1XVJ/UVrQEt6xFeE3H80/
uhhCr/6J7y+Vnv3pT9UQDIKZiAWxDZx/Nli+IAgef4QIaLC61/enzDQAmLXh0gXsSlAl60cqwUSI
ATJnAVhrCsKKgDsFgetGtOoy08zE1jjqWQVzqh4MSJAprLoJokX+T9w0ilR2mbaVPVcP80cRtBG+
G4L6VMwj5c+UNBaliEAPDxbt0bGrEgHOzFO6Nv/gu4cAmB3fBFzzNjN3+/XMHS8PJp/pm41gDvq8
NmBjcJ4Fbq/cRe434bkS/O/6913vV8v/z99+LEfzyMbSIsYt0kdBf2oT/apxICHfy4kwiSbxV6yQ
91nUUI0zpVHAotIoRaSxGxFFlJlwFVnAB7Ui1ZMMuPvBBirC9LMivgW+B+/Bsm1KNORiQearm9+5
cLL1i84KAmSFnQBYcj5YfIAR0DZCALQG2m7VO8vc6bvGKttma17X98+QV+k4OHdZykff04eK4w/K
TJKHCbMQGeWjhqA7xpetjCmjHZGGGdMcxYBSR6FcdQmwi4rvz8b4hq5qP2ZmUYL2o1984gJvAzBQ

=====================================================
== File: mailet/base/src/test/resources/eml/multipart-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID 926590876
          for <bob@james.james.org>;
          Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.68.1])
	by incoming.james.org (Postfix) with ESMTPS id B39A643
	for <bob@james.james.org>; Tue, 21 Jan 2020 07:12:56 +0000 (UTC)
Received: from duc-HP-ProBook-450-G4 (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id F11B13F386
	for <bob@james.org>; Tue, 21 Jan 2020 08:12:55 +0100 (CET)
Date: Tue, 21 Jan 2020 14:12:39 +0700 (ICT)
X-LINAGORA-Copy-Delivery-Done: 1
From: bob@james.org
To: bob@james.org
Message-ID: <423733503.3.1579590775567@duc-HP-ProBook-450-G4>
Subject: UTF-8 8bit multipart
Content-Type: multipart/mixed; 
	boundary="----=_Part_0_238762799.1579590759052"

------=_Part_0_238762799.1579590759052
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

A 8bit encoded body with €uro symbol.
------=_Part_0_238762799.1579590759052
Content-Type: application/octet-stream; name=james-logo.png
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=james-logo.png

iVBORw0KGgoAAAANSUhEUgAAANkAAABaCAYAAAA1mvMAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAFB1JREFUeNrsXV2MI9lVvuX+m2EXrTtLQGwydPVsRlmkSOOW+BNItB2t
NiAk2n5BeYG2EwkpiSLbPPAjAW7zQiQe3C0SkBBg9ysv7ZZ4AGWFa/KClJeuRQhls2SnOj1pYIfN
1EhICRLj4pzyufbt6rrlW+W/cvc90lGVXVW37r11vnt+7h/zPI/JeJnp8jOmyTRpmhNF4Shzg8ud
059eUxrIiNJYhmEssybL4/G1f3SsGaSNAM7STxfeYWtR0ppMRqs3uNwu8D6wNQVQoelZBc6HaUi4
jgeH3nUKoOtqsdN04zUZCf8ZCPzOhNqwQeCKC/Aj4EN4v6vF7HZrspsOsjYcHoGgd2I+lyVw1SQA
CpqHWYkPiPc24f2HWgw1yG4qyFADnQAXVP0meKZMADOFv9H8O0VzENJxxrxvD7gYeB7NyJLWahpk
Nw5kJPgnJPCVKKBJwNUhTeQkDI6gH1cWtFpBB0k0yG4iyNCU65E51yGNxDUK/veQNE92GuCSBE0a
BDYNNA2ymwcyQdgPSLNkJbeg4B+jaTgNcEnA1qIgigaaBtnNA1nAb+L9XA6xPU1/6eL+G3nhp0ns
B0wyr/5fnt3t733sG+/vaNHUILuRIJsmAZhM0kwPCbi5CE3J/TIMojzC4733v6UDIbcAZKu6emID
C4G0z65HEMcB6xRApTupbyFpkKkBK0uBi6oisJAs9PEAWB1dgxpkmqLNwQa7Hn2MIgRVE8Dl6BrU
pEEWrblqLDoaGTQJ/WFU2s/SpEE2HmB5OLRjmIWoueoaXJo0yNS0l2y8osznqmizUJMGmTrA+KgQ
FdMQfS496FeTBpkiwHIEMBXfC0dplLT20qRBNhuAdQBcFS0ymmYOMhDMtn9isNN731neztWYAKvo
/i5NSSn2sKqLB2+gYOaZMfRPuj7g3l0ewJEP9lgDTNO0aLrDqjLMYSPsZeG8DMfyxU+/4cI5Au3o
3r99K+0jzLUG0zQ3ir8k3Ao7959aIc4Qr3hZlvHKwGcXn/okcjmlWgynm+Q0wDSl11z81CfzpAkC
N4clMJikeO9f3rVTArDwvOsgh6YZmotJFje1h9prqMUCv0f/gXaLvdLTLKmtUj4NME0LNRfv/eu7

=====================================================
== File: mailet/base/src/test/resources/eml/text-only-8bit.eml
=====================================================
Return-Path: <bob@james.org>
MIME-Version: 1.0
Delivered-To: bob@james.org
Received: from 10.233.68.83 (EHLO incoming.james.org) ([10.233.68.83])
          by james-0 (JAMES SMTP Server ) with ESMTP ID -1705393842
          for <bob@james.james.org>;
          Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from smtp.james.org (unknown [10.233.65.0])
	by incoming.james.org (Postfix) with ESMTPS id CCCA943
	for <bob@james.james.org>; Wed, 22 Jan 2020 04:11:54 +0000 (UTC)
Received: from [10.116.29.102] (unknown [1.54.162.156])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(No client certificate requested)
	by smtp.james.org (Postfix) with ESMTPSA id 2B7D13F393
	for <bob@james.org>; Wed, 22 Jan 2020 05:11:53 +0100 (CET)
To: bob@james.org
X-LINAGORA-Copy-Delivery-Done: 1
From: Uncle Bob <bob@james.org>
Subject: quoted
Message-ID: <f4d046a8-e563-1e92-dbd9-c5038603e3a2@james.org>
Date: Wed, 22 Jan 2020 11:11:38 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101
 Thunderbird/60.2.1
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

A 8bit encoded body with €uro symbol.


=====================================================
== File: examples/custom-webadmin-route/README.md
=====================================================
# Writing custom webadmin routes

Read this page [on the website](http://james.apache.org/howTo/custom-webadmin-routes.html).

The current project demonstrates how to write custom webadmin routes for Apache James. This enables writing new 
administrative features exposed over a REST API. This can allow you to write some additional features, make James 
interact with third party systems, do advance reporting... 

Start by importing the dependencies:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>james-server-webadmin-core</artifactId>
</dependency>
```

You can then write your first route using the [Spark Java](https://sparkjava.com/) framework:

```
public class RouteA implements Routes {
    @Override
    public String getBasePath() {
        return "/hello/a";
    }

    @Override
    public void define(Service service) {
        service.get(getBasePath(), (req, res) -> "RouteA\n");
    }
}
```

Knowing that:
 - entending `Routes` will ensure that authentication is requested if configured.
 - extending `PublicRoutes` will not request authentication.
 
You can compile this example project:

```
mvn clean install
```

Then embed your route into a James server. First configure your route into `webadmin.properties`:

```
enabled=true
port=8000
host=localhost


=====================================================
== File: examples/metrics-graphite/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    depends_on:
      - graphite
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./target/metrics-graphite-jar-with-dependencies.jar:/root/extensions-jars/metrics-graphite.jar
      - ./james/extensions.properties:/root/conf/extensions.properties

  graphite:
    image: graphiteapp/graphite-statsd
    container_name: graphite

=====================================================
== File: examples/metrics-graphite/james/extensions.properties
=====================================================
# This files enables customization of users extensions injections with guice.
# A user can drop some jar-with-dependencies within the ./extensions-jars folder and
# reference classes of these jars in some of James extension mechanisms.

# This includes mailets, matchers, mailboxListeners, preDeletionHooks, protocolHandlers, webAdmin routes

# Upon injections, the user can reference additional guice modules, that are going to be used only upon extensions instantiation.

#List of coma separated (',') fully qualified class names of additional guice modules to be used to instantiate extensions
guice.extension.startable=org.apache.james.examples.GraphiteExporter

=====================================================
== File: examples/metrics-graphite/README.md
=====================================================
# Custom metric integration

James comes with built in integration with the [Prometheus](https://prometheus.io/) ecosystem, and
a plugin to [export metrics directly to ElasticSearch]() exist.

However, one might be willing to integrate with arbitrary metric system.

This project demonstrate how to leverage [dropwizard metrics](https://metrics.dropwizard.io/4.2.0/)
 [built in extensions](https://metrics.dropwizard.io/4.2.0/manual/graphite.html)
to connect Apache James with [Graphite](https://graphiteapp.org/).

# Running the example

For this we build a GraphiteExporter implementing the `UserDefinedStartable` interface.

Build the project:

```
mvn clean install
```

Drop the jar with dependencies in the James `extensions-jars` folder.

Register it in James configuration, in `extensions.properties`:

```
guice.extension.startable=org.apache.james.examples.GraphiteExporter
```

Then start James.

Metrics can be retrieved in Graphite:

```
curl -XGET http://192.168.64.2:80/metrics/find?query=* | jq
```

![](image/metrics-graphite.png)

# Running the example with docker compose

Compile:

```
mvn clean install
```

Then start James:

```

=====================================================
== File: examples/custom-smtp-hooks/README.md
=====================================================
# Writing custom behaviour for Apache James SMTP server

Read this page [on the website](http://james.apache.org/howTo/custom-smtp-hooks.html).

The current project demonstrates how to write custom behaviours for Apache James SMTP server
by the means of SMTP hooks.

SMTP hooks allow integrating third party systems with the SMTP stack and writing additional SMTP extensions, for
instance.

Start by importing the dependencies:

```
<dependency>
    <groupId>org.apache.james.protocols</groupId>
    <artifactId>protocols-smtp/artifactId>
</dependency>
```

Allows writing the following hooks:

 - `AuthHook`: hook in the AUTH Command
 - `HeloHook`: hook in the HELO Command
 - `MailHook`: hook in the MAIL Command
 - `MailParametersHook`: hook for MAIL Command parameters
 - `RcptHook`: hook in the RCPT Command
 - `MessageHook`: hook in the DATA Command
 - `QuitHook`: hook in the QUIT Command
 - `UnknownHook`: hook for unknown commands
 
```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>james-server-protocols-smtp</artifactId>
</dependency>
```

Allows writing the following hooks:

 - `JamesMessageHook`: DATA command. Allows access to the message content.
 
James comes bundled with [provided SMTP hooks for common features](http://james.apache.org/server/dev-provided-smtp-hooks.html).
We encourage you to review them before starting writing your own hooks.

## Writing your own hooks
 
In this example we implement a single RCPT hook:

```
public class LoggingRcptHook implements RcptHook {

=====================================================
== File: examples/proxy-smtp/docker-compose.yml
=====================================================
version: '3.0'

services:
  haproxy:
    image: haproxytech/haproxy-alpine:2.4
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    ports:
      - "25:25"
      - 143:143
      - 993:993
      - 465:465
    depends_on:
      - james

  james:
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./smtpserver.xml:/root/conf/smtpserver.xml:ro
      - ./imapserver.xml:/root/conf/imapserver.xml:ro

  helo:
    image: alpine:latest
    command: "ash -c 'apk add --update --no-cache netcat-openbsd && echo \"HELO example.local\" | nc haproxy 25'"
    depends_on:
      - haproxy

=====================================================
== File: examples/proxy-smtp/haproxy.cfg
=====================================================
global
  log stdout format raw local0 info

defaults
  mode tcp
  timeout client 1800s
  timeout connect 5s
  timeout server 1800s
  log global
  option tcplog

frontend smtp-frontend
  bind :25
  default_backend james-servers

frontend smtps-frontend
  bind :465
  default_backend smtps-servers

backend james-servers
  server james1 james:2525 send-proxy

backend smtps-servers
  server james1 james:465 send-proxy

frontend imap-frontend
  bind :143
  default_backend james-servers-imap

frontend imaps-frontend
  bind :993
  default_backend james-servers-imaps

backend james-servers-imap
  server james1 james:143 send-proxy

backend james-servers-imaps
  server james1 james:993 send-proxy

=====================================================
== File: examples/proxy-smtp/README.md
=====================================================
# Use one or more James instances behind a proxy

It is common to run a proxy in front of a mail server such as James. The proxy receives incoming
connections and forwards the request (e.g. SMTP) to James. The proxy passes the remote address to
James, so James knows the origin ip address of the remote peer.

So far SMTP has been tested successfully, but is not limited to. Since the proxy protocol
implementation is implemented on Netty level, it can also be used for IMAP.

## Proxy

This example uses [HAProxy](https://www.haproxy.org/). Other proxy software that implement
[HAProxy's proxy protocol](https://www.haproxy.org/download/2.7/doc/proxy-protocol.txt) can also be
used (e.g. [traefik](https://traefik.io)).

It is possible to run more than one James instance and let the proxy decide which connection it
forwards to which instance (i.e. load balancing).

## SMTP

This docker example uses HAProxy exposes port 25 (SMTP)

James might take a while to start. Thus start James first, then haproxy and finally helo.
```shell
docker-compose up -d james
# wait until james is ready
docker-compose up -d haproxy

# sends a "HELO" SMTP command to haproxy that will be forwarded to james. James will answer
# including the remote ip address of the helo container.
docker-compose up helo
```

If you expose HAProxy's port 25 you can also send a HELO using telnet.

Similarly, one can test a setup mixing SSL and SMTP (with James responsible for SSL termination):

```
openssl s_client -host 127.0.0.1 -port 465
```

## IMAP

This docker example uses HAProxy exposes port 143 (SMTP)

Then interacting with HAProxy port 143:

```
telnet 127.0.0.1 143
```

=====================================================
== File: examples/custom-smtp-command/README.md
=====================================================
# Creating your own SMTP commands

Read this page [on the website](http://james.apache.org/howTo/custom-smtp-commands.html).

The current project demonstrates how to write custom commands for Apache James SMTP server.

Start by importing the dependencies:

```
<dependency>
    <groupId>org.apache.james.protocols</groupId>
    <artifactId>protocols-smtp/artifactId>
</dependency>
```

You can write your commands by extending the `CommandHandler<SMTPSession>` class. For instance:

```
/**
  * Copy of NoopCmdHandler
  */
public class MyNoopCmdHandler implements CommandHandler<SMTPSession> {
    private static final Collection<String> COMMANDS = ImmutableSet.of("MYNOOP");

    private static final Response NOOP = new SMTPResponse(SMTPRetCode.MAIL_OK,
        DSNStatus.getStatus(DSNStatus.SUCCESS, DSNStatus.UNDEFINED_STATUS) + " OK")
        .immutable();

    @Override
    public Response onCommand(SMTPSession session, Request request) {
        return NOOP;
    }
    
    @Override
    public Collection<String> getImplCommands() {
        return COMMANDS;
    }
}
```

You then need to list the exposed SMTP commands with a `HandlersPackage`. For instance:

```
/**
 * This class copies CoreCmdHandlerLoader adding support for MYNOOP command
 */
public class MyCmdHandlerLoader implements HandlersPackage {

    private final List<String> commands = new LinkedList<>();


=====================================================
== File: examples/custom-listeners/README.md
=====================================================
# Writing custom Mailbox listeners

Mailbox listeners allow extending the behaviour of mail delivery agents.

Read this page [on the website](http://james.apache.org/howTo/custom-listeners.html) to see how to run this example.

=====================================================
== File: examples/custom-imap/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./target/custom-imap-jar-with-dependencies.jar:/root/extensions-jars/custom-imap.jar
      - ./sample-configuration/imapserver.xml:/root/conf/imapserver.xml
    ports:
      - "143:143"
      - "8000:8000"

=====================================================
== File: examples/custom-imap/README.md
=====================================================
# Creating your own IMAP commands

James allows defining your own handler packages (logical union).
To do that you need to define `imapPackages` in `imapserver.xml` configuration file.

Eg:

```xml
<imapPackages>org.apache.james.modules.protocols.DefaultImapPackage</imapPackages>
<imapPackages>org.apache.james.examples.imap.PingImapPackages</imapPackages>
```
Sample configure file: [imapserver.xml](./sample-configuration/imapserver.xml)

Note that when `imapPackages` is not provided, James will implicit use
`org.apache.James.modules.protocols.DefaultImapPackage`

## Running the example

Build the project:

```
mvn clean install
```

Drop the jar with dependencies in the James `extensions-jars` folder.

Then start James.

## Running the example with docker compose

Compile:

```
mvn clean install
```

Then start James:

```
docker-compose up
```

Test with imap package: `org.apache.james.examples.imap.PingImapPackages`

Command example:
```bash
telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

=====================================================
== File: examples/custom-mailets/README.md
=====================================================
# How to customize mail processing

Mailet and matcher allow in depth customisation of mail processing within 
Apache James, even allowing writing custom components.

Read this page [on the website](http://james.apache.org/howTo/mail-processing.html) to see how to run this example.

=====================================================
== File: examples/custom-healthcheck/README.md
=====================================================
# Writing custom healthchecks

Read this page [on the website](http://james.apache.org/howTo/custom-healthchecks.html).

The current project demonstrates how to write custom healthchecks for Apache James. 
This enables writing new custom healthcheck that fits your monitoring need.

Start by importing the dependencies:

```
<dependency>
    <groupId>org.apache.james</groupId>
    <artifactId>james-core</artifactId>
</dependency>
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
</dependency>
```

You can then start writing your first HealthCheck by implementing HealthCheck interface.
 
You can compile this example project:

```
mvn clean install
```

Then embed your healthcheck into a James server. First configure your custom healthcheck into `healthcheck.properties`:

```
# List of fully qualified HealthCheck class names in addition to James' default healthchecks.
# Healthchecks need to be located within the classpath or in the ./extensions-jars folder.
additional.healthchecks=org.apache.james.examples.HealthCheckA
```

Then start a James server with your JAR and the configuration:

```
$ docker run -d \
   -v $PWD/healthcheck.properties:/root/conf/healthcheck.properties \
   -v $PWD/healthcheck-extension.jar:/root/extensions-jars \
   -p 25:25 \
   apache/james:memory-latest --generate-keystore
```

You can use `curl` command to get your healthcheck status:

```
$ curl -XGET http://172.17.0.2:8000/healthcheck

=====================================================
== File: examples/README.md
=====================================================
# Examples

This submodule shows how one can work with James. 

Each subprojects illustrate a specific concept.

## How to customize mail processing

At the heart of James lies the Mailet container, which allows mail processing. This is splitted into smaller units, with specific responsibilities:

 - `Mailets`: Are operations performed with the mail: modifying it, performing a side-effect, etc...
 - `Matchers`: Are per-recipient conditions for mailet executions
 - `Processors`: Are matcher/mailet pair execution threads

Once we define the mailet container content through the mailetcontailer.xml file. Hence, we can arrange James standard 
components to achieve basic logic. But what if our goals are more complex? What if we need our own processing components?

[This example](custom-mailets) shows how to write such components!

## Configure Custom Mailbox Listeners

Mailbox Listener is a component in James Mailbox System. Each time an action is applied on a mailbox(adding, deleting),
 or on an email(adding, deleting, updating flags...), then an event representing that action is generated and delivered 
 to all the Listeners that had been registered before. After receiving events, listeners retrieve information from the 
 events then execute their business (Indexing emails in OpenSearch, updating quota of users, detecting spam emails...)
 
**Mailbox Listeners** allow customizing the behaviour of James used as a Mail Delivery Agent (MDA). 

[This example](custom-listeners) shows how to write such components!

## Configure Custom SMTP hooks

SMTP hooks allow integrating third party systems with the SMTP stack, allows writing additional SMTP extensions, for 
instance. 

[This example](custom-smtp-hooks) shows how to write such components!

## Configure Custom SMTP commands

This subproject demonstrates how to write custom commands for Apache James SMTP server. 

[This example](custom-smtp-command) shows how to write additional SMTP commands!

## Configure Custom WebAdmin routes

The current project demonstrates how to write custom webadmin routes for Apache James. This enables writing new 
administrative features exposed over a REST API. This can allow you to write some additional features, make James 
interact with third party systems, do advance reporting... 

[This example](custom-webadmin-route) shows how to write additional Webadmin routes!

=====================================================
== File: examples/imap-autoconf/content/mail/config-v1.1.xml
=====================================================
<clientConfig version="1.1">
    <emailProvider id="MessagingEngine">
        <domain>domain.tld</domain>
        <displayName>My company</displayName>
        <displayShortName>My company</displayShortName>
        <incomingServer type="imap">
            <hostname>imap.domain.tld</hostname>
            <port>993</port>
            <socketType>SSL</socketType>
            <authentication>password-cleartext</authentication>
            <username>%EMAILADDRESS%</username>
        </incomingServer>
        <outgoingServer type="smtp">
            <hostname>smtp.domain.tld</hostname>
            <port>465</port>
            <socketType>SSL</socketType>
            <authentication>password-cleartext</authentication>
            <username>%EMAILADDRESS%</username>
        </outgoingServer>
    </emailProvider>
</clientConfig>

=====================================================
== File: examples/imap-autoconf/content/Autodiscover/Autodiscover.xml
=====================================================
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
    <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
        <Account>
            <AccountType>email</AccountType>
            <Action>settings</Action>
            <Protocol>
                <Type>IMAP</Type>
                <Server>imaps.avocat.fr</Server>
                <Port>993</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName/>
                <SPA>off</SPA>
                <SSL>on</SSL>
                <AuthRequired>on</AuthRequired>
            </Protocol>
            <Protocol>
                <Type>SMTP</Type>
                <Server>smtps.avocat.fr</Server>
                <Port>465</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName/>
                <SPA>off</SPA>
                <Encryption>SSL</Encryption>
                <AuthRequired>on</AuthRequired>
                <UsePOPAuth>off</UsePOPAuth>
                <SMTPLast>off</SMTPLast>
            </Protocol>
        </Account>
    </Response>
</Autodiscover>

=====================================================
== File: examples/imap-autoconf/content/.well-known/autoconfig/mail/config-v1.1.xml
=====================================================
<clientConfig version="1.1">
    <emailProvider id="MessagingEngine">
        <domain>domain.tld</domain>
        <displayName>My company</displayName>
        <displayShortName>My company</displayShortName>
        <incomingServer type="imap">
            <hostname>imap.domain.tld</hostname>
            <port>993</port>
            <socketType>SSL</socketType>
            <authentication>password-cleartext</authentication>
            <username>%EMAILADDRESS%</username>
        </incomingServer>
        <outgoingServer type="smtp">
            <hostname>smtp.domain.tld</hostname>
            <port>465</port>
            <socketType>SSL</socketType>
            <authentication>password-cleartext</authentication>
            <username>%EMAILADDRESS%</username>
        </outgoingServer>
    </emailProvider>
</clientConfig>

=====================================================
== File: examples/imap-autoconf/content/autodiscover/autodiscover.xml
=====================================================
<Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/responseschema/2006">
    <Response xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a">
        <Account>
            <AccountType>email</AccountType>
            <Action>settings</Action>
            <Protocol>
                <Type>IMAP</Type>
                <Server>imap.domain.tld</Server>
                <Port>993</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName/>
                <SPA>off</SPA>
                <SSL>on</SSL>
                <AuthRequired>on</AuthRequired>
            </Protocol>
            <Protocol>
                <Type>SMTP</Type>
                <Server>smtp.domain.tld</Server>
                <Port>465</Port>
                <DomainRequired>off</DomainRequired>
                <LoginName/>
                <SPA>off</SPA>
                <Encryption>SSL</Encryption>
                <AuthRequired>on</AuthRequired>
                <UsePOPAuth>off</UsePOPAuth>
                <SMTPLast>off</SMTPLast>
            </Protocol>
        </Account>
    </Response>
</Autodiscover>

=====================================================
== File: examples/imap-autoconf/docker-compose.yml
=====================================================
version: '3'

services:

  james:
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    ports:
      - "465:465"
      - "993:993"
      - "8000:8000"
  autoconf:
    image: nginx
    container_name: autoconf
    volumes:
     - ./content:/usr/share/nginx/html
    ports:
     - "80:80"

=====================================================
== File: examples/imap-autoconf/README.adoc
=====================================================
= Auto-configuration of Mail User Agents

== RFC-6186 use of SRV records

link:https://tools.ietf.org/html/rfc6186[RFC-6186] defines the usage of SRV records in order
to help users configuring their Mail User Agents in order to access your service, as it allows
to locate your services (hostnames and ports).

You would then need to publish SRV records on your DNS.

----
_imaps._tcp.domain.tld. 3600       IN    SRV    0 1 993 imap.domain.tld.
_submission._tcp.domain.tld. 3600  IN    SRV    0 1 587 smtp.domain.tld.
_jmap._tcp.domain.tld. 3600        IN    SRV    0 1 443 jmap.domain.tld.
----

== Thunderbird

Thunderbird relies on a custom XML payload being served on a subdomain.

For `user@domain.tld` an HTTP GET request would be done at `http://autoconfig.domain.tld/mail/config-v1.1.xml`

You could for instance serve the following XML payload:

[xml]
----
<clientConfig version="1.1">
  <emailProvider id="MessagingEngine">
    <domain>domain.tld</domain>
    <displayName>My company</displayName>
    <displayShortName>My company</displayShortName>
    <incomingServer type="imap">
      <hostname>imap.domain.tld</hostname>
      <port>993</port>
      <socketType>SSL</socketType>
      <authentication>password-cleartext</authentication>
      <username>%EMAILADDRESS%</username>
    </incomingServer>
    <outgoingServer type="smtp">
      <hostname>smtp.domain.tld</hostname>
      <port>465</port>
      <socketType>SSL</socketType>
      <authentication>password-cleartext</authentication>
      <username>%EMAILADDRESS%</username>
    </outgoingServer>
  </emailProvider>
</clientConfig>
----

== JMAP

=====================================================
== File: examples/imap-autoconf/default.conf
=====================================================
server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    error_page  405     =200 $uri;

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}


=====================================================
== File: examples/custom-james-assembly/README.md
=====================================================
# Assemble a James server tailored to your needs

Read this page [on the website](http://james.apache.org/howTo/custom-james-assembly.html).

The current project demonstrates how to write a custom assembly in order to write your
own tailor-made server.

This enables:

 - Arbitrary composition of technologies (example JPA mailbox with Cassandra user management)
 - Write any additional components
 - Drop any unneeded component
 - You have control on the dependencies and can reduce the classpath size

## Example: Write an IMAP+SMTP only memory server

In order to do this select the modules you wished to assemble [in the Guice building blocks](https://github.com/apache/james-project/tree/master/server/container/guice). We encourage you to have
a fine grain control of your dependencies but for the sake of simplicity this example will reuse the dependencies of an
existing James application:

```
<dependency>
    <groupId>${james.groupId}</groupId>
    <artifactId>james-server-memory-app</artifactId>
    <version>${project.version}</version>
</dependency>
```

Once done assemble the guice modules together in a class implementing `JamesServerMain`:

```
public class CustomJamesServerMain implements JamesServerMain {
       public static final Module PROTOCOLS = Modules.combine(
           new IMAPServerModule(),
           new ProtocolHandlerModule(),
           new MailRepositoryTaskSerializationModule(),
           new SMTPServerModule());
   
       public static final Module CUSTOM_SERVER_MODULE = Modules.combine(
           new MailetProcessingModule(),
           new MailboxModule(),
           new MemoryDataModule(),
           new MemoryEventStoreModule(),
           new MemoryMailboxModule(),
           new MemoryMailQueueModule(),
           new TaskManagerModule(),
           new RawPostDequeueDecoratorModule(),
           binder -> binder.bind(MailetContainerModule.DefaultProcessorsConfigurationSupplier.class)
               .toInstance(BaseHierarchicalConfiguration::new));
   

=====================================================
== File: examples/oidc/test.sh
=====================================================
#!/bin/sh

set -eux

docker-compose up -d

GET_TOKEN_RESPONSE=`curl --location 'http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/token' \
                                  --header 'Content-Type: application/x-www-form-urlencoded' \
                                  --data-urlencode 'grant_type=password' \
                                  --data-urlencode 'scope=openid profile email' \
                                  --data-urlencode 'client_id=james-thunderbird' \
                                  --data-urlencode 'client_secret=Xw9ht1veTu0Tk5sMMy03PdzY3AiFvssw' \
                                  --data-urlencode 'username=james-user@localhost' \
                                  --data-urlencode 'password=secret' 2>/dev/null`

ACCESS_TOKEN=`echo $GET_TOKEN_RESPONSE 2>/dev/null |perl -pe 's/^.*"access_token"\s*:\s*"(.*?)".*$/$1/'`
REFRESH_TOKEN=`echo $GET_TOKEN_RESPONSE 2>/dev/null |perl -pe 's/^.*"refresh_token"\s*:\s*"(.*?)".*$/$1/'`

echo "Got an access_token"
if curl -H "Authorization: Bearer $ACCESS_TOKEN" http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/userinfo 2>/dev/null| grep james-user >/dev/null; then
	echo "Access_token is valid"
else
	echo "ACCESS_TOKEN VERIFICATION FAILED"
fi

echo -n "Trying James: "

APISIX_JMAP_ENDPOINT=apisix.example.com:9080/oidc/jmap/session
if curl -v -H 'Accept: application/json; jmapVersion=rfc-8621' -H "Authorization: Bearer $ACCESS_TOKEN" $APISIX_JMAP_ENDPOINT 2>/dev/null | grep uploadUrl >/dev/null; then
	echo "OK"
else
	echo "Not OK"
fi

# Logout

curl --location 'http://sso.example.com:8080/auth/realms/oidc/protocol/openid-connect/logout' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=james-thunderbird' \
--data-urlencode 'client_secret=Xw9ht1veTu0Tk5sMMy03PdzY3AiFvssw' \
--data-urlencode 'refresh_token='$REFRESH_TOKEN  >/dev/null 2>&1

sleep 1

if curl -v -H 'Accept: application/json; jmapVersion=rfc-8621' -H "Authorization: Bearer $ACCESS_TOKEN" $APISIX_JMAP_ENDPOINT 2>/dev/null | grep uploadUrl >/dev/null; then
	echo "LOGOUT FAILED"
else
	echo "Logout OK"
fi

=====================================================
== File: examples/oidc/docker-compose.yml
=====================================================
version: "3"

services:
  apisix:
    container_name: apisix.example.com
    image: linagora/apisix:3.2.0-debian-javaplugin
    volumes:
      - ./apisix/conf/apisix.yaml:/usr/local/apisix/conf/apisix.yaml
      - ./apisix/conf/config.yaml:/usr/local/apisix/conf/config.yaml
    networks:
      - james
    ports:
      - "9080:9080/tcp"

  james:
    depends_on:
      - ldap
    networks:
      - james
    image: apache/james:memory-latest
    container_name: james
    hostname: james.local
    command:
      - --generate-keystore
    volumes:
      - ./james/usersrepository.xml:/root/conf/usersrepository.xml
      - ./james/jmap.properties:/root/conf/jmap.properties
    ports:
      - "8000:8000"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://james:8000/domains"]

  sso.example.com:
    depends_on:
      - ldap
    image: quay.io/keycloak/keycloak:16.1.0
    container_name: sso.example.com
    volumes:
      - ./keycloak/realm-oidc.json:/tmp/realm-oidc.json
    ports:
      - "8080:8080"
    environment:
      - KEYCLOAK_USER=admin
      - KEYCLOAK_PASSWORD=admin
      - KEYCLOAK_IMPORT=/tmp/realm-oidc.json
    networks:
      james:
        aliases:
          - keycloak


=====================================================
== File: examples/oidc/james/imapserver.xml
=====================================================
<?xml version="1.0"?>
<imapservers>
    <imapserver enabled="true">
        <jmxName>imapserver</jmxName>
        <bind>0.0.0.0:143</bind>
        <connectionBacklog>200</connectionBacklog>
        <tls socketTLS="false" startTLS="false">
            <keystore>file://conf/keystore</keystore>
            <keystoreType>PKCS12</keystoreType>
            <secret>james72laBalle</secret>
            <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
        </tls>
        <connectionLimit>0</connectionLimit>
        <connectionLimitPerIP>0</connectionLimitPerIP>
        <idleTimeInterval>120</idleTimeInterval>
        <idleTimeIntervalUnit>SECONDS</idleTimeIntervalUnit>
        <enableIdle>true</enableIdle>
        <auth>
            <plainAuthEnabled>true</plainAuthEnabled>
            <oidc>
                <oidcConfigurationURL>http://keycloak:8080/auth/realms/oidc/.well-known/openid-configuration</oidcConfigurationURL>
                <jwksURL>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/certs</jwksURL>
                <claim>email</claim>
                <scope>openid profile email</scope>
                <introspection>
                    <url>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/token/introspect</url>
                    <auth>Basic amFtZXMtdGh1bmRlcmJpcmQ6WHc5aHQxdmVUdTBUazVzTU15MDNQZHpZM0FpRnZzc3c=</auth>
                </introspection>
            </oidc>
        </auth>
    </imapserver>
</imapservers>

=====================================================
== File: examples/oidc/james/jmap.properties
=====================================================
# Configuration file for JMAP
# Read https://james.apache.org/server/config-jmap.html for further details

enabled=true                                                                                                                                                                           

tls.keystoreURL=file://conf/keystore
tls.secret=james72laBalle                                                                  

# Alternatively TLS keys can be supplied via PEM files
# tls.privateKey=file://conf/private.nopass.key
# tls.certificates=file://conf/certs.self-signed.csr
# An optional secret might be specified for the private key
# tls.secret=james72laBalle

#
# If you wish to use OAuth authentication, you should provide a valid JWT public key.
# The following entry specify the link to the URL of the public key file,
# which should be a PEM format file.
#
#jwt.publickeypem.url=file://conf/jwt_publickey

# Should simple Email/query be resolved against a Cassandra projection, or should we resolve them against OpenSearch?
# This enables a higher resilience, but the projection needs to be correctly populated. False by default.
# view.email.query.enabled=true

# If you want to specify authentication strategies for Jmap draft version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
# authentication.strategy.draft=AccessTokenAuthenticationStrategy,JWTAuthenticationStrategy,QueryParameterAccessTokenAuthenticationStrategy

# If you want to specify authentication strategies for Jmap rfc-8621 version
# For custom Authentication Strategy not inside package "org.apache.james.jmap.http", you have to specify its FQDN
authentication.strategy.rfc8621=BasicAuthenticationStrategy,XUserAuthenticationStrategy

=====================================================
== File: examples/oidc/james/smtpserver.xml
=====================================================
<?xml version="1.0"?>
<smtpservers>
    <smtpserver enabled="true">
        <jmxName>smtpserver</jmxName>
        <bind>0.0.0.0:587</bind>
        <connectionBacklog>200</connectionBacklog>
        <tls socketTLS="false" startTLS="false">
            <keystore>file://conf/keystore</keystore>
            <keystoreType>PKCS12</keystoreType>
            <secret>james72laBalle</secret>
            <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
            <algorithm>SunX509</algorithm>
        </tls>
        <connectiontimeout>360</connectiontimeout>
        <connectionLimit>0</connectionLimit>
        <connectionLimitPerIP>0</connectionLimitPerIP>
        <auth>
            <announce>forUnauthorizedAddresses</announce>
            <plainAuthEnabled>true</plainAuthEnabled>
            <oidc>
                <oidcConfigurationURL>http://keycloak:8080/auth/realms/oidc/.well-known/openid-configuration</oidcConfigurationURL>
                <jwksURL>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/certs</jwksURL>
                <claim>email</claim>
                <scope>openid profile email</scope>
                <introspection>
                    <url>http://keycloak:8080/auth/realms/oidc/protocol/openid-connect/token/introspect</url>
                    <auth>Basic amFtZXMtdGh1bmRlcmJpcmQ6WHc5aHQxdmVUdTBUazVzTU15MDNQZHpZM0FpRnZzc3c=</auth>
                </introspection>
            </oidc>
        </auth>
        <authorizedAddresses>127.0.0.0/8</authorizedAddresses>
        <verifyIdentity>false</verifyIdentity>
        <maxmessagesize>0</maxmessagesize>
        <addressBracketsEnforcement>true</addressBracketsEnforcement>
        <smtpGreeting>Apache JAMES awesome SMTP Server</smtpGreeting>
        <handlerchain>
            <handler class="org.apache.james.smtpserver.fastfail.ValidRcptHandler"/>
            <handler class="org.apache.james.smtpserver.CoreCmdHandlerLoader"/>
        </handlerchain>
    </smtpserver>
</smtpservers>



=====================================================
== File: examples/oidc/_media/oidc-sso.drawio
=====================================================
<mxfile host="drawio-plugin" modified="2023-05-19T09:35:49.753Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="8cXSAneUY9EacNUk1MxU" version="20.5.3" type="embed"><diagram id="9t5u96WNi0rS4HrvDtxI" name="Page-1"><mxGraphModel dx="1045" dy="583" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="TRxEg24sL5Zt3rOSAXKO-1" value="Apisix&lt;br&gt;&lt;br&gt;API gateway" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="300" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-2" value="" style="shape=actor;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="50" y="300" width="40" height="60" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-4" value="Keycloack&lt;br&gt;&lt;br&gt;OIDC provider" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="300" y="80" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-5" value="James&lt;br&gt;&lt;br&gt;JMAP server" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="600" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-7" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="360" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-8" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="100" y="400" as="sourcePoint"/><mxPoint x="280" y="430" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-9" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="450" y="400" as="sourcePoint"/><mxPoint x="590" y="400" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-10" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="330" as="sourcePoint"/><mxPoint x="290" y="200" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-11" value="1. Un-authenticated request will be rejected" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="130" y="300" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-12" value="2. Login against keycloack" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="40" y="180" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-13" value="3. Use of the access token to authenticate against Apisix" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="60" y="420" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-14" value="4. use of the X-User header to proxy authentication to Apache James" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="410" y="430" width="210" height="70" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-15" value="LDAP" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="600" y="80" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-16" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-5" target="TRxEg24sL5Zt3rOSAXKO-15" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-17" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-4" target="TRxEg24sL5Zt3rOSAXKO-15" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-18" value="Verify credentials" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="490" y="110" width="60" height="30" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-19" value="List users,&lt;br&gt;Verify that user exists" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="590" y="260" width="60" height="30" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>

=====================================================
== File: examples/oidc/_media/oidc-slo.drawio
=====================================================
<mxfile host="drawio-plugin" modified="2023-05-19T09:39:47.749Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36" etag="MQ-wdtVOlcMwVUt4tywV" version="20.5.3" type="embed"><diagram id="9t5u96WNi0rS4HrvDtxI" name="Page-1"><mxGraphModel dx="1045" dy="583" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="TRxEg24sL5Zt3rOSAXKO-1" value="Apisix&lt;br&gt;&lt;br&gt;API gateway" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="450" y="320" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-2" value="" style="shape=actor;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1"><mxGeometry x="50" y="300" width="40" height="60" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-4" value="Keycloack&lt;br&gt;&lt;br&gt;OIDC provider" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="260" y="90" width="140" height="140" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-20" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" target="TRxEg24sL5Zt3rOSAXKO-4" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="110" y="330" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-21" value="1. logout with keycloack logout endpoint" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="50" y="180" width="190" height="80" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-22" value="Apisix plugin runner" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1"><mxGeometry x="475" y="220" width="80" height="80" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-23" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-4" target="TRxEg24sL5Zt3rOSAXKO-22" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="400" y="310" as="sourcePoint"/><mxPoint x="450" y="260" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-24" value="2. Use of logout backchannel (HTTP call)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="450" y="150" width="130" height="50" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-27" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;startArrow=none;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="TRxEg24sL5Zt3rOSAXKO-29" target="2" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="340" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-28" value="3.Access tokens used after logout are rejected" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1"><mxGeometry x="130" y="430" width="120" height="30" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-29" value="" style="verticalLabelPosition=bottom;verticalAlign=top;html=1;shape=mxgraph.basic.no_symbol;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1"><mxGeometry x="160" y="310" width="100" height="100" as="geometry"/></mxCell><mxCell id="TRxEg24sL5Zt3rOSAXKO-30" value="" style="shape=flexArrow;endArrow=none;html=1;rounded=0;" parent="1" target="TRxEg24sL5Zt3rOSAXKO-29" edge="1"><mxGeometry width="50" height="50" relative="1" as="geometry"><mxPoint x="120" y="340" as="sourcePoint"/><mxPoint x="290" y="390" as="targetPoint"/></mxGeometry></mxCell><mxCell id="2" value="" style="rounded=0;whiteSpace=wrap;html=1;gradientColor=none;opacity=30;strokeWidth=5;strokeColor=#000000;perimeterSpacing=0;fillColor=#808080;" parent="1" vertex="1"><mxGeometry x="430" y="200" width="180" height="290" as="geometry"/></mxCell><mxCell id="3" value="Apisix" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="1"><mxGeometry x="536" y="469" width="90" height="20" as="geometry"/></mxCell></root></mxGraphModel></diagram></mxfile>

=====================================================
== File: examples/oidc/_media/IMAP_SMTP oidc.drawio
=====================================================
<mxfile host="app.diagrams.net" modified="2022-01-20T04:07:37.309Z" agent="5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36" etag="OGjRz3jpXBH_9HMDoK-6" version="16.4.2" type="google"><diagram id="thl9NaU5WR5Ri5IL_89n" name="Page-1">5VnbcuI4EP0aqnYfoCwZG3gkcfYym9RSlcrs5U3YwmhiLCKJAPn6adky2LK9MBkIm0weiNRqt6Q+3UdtueNeLza/CrKc3/GIJh3sRJuOG3QwHg0R/GrBNhd4yAhiwaJcVBLcsxdqhI6RrlhEZUVRcZ4otqwKQ56mNFQVGRGCr6tqM55UZ12SmNYE9yFJ6tK/WKTmuXSIB3v5b5TF82Jm5I/ykQUplM1O5JxEfF0SuTcd91pwrvLWYnNNE+27wi/5c7+0jO4WJmiqjnkgoqOXeE05uxulo6fPwcu/D1+6xsozSVZmwx3sJ2DvasbBLKxabY0r/KcVLwa6MgNqDAqov9zsB6EV6/8PkorCEiwpN5YPGW/s7GJwzFI3V4tkHCouQOeZCsUAhFsypcmES6YYT0FlypXii5LCOGGxHlB8CdK5WiTQQbtZtBrdtDoM7WCA8KV8QZXYgop5wDPAmchFvumv93FQiOalEBgZGTGRF+8M78GBhsHnG7Dyvx8r3ITVH3QbJpw8Ftamohj58/cAlupMBH+GLBR1hWMhht1BwkLnaj1nit4vSahH1kAZVdiIXOZZPGMbGpkdGFZA/dPgigdVYN06rqO3xHVwJlxvg/Hkg0DW961c9C6M2fBMmH0a393cfxDQ7DzDwwuDNmoAreUsmiV0M9blA7iCppFpBmFCpGRh1ZeCr9JIOzFwLEfi/OmicEBODw+9AeoXv34+btSHPYSd0t/+GKNRrUixQICqiIiYqkMhWwerBIbXAEYhEzQhij1Xl9GEkJlhwlmWB0XwuFYs9C2QJV+JkJqnylWMZch1LEPIMpT7oWYoC5jdtl8fQwi3Zr5ckrQx86ckfIyzKOmGPNEFjiYAEU9/wp7X0WWbPmWt9s91ckC9h7Q7Xqk5YA/Fj4KY08A8rahUMoMyW/+UZuIvkOBaY8cc+fpamAPSXFXDWirBH+l1vuAg5ammlRlMYYmIKcFCWBUtF29FbbZgUZS0cVJ78pyoikPW0dF03KNBQ+S756Ih5L4/HgJni+3fxnTW+Ud3er4/KATBpjwcbMu9CRUMnKfDIxOekNb8/xOtoeEraQ1bUWqfgedmtf7lWK1e7eDeLY+ZnpXEhKVS+2n/kgLv//pegGrpOAyplJnskaY/PNd5zUF0iOnss/h0TOe9Y6brOj3HGVp0h9GF6e6yVRy2ztLBiejOtQ/bc/Nd+13K2fnO7cHQg9RFGrHoK6c2UqrwKhz4iSyo/OFJzg4ddPF6rukywH4xb2I0CVGuXkl0GQ9tmMpqst6o3zf9nKfwYGj6e5rSnW2pY5NUc4l3iO+Op7acGw5R2xEUOLgkBXr9A8x1LAX27dsR/MYUWL8N+QwRMdOuVHOiV7rKLvEdCJbs/dIOacA8u5+3bpaOZg9BJXsh08yeDqWl3mq2ee+q4wXfwh7m648x1tn5shyG/5G7rVwDNQByB8MKUOj74qhQ4bOZpGdBttj82/PRjkF6joerlRMkynkrp4P04r8HerFL+JPdk6E3fqMstt5EL6GgkS5wSPJBWaX0fbeFVVxcfAc3+HTx5WgFuvvP0Ln6/lu+e/MV</diagram></mxfile>

=====================================================
== File: examples/oidc/apisix/conf/apisix.yaml
=====================================================
routes:
  #  OIDC authentication endpoints
  -
    id: jmap
    uri: /oidc/jmap
    service_id: jmap_service_oidc
    methods:
      - POST
      - OPTIONS
    plugin_config_id: jmap-plugin
    plugins:
      proxy-rewrite:
        uri: /jmap
  -
    id: jmap_websocket
    uri: /oidc/jmap/ws
    service_id: jmap_service_oidc
    enable_websocket: true
    methods:
      - GET
      - OPTIONS
    plugin_config_id: jmap-plugin
    plugins:
      proxy-rewrite:
        uri: /jmap/ws
  -
    id: jmap_session_oidc
    uri: /oidc/jmap/session
    service_id: jmap_service_oidc
    methods:
      - GET
      - OPTIONS
    plugin_config_id: jmap-plugin
    plugins:
      proxy-rewrite:
        uri: /jmap/session
  -
    id: download
    uri: /oidc/download/*
    service_id: jmap_service_oidc
    methods:
      - GET
      - POST
      - OPTIONS
    plugin_config_id: jmap-plugin
    plugins:
      proxy-rewrite:
        regex_uri:
          - "^/oidc/download/(.*)/(.*)"
          - "/download/$1/$2"

=====================================================
== File: examples/oidc/apisix/conf/config.yaml
=====================================================
deployment:
  role: data_plane
  role_data_plane:
    config_provider: yaml

ext-plugin:
  path_for_test: /tmp/runner.sock
  cmd: ['java', '-jar', '-DREDIS_PASSWORD=secret1', '-DREDIS_URL=redis.example.com:6379','-DAPP_REWRITE_XUSER_USERINFO_FIELD=email', '-Xmx1g', '-Xms1g', '/usr/local/apisix/token_revoker_plugin.jar']

=====================================================
== File: examples/oidc/README.md
=====================================================
# OIDC JMAP, IMAP and SMTP example with James, Apisix API Gateway, Keycloak, LDAP

====

This is example of an OIDC setup with James.

The API Gateway for example is [Apisix](https://apisix.apache.org/), we can use Apisix for websocket gateway, horizontal scaling, etc...

This [docker-compose](docker-compose.yml) will start the following services:

- apisix: The image `linagora/apisix:3.2.0-debian-javaplugin` was created by Linagora. It based on `apisix:3.2.0-debian`, it already contain apisix plugin for 
  SLO (Single Logout) and rewrite the `X-User` header. 
  - Dockerfile: [here](https://github.com/linagora/tmail-backend/blob/master/demo/apisix/Dockerfile)
  - Project `tmail-apisix-plugin-runner`: [here](https://github.com/linagora/tmail-backend/tree/master/demo/apisix/tmail-apisix-plugin-runner)
  - Apisix being the OIDC gateway against James by exposing two endpoints:
      - `POST /jmap` for JMAP requests against James with normal authentication
      - `POST /oidc/jmap` for JMAP request against James with a JWT token issued by the LemonLDAP
- james: Memory version using the LDAP and `XUserAuthenticationStrategy` for JMAP
- sso.example.com: keycloak image with a pre-configured `oidc` realm, `oidc` client (Authorization Code Flow, should dedicate for JMAP), `james-thunderbird` client (Client Credentials Flow, dedicated for IMAP/SMTP) and connected to the LDAP for its user base
- ldap: with a pre-provisioned user `james-user@tmail.com` and his password `secret`
- redis: for storage of the revoked token. This is optional, we can un-use it if we want to store it in-memory with Apisix standalone.

## Overall architecture

### JMAP

Here is an architecture diagram showing how Single Sign On works for this example:

![](_media/oidc-sso.png)

SSO auto-discovery might require the set up of a `.well-known/webfinger` endpoint described in
[this spec](https://openid.net/specs/openid-connect-discovery-1_0.html)
via external means (not provided here).

Here is an architecture diagram showing how Single Log Out works for this example, using the backchannel OIDC flow:

![](_media/oidc-slo.png)

### IMAP/SMTP
Here is an architecture diagram showing how to authenticate JAMES IMAP/SMTP using OIDC Provider:

![](_media/IMAP-SMTP-oidc.png)


## How to run it

```bash
docker-compose up -d
```


=====================================================
== File: examples/oidc/ldap/populate.ldif
=====================================================
dn: ou=people, dc=localhost
ou: people
objectClass: organizationalUnit

dn: ou=empty, dc=localhost
ou: empty
objectClass: organizationalUnit

dn: uid=james-user@localhost, ou=people, dc=localhost
objectClass: inetOrgPerson
uid: james-user@localhost
cn: james-user
sn: james-user
mail: james-user@localhost
userPassword: secret
description: James user

=====================================================
== File: mailbox/spring/src/test/README.md
=====================================================

Running these tests requires applying the openjpa javaagent. This is configured for you when running the tests through maven. 
In your IDE you will have to add the following JVM argument (the version may vary check the apache.openjpa.version property value in the top level pom.xml): 

```
-javaagent:${HOME}/.m2/repository/org/apache/openjpa/openjpa/3.2.0/openjpa-3.2.0.jar
```

=====================================================
== File: mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailBody.mustache
=====================================================
You receive this email because you recently exceeded a threshold related to the quotas of your email account.

{{#hasExceededSizeThreshold}}
You currently occupy more than {{sizeThreshold}} % of the total size allocated to you.
You currently occupy {{usedSize}}{{#hasSizeLimit}} on a total of {{limitSize}} allocated to you{{/hasSizeLimit}}.

{{/hasExceededSizeThreshold}}
{{#hasExceededCountThreshold}}
You currently occupy more than {{countThreshold}} % of the total message count allocated to you.
You currently have {{usedCount}} messages{{#hasCountLimit}} on a total of {{limitCount}} allowed for you{{/hasCountLimit}}.

{{/hasExceededCountThreshold}}
You need to be aware that actions leading to exceeded quotas will be denied. This will result in a degraded service.
To mitigate this issue you might reach your administrator in order to increase your configured quota. You might also delete some non important emails.

=====================================================
== File: mailbox/plugin/quota-mailing/src/main/resources/templates/QuotaThresholdMailSubject.mustache
=====================================================
Warning: Your email usage just exceeded a configured threshold

=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/body1.mustache
=====================================================
[BODY_1]

=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/body2.mustache
=====================================================
[BODY_2]

=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/subject2.mustache
=====================================================
[SUBJECT_2]

=====================================================
== File: mailbox/plugin/quota-mailing/src/test/resources/templates/subject1.mustache
=====================================================
[SUBJECT_1]

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/emailWith3Attachments.eml
=====================================================
To: Laura ROYET <laura.ro@linagora.com>
From: Laura Royet <laura.ro@linagora.com>
Subject: test
Message-ID: <cb415bdb-b27d-fc25-b91f-aae6b4774b71@linagora.com>
Date: Wed, 11 Jan 2017 11:52:35 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.6.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------36566F1E9D791340FFB75FF8"

This is a multi-part message in MIME format.
--------------36566F1E9D791340FFB75FF8
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit



-- 
Laura Royet


--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
 name="attachment1.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment1.odt"

UEsDBBQAAAgAAGJVK0pexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
dC54bWxQSwUGAAAAABEAEQBwBAAAjyUAAAAA
--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
 name="attachment2-nonIndexableAttachment.html"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment2-nonIndexableAttachment.odt"

PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtb3ppbGxhIiBsYW5nPSJlbiI+PGhlYWQ+
CI+PC9kaXY+PC9kaXY+PC9ib2R5PjwvaHRtbD4=
--------------36566F1E9D791340FFB75FF8
Content-Type: application/vnd.oasis.opendocument.text;
 name="attachment3.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment3.odt"

UEsDBBQAAAgAAG9VK0pexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
AAAAEgkAABNRVRBLUlORi9tYW5pZmVzdC54bWxQSwUGAAAAABEAEQBwBAAApyUAAAAA
--------------36566F1E9D791340FFB75FF8--

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailCustomStringHeader.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Subject: subject
MIME-Version: 1.0
Message-Id: <20100916151246.2A9384BA1@lenny>
From: a@test
To: b@test
Custom-header: custom header

Mail content

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/bodyMakeTikaToFail.eml
=====================================================
Date: Mon, 30 Jan 2017 11:51:35 +0100
From: Raphael OUAZANA <raph.ouazana@linagora.com>
To: OUAZANA Raphael <raph.ouazana@linagora.com>
Subject: subject should be parsed
Message-ID: <255cb2b85feee171cd9a88bda109c9f0@linagora.com>
X-Sender: raph.ouazana@linagora.com
User-Agent: Roundcube Webmail/1.1.4

Return-Path: <iphone@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
	 by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
	 Wed, 21 Mar 2012 14:51:59 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
	by lenny.obm.lng.org (Postfix) with ESMTP id E495D32929
	for <usera@obm.lng.org>; Wed, 21 Mar 2012 14:51:58 +0100 (CET)
Message-ID: <4F69DD0E.3010502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:52:14 +0100
 From: iphone <iphone@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; 
rv:1.9.2.28) Gecko/20120306 Lightning/1.0b2 Thunderbird/3.1.20
MIME-Version: 1.0
To: usera <usera@obm.lng.org>
Subject: Fwd: Re: email with sign
Content-Type: multipart/mixed;
  boundary="------------080809000000030101030405"

This is a multi-part message in MIME format.
--------------080809000000030101030405
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

new email text part

--------------080809000000030101030405
Content-Type: message/rfc822;
  name="Re: email with sign.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
  filename="Re: email with sign.eml"

Return-Path: <usera@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
	 by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
	 Wed, 21 Mar 2012 14:19:29 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
	by lenny.obm.lng.org (Postfix) with ESMTP id 47EC832D51
	for <iphone@obm.lng.org>; Wed, 21 Mar 2012 14:19:29 +0100 (CET)
Message-ID: <4F69D570.9090502@obm.lng.org>

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/alternative_simple.eml
=====================================================
MIME-Version: 1.0
Subject: Test
From: Benoit TELLIER <btellier@linagora.com>
To: Benoit TELLIER <btellier@linagora.com>
Date: Tue, 13 Feb 2024 23:01:18 +0000
Message-ID: <Mime4j.17d.c7b7d059b303c215.18da4b4076b@linagora.com>
Content-Type: multipart/alternative;
 boundary="-=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-"

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Test

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div>Test<br><br></div>

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=---

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailCustomDateHeader.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Subject: my subject test
MIME-Version: 1.0
Message-Id: <20100916151246.2A9384BA1@lenny>
From: B <b@test>
To: c@test
Custom-header: 2015/09/02

Mail content

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Main test message...

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn--



=====================================================
== File: mailbox/opensearch/src/test/resources/eml/mailWithHeaders.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Date: Fri, 17 Sep 2010 17:12:26 +0200
Subject: my subject
To: a@test, B <b@test>
Cc: c@test
Bcc: dD <d@test>
MIME-Version: 1.0
Message-Id: <20100917151246.2A9384BA1@lenny>
From: Ad Min <admin@opush.test>

Mail content

-- 
Ad Min

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/htmlContent.txt
=====================================================
Linked Applications OpenPaas-Linagora Stash - OpenPaas Jenkins - OpenPaas Configure… Dashboards Projects Issues Agile More Create Help Online Help JIRA Agile Help Keyboard Shortcuts About JIRA JIRA Credits Administration JIRA administration Projects Issues User management System Add-ons Profile Atlassian Marketplace My JIRA Home Dashboard Agile Issue Navigator Disable new project navigation Log Out OpenPaaS RSE OR-2349 Docker-compose doesn't activate attachments and dwld/upld url are wrongly populated Edit Comment Assign More Agile Board Rank to Top Rank to Bottom Log Work Attach Files Attach Screenshot Add Drawio Diagram Voters Stop Watching Watchers Create Sub-Task Convert to Sub-Task Create branch Move Link Clone Labels Delete Stop Progress Resolve Issue Close Issue Admin Add field Where is my field? Permission Helper Notification Helper Export XML Word Printable Details Type: Bug Status: Progressing (View Workflow) Priority: Major Resolution: Unresolved Affects Version/s: None Fix Version/s: None Component/s: None Labels: None Labels Rank (Obsolete): 9223372036854775807 Acceptance Criteria: 0/1 Hide checkedShow checked Tested show more show less Description                {
                    "name" : "uploadUrl",
                    "value" : "http://10.69.0.163:1080/jmap/upload",
                    "_id" : ObjectId("5785f85cd7f4033c00fc606d")
                }, 
                {
                    "name" : "downloadUrl",
                    "value" : "http://10.69.0.163:1080/jmap/download",
                    "_id" : ObjectId("5785f85cd7f4033c00fc606c")
                }, 
 should be replaced with               {
                    "name" : "uploadUrl",
                    "value" : "http://10.69.0.163:1080/upload",
                    "_id" : ObjectId("5785f85cd7f4033c00fc606d")
                }, 
                {
                    "name" : "downloadUrl",
                    "value" : "http://10.69.0.163:1080/download",
                    "_id" : ObjectId("5785f85cd7f4033c00fc606c")
                }, 
               {
                   "name" : "composer.attachments",
                    "value" : true
               }

 Activity All Comments Work Log History Activity There are no comments yet on this issue. Comment Paragraph Heading 1 Heading 2 Heading 3 Heading 4 Heading 5 Heading 6 Preformatted Paragraph quote Block quote Strikethrough Superscript Subscript Citation External link Mail link Anchor link Attachment link Attachment link External image Attached image Attached image User mention Table Code Preformatted Panel Horizontal ruler Style BoldItalicUnderlineText colorMore colorsMore LinkImage Bullet listNumbered list IconsOther Lock / Unlock Preview comment This comment will be Viewable by All Users All Users Administrators Developers Users Viewable by All Users Cancel Comment People Assignee: Stephane COLSON Reporter: Stephane COLSON Votes: 0 Watchers: 1 Stop watching this issue Dates Created: 4 hours ago Updated: 4 hours ago Development 1 branch Updated 33 minutes ago 1 pull request OPEN Updated 33 minutes ago Create branch Agile View on Board Issue deployment Atlassian JIRA Project Management Software (v6.4.5#64020-sha1:78acd6c) About JIRA Report a problem Powered by a free Atlassian JIRA open source license for OpenPaas. Try JIRA - bug tracking software for your team. Atlassian

=====================================================
== File: mailbox/opensearch/src/test/resources/eml/alternative.eml
=====================================================
MIME-Version: 1.0
Subject: Test
From: Benoit TELLIER <btellier@linagora.com>
To: Benoit TELLIER <btellier@linagora.com>
Date: Tue, 13 Feb 2024 23:01:18 +0000
Message-ID: <Mime4j.17d.c7b7d059b303c215.18da4b4076b@linagora.com>
Content-Type: multipart/mixed;
 boundary="-=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-"

---=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-
Content-Type: multipart/alternative;
 boundary="-=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-"

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

Test

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=-
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div>Test<br><br></div>

---=Part.17e.48ac92d73c356567.18da4b40791.360a293e2f389efe=---

---=Part.17f.732e3d28e1c76db4.18da4b40791.62ef5e3fa995057d=-
Content-Type: application/json; name="=?US-ASCII?Q?id=5Frsa.txt?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64

c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFDa0dXMkp5c2lKR2hQZXdBOXRr
bVFFQm5EVjRaQ0llLy92ZFoyV0RybnZiNlZLQzdpWldjODFpU1ZkTFcxUkRBTll4c3ExN0dQanpV
OFlWdk9sRkFJSk1WTm9ESWhuQWtYOU9VUUJpd1hpOHlHZ3FLNGR0RmIxczJBRzNrQmxNUFFJOE5K
MkpLT2Z5MW51VnJubEtoVDlCVnpYMm5iSjNOak9PZlkxQlJEaDZZcVl1a2RuejBUT2k1Rkp1YUJT
NDZQemx3eWdIa0dzeXBLVHM2Y2FUNjBRdjl3eWFadm4yenN1RmNML3o2Mmd3aGZyZGFsakF1UGRX
cERlNG1IRVFmMXA2SXNRMDdPb0lwTmRHQ0tLZHRZQlVTcktzTXRpMllLUGZpSzB2WGU1L3owRWJE
VlRja1BrY3NwQ2cwYVZuZTB2eFVsRGt2U2pwV2tiQkZ0YTk5ekJjOVlJL0ROK28vRmtONlFTdXV5
U29tNDZkamZpUjdqSzNMRmJKUkhaem9BblNvaTZvRlR0MW1LWjNzam44bnZWUG1PV3pJWHY0Tm1O
R1ExZHFrV1hXcUtyQjlIZUZiQnRPWVAzaEkxQ0kvaVhNbVR1SkdvcHVTUmlTNW1QZXlSQWV6VGtk
UG8vZ2NSVWNzbklhVW1EallUWHBFNzU3Yk5LWVNHbFJsS3FrbEhKc2JveEdTK0NaVzBJS2dZeTdG
cmZRZ1FGMTdvaUpWM1JJQ1VHcU9rM1I2VnZOYlhlL2VmZS9IT24xd0lZUS9qVGRzY0hCamRIM2FF
MmY4Y3dVS1IzNUtWNlJ1SE4vYVpiekxiVkJxUEMvUTcwd3NMQlloV29Da1dRMElUUmxGV2N3bnN3
VTE5NnlGWkVHSmthOUNEaHZQdUVBV0NLWnFRT3gyMnRoYWVSQlE9PSBiZW53YUBob3Jpem9uCg==

=====================================================
== File: mailbox/memory/src/test/resources/test.eml
=====================================================

=====================================================
== File: mailbox/tika/src/test/resources/documents/Text.txt
=====================================================
This is some awesome text text.


=====================================================
== File: mailbox/api/src/test/resources/eml/twoAttachmentsApi.eml
=====================================================
Return-Path: <from@linagora.com>
X-Priority: 3 (Normal)
From: "From"
 <from@linagora.com>
To: "To"
 <to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

<b>html</b>

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_015.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_015.jpg"


=====================================================
== File: mailbox/README.md
=====================================================
Apache James Mailbox project
============================

The James Mailbox project aims to provide an email (message) store. The main user of the Mailbox project is James Server
project. The implementations can be used standalone and do not depend on James Server.

The project defines the Mailbox API and has several implementations that you can use. More details bellow.

Overview
========

Apache James Mailbox has the following project (Maven) structure:

~~~
|-- api             -- Mailbox API
|-- jpa             -- Database Mailbox implementation using Java Persistence API
|-- lucene          -- Email indexing module with Apache Lucene
|-- memory          -- In memory Mailbox implementation - good for testing
|-- spring          -- Spring module - starts a specific mailbox implementation
|-- store           -- Common base/utility classes used in all mailbox implementations
|-- tool            -- Database migration/mailbox export tool
~~~

Mailbox JPA
===========

Persist email messages inside any database that is supported by your Java Persistence Api provider. Currently James uses
OpenJPA (http://openjpa.apache.org/), but it's easy to implement your own.

Mailbox 'In memory' message store
=================================

In module **memory**, does not persist emails. It just keeps them in memory. Fast, and good for testing.
**Note:** Not to be used in production.


Building
========

The primary build tool for Apache James Mailbox is maven 3.

On a new checkout start by running
~~~
    $ mvn clean package
~~~

This will compiled all modules

For just building without running junit tests:
~~~

=====================================================
== File: mailbox/var/store/derby/db.lck
=====================================================
?$a816c00e-0188-957f-71f4-00001716d8f0

=====================================================
== File: mailbox/var/store/derby/service.properties
=====================================================
#/home/interview1/Documents/james-project/mailbox/var/store/derby
# ********************************************************************
# ***                Please do NOT edit this file.                 ***
# *** CHANGING THE CONTENT OF THIS FILE MAY CAUSE DATA CORRUPTION. ***
# ********************************************************************
#Wed Jun 07 17:55:39 ICT 2023
SysconglomeratesIdentifier=32
SyscolumnsIdentifier=144
derby.serviceLocale=en_US
SystablesIdentifier=96
SysconglomeratesIndex3Identifier=81
derby.storage.propertiesId=16
derby.serviceProtocol=org.apache.derby.database.Database
SyscolumnsIndex1Identifier=161
SysschemasIndex2Identifier=225
SystablesIndex2Identifier=129
SyscolumnsIndex2Identifier=177
SysconglomeratesIndex2Identifier=65
SysschemasIndex1Identifier=209
SysschemasIdentifier=192
SystablesIndex1Identifier=113
SysconglomeratesIndex1Identifier=49
#--- last line, don't put anything after this line ---

=====================================================
== File: mailbox/var/store/derby/log/README_DO_NOT_TOUCH_FILES.txt
=====================================================

# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE RECOVERY   ***
# *** SYSTEM. EDITING, ADDING, OR DELETING FILES IN THIS DIRECTORY      ***
# *** WILL CAUSE THE DERBY RECOVERY SYSTEM TO FAIL, LEADING TO          ***
# *** NON-RECOVERABLE CORRUPT DATABASES.                                ***
# *************************************************************************

=====================================================
== File: mailbox/var/store/derby/README_DO_NOT_TOUCH_FILES.txt
=====================================================

# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY AND SUBDIRECTORIES CONSTITUTE A DERBY     ***
# *** DATABASE, WHICH INCLUDES THE DATA (USER AND SYSTEM) AND THE       ***
# *** FILES NECESSARY FOR DATABASE RECOVERY.                            ***
# *** EDITING, ADDING, OR DELETING ANY OF THESE FILES MAY CAUSE DATA    ***
# *** CORRUPTION AND LEAVE THE DATABASE IN A NON-RECOVERABLE STATE.     ***
# *************************************************************************

=====================================================
== File: mailbox/var/store/derby/seg0/README_DO_NOT_TOUCH_FILES.txt
=====================================================

# *************************************************************************
# ***              DO NOT TOUCH FILES IN THIS DIRECTORY!                ***
# *** FILES IN THIS DIRECTORY ARE USED BY THE DERBY DATABASE TO STORE   *** 
# *** USER AND SYSTEM DATA. EDITING, ADDING, OR DELETING FILES IN THIS  ***
# *** DIRECTORY WILL CORRUPT THE ASSOCIATED DERBY DATABASE AND MAKE     ***
# *** IT NON-RECOVERABLE.                                               ***
# *************************************************************************

=====================================================
== File: mailbox/var/store/lucene/write.lock
=====================================================

=====================================================
== File: mailbox/store/src/test/resources/eml/pgpSignedMail.eml
=====================================================
Return-Path: <bounce-debian-security-announce=benwa=minet.net@lists.debian.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Wed, 03 Jun 2015 21:19:59 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx2.minet.net (Postfix) with ESMTP id 8A9DAA27DA1
	for <benwa@minet.net>; Wed,  3 Jun 2015 21:20:03 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=unavailable
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id cF6J0AAnzsTX for <benwa@minet.net>;
	Wed,  3 Jun 2015 19:20:02 +0000 (UTC)
Received-SPF: None (no SPF record) identity=mailfrom; client-ip=82.195.75.100; helo=bendel.debian.org; envelope-from=bounce-debian-security-announce=benwa=minet.net@lists.debian.org; receiver=benwa@minet.net
Received: from bendel.debian.org (bendel.debian.org [82.195.75.100])
	(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx2.minet.net (Postfix) with ESMTPS id 7F69FA27D98
	for <benwa@minet.net>; Wed,  3 Jun 2015 21:20:01 +0200 (CEST)
Received: from localhost (localhost [127.0.0.1])
	by bendel.debian.org (Postfix) with QMQP
	id 1C2F6275; Wed,  3 Jun 2015 19:14:50 +0000 (UTC)
Old-Return-Path: <carnil@master.debian.org>
X-Original-To: lists-debian-security-announce@bendel.debian.org
Delivered-To: lists-debian-security-announce@bendel.debian.org
Received: from localhost (localhost [127.0.0.1])
	by bendel.debian.org (Postfix) with ESMTP id 7EFBF228
	for <lists-debian-security-announce@bendel.debian.org>; Wed,  3 Jun 2015 19:14:39 +0000 (UTC)
X-Amavis-Spam-Status: No, score=-8.99 tagged_above=-10000 required=5.3
	tests=[BAYES_00=-2, DIGITS_LETTERS=1, FVGT_m_MULTI_ODD=0.02,
	LDO_WHITELIST=-5, OUR_MTA_MSGID=2, PGPSIGNATURE=-5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from bendel.debian.org ([127.0.0.1])
	by localhost (lists.debian.org [127.0.0.1]) (amavisd-new, port 2525)
	with ESMTP id RiKdt2PVwXOm
	for <lists-debian-security-announce@bendel.debian.org>;
	Wed,  3 Jun 2015 19:14:34 +0000 (UTC)
Received: from master.debian.org (master.debian.org [IPv6:2001:41b8:202:deb:216:36ff:fe40:4001])
	(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))
	(Client CN "master.debian.org", Issuer "Debian SMTP CA" (not verified))
	by bendel.debian.org (Postfix) with ESMTPS id ABE761B7
	for <debian-security-announce@lists.debian.org>; Wed,  3 Jun 2015 19:14:34 +0000 (UTC)
Received: from carnil by master.debian.org with local (Exim 4.84)
	(envelope-from <carnil@master.debian.org>)
	id 1Z0E7U-0004Bc-Jv

=====================================================
== File: mailbox/store/src/test/resources/eml/htmlMail.eml
=====================================================
Delivered-To: mister@james.org
Received: by 10.28.170.202 with SMTP id t193csp327634wme;
        Thu, 4 Jun 2015 00:36:15 -0700 (PDT)
X-Received: by 10.180.77.195 with SMTP id u3mr5042880wiw.30.1433403375307;
        Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Return-Path: <bounces+1453977-062b-mister=james.org@email.airbnb.com>
Received: from o7.email.airbnb.com (o7.email.airbnb.com. [167.89.32.249])
        by mx.google.com with ESMTPS id i2si5691730wjz.123.2015.06.04.00.36.13
        for <mister@james.org>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Thu, 04 Jun 2015 00:36:15 -0700 (PDT)
Received-SPF: pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) client-ip=167.89.32.249;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of bounces+1453977-062b-mister=james.org@email.airbnb.com designates 167.89.32.249 as permitted sender) smtp.mail=bounces+1453977-062b-mister=james.org@email.airbnb.com;
       dkim=pass header.i=@email.airbnb.com;
       dmarc=pass (p=REJECT dis=NONE) header.from=airbnb.com
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=email.airbnb.com;
	h=from:to:subject:mime-version:content-type:content-transfer-encoding;
	s=s20150428; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=EhC2QHKb5+63egDD
	qDCAepUELCeUZXCkw8+31kGT+O1va3iAKvQSAvzXJ3qJlIL9FgdeFk8sR78Vszn/
	A73vp6NGjAW60M4gUZjxEOIPzGKIS95KfmHxg10fXUOFW0uePojNEg4ZPCcuitrZ
	HuWvzHK5I2siGnqupiivwxDgs5c=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sendgrid.info;
	h=from:to:subject:mime-version:content-type:content-transfer-encoding:x-feedback-id;
	s=smtpapi; bh=2mhWUwzjtQTC0KljgpaEsuvrqok=; b=FPiYMmNJLCrL2e8v/0
	DQC4voofe8nuuE7rhXZ25oqNAhAQja4oKIysJ1qAME2aEaqh+N5aJlCEuHrSG/7+
	NAQ0OY8KaJ2zlnxAbmgJETOjnf4oGdAa+nU/nVVEPfN2NRcBCNLGQZ80U4T5k8Xi
	PakIuZvKDTRq7PiosSCSHT/FQ=
Received: by filter0490p1mdw1.sendgrid.net with SMTP id filter0490p1mdw1.13271.556FFFE7B
        2015-06-04 07:36:09.249601779 +0000 UTC
Received: from i-dee0850e.inst.aws.airbnb.com (ec2-54-90-154-187.compute-1.amazonaws.com [54.90.154.187])
	by ismtpd-017 (SG) with ESMTP id 14dbd7fa6b4.779a.254b43
	for <mister@james.org>; Thu, 04 Jun 2015 07:36:09 +0000 (UTC)
Received: by i-dee0850e.inst.aws.airbnb.com (Postfix, from userid 1041)
	id 19CBA24C60; Thu,  4 Jun 2015 07:36:09 +0000 (UTC)
Date: Thu, 04 Jun 2015 07:36:08 +0000
From: Airbnb <discover@airbnb.com>
To: mister@james.org
Message-ID: <556fffe8cac78_7ed0e0fe204457be@i-dee0850e.mail>
Subject: Text and Html not similar
Mime-Version: 1.0
Content-Type: multipart/alternative;
 boundary="--==_mimepart_556fffe8c7e84_7ed0e0fe20445637";
 charset=UTF-8
Content-Transfer-Encoding: 7bit
X-User-ID: 32692788
X-Locale: fr
X-Category: engagement
X-Template: low_intent_top_destinations
recipients:

=====================================================
== File: mailbox/store/src/test/resources/eml/mail4.eml
=====================================================
Return-Path: <mailet-api-return-812-benwa=minet.net@james.apache.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Fri, 15 May 2015 08:36:03 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx2.minet.net (Postfix) with ESMTP id 5AC87A19A4F
	for <benwa@minet.net>; Fri, 15 May 2015 08:36:03 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id 2xNJ-Rh-AWoj for <benwa@minet.net>;
	Fri, 15 May 2015 06:36:02 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=mailet-api-return-812-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
	dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
	by mx1.minet.net (Postfix) with SMTP id 24F75686039
	for <benwa@minet.net>; Fri, 15 May 2015 08:36:01 +0200 (CEST)
Received: (qmail 81830 invoked by uid 500); 15 May 2015 06:36:00 -0000
Mailing-List: contact mailet-api-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Help: <mailto:mailet-api-help@james.apache.org>
List-Unsubscribe: <mailto:mailet-api-unsubscribe@james.apache.org>
List-Post: <mailto:mailet-api@james.apache.org>
List-Id: <mailet-api.james.apache.org>
Reply-To: mailet-api@james.apache.org
Delivered-To: mailing list mailet-api@james.apache.org
Received: (qmail 81730 invoked by uid 99); 15 May 2015 06:36:00 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
    by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 15 May 2015 06:36:00 +0000
Date: Fri, 15 May 2015 06:35:59 +0000 (UTC)
From: "Eric Charles (JIRA)" <mailet-api@james.apache.org>
To: "zzz" <a-mailet-api@james.apache.org>
Cc: monkey@any.com
Bcc: monkey@any.com
Message-ID: <JIRA.12825882.1430301328000.124152.1431671759942@Atlassian.JIRA>
In-Reply-To: <JIRA.12825882.1430301328000@Atlassian.JIRA>
References: <JIRA.12825882.1430301328000@Atlassian.JIRA> <JIRA.12825882.1430301328925@arcas>
Subject: [jira] [Resolved] (MAILET-94) James Mailet should use latest
 version of other James subprojects
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394

=====================================================
== File: mailbox/store/src/test/resources/eml/recursiveMail.eml
=====================================================
Return-Path: <mbaechler@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Wed, 10 Jun 2015 10:45:29 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.2.28] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 7F33E728
	for <btellier@linagora.com>; Wed, 10 Jun 2015 10:45:28 +0200 (CEST)
Message-ID: <5577F927.2040409@linagora.com>
Date: Wed, 10 Jun 2015 10:45:27 +0200
From: Matthieu Baechler <mbaechler@linagora.com>
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Icedove/31.7.0
MIME-Version: 1.0
To: btellier@linagora.com
Subject: Fwd: Courbe Sprint
References: <556EA5E0.8010008@linagora.com>
In-Reply-To: <556EA5E0.8010008@linagora.com>
X-Forwarded-Message-Id: <556EA5E0.8010008@linagora.com>
Content-Type: multipart/mixed;
 boundary="------------080603090509090707040003"

This is a multi-part message in MIME format.
--------------080603090509090707040003
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Forward as attachment !



--------------080603090509090707040003
Content-Type: message/rfc822;
 name="Courbe Sprint.eml"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
 filename="Courbe Sprint.eml"

Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Wed, 03 Jun 2015 08:59:45 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.43.36] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 4FBAF720
	for <mbaechler@linagora.com>; Wed,  3 Jun 2015 08:59:45 +0200 (CEST)
Message-ID: <556EA5E0.8010008@linagora.com>

=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithNonIndexableAttachment.eml
=====================================================
Return-Path: <laura.ro@linagora.com>
MIME-Version: 1.0
Delivered-To: laura.ro@linagora.com
Content-Type: multipart/mixed;
 boundary="-=Part.0.16b49c355c1c1b54.158b4d6fd1b.bd3741f90275bb0a=-"
From: Laura ROYET <laura.ro@linagora.com>
Sender: Laura ROYET <laura.ro@linagora.com>
To: Laura ROYET <laura.ro@linagora.com>
Subject: test
Message-ID: 1480502737913
Date: Wed, 30 Nov 2016 10:45:38 +0000

---=Part.0.16b49c355c1c1b54.158b4d6fd1b.bd3741f90275bb0a=-
Content-Type: text/html; charset=utf-8; name="=?US-ASCII?Q?test.html?="
Content-Disposition: attachment
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtb3ppbGxhIiBsYW5nPSJlbiI+PGhlYWQ+Cjxt
ZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0
PVVURi04Ij4KICAgIAoKCgoKCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KPG1ldGEgaHR0cC1lcXVp
dj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1FZGdlIj4KPG1ldGEgbmFtZT0iYXBwbGlj
YXRpb24tbmFtZSIgY29udGVudD0iSklSQSIgZGF0YS1uYW1lPSJqaXJhIiBkYXRhLXZlcnNpb249
IjYuNC41Ij48bWV0YSBuYW1lPSJhanMtc2VydmVyUmVuZGVyZWRWaWV3SXNzdWUiIGNvbnRlbnQ9
InRydWUiPgo8bWV0YSBuYW1lPSJhanMtaGFzQ3JpdGVyaWFBdXRvVXBkYXRlIiBjb250ZW50PSJ0
cnVlIj4KPG1ldGEgbmFtZT0iYWpzLXZpZXdpc3N1ZS11c2UtaGlzdG9yeS1hcGkiIGNvbnRlbnQ9
ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLXZpZXdpc3N1ZS1tYXgtY2FjaGUtc2l6ZSIgY29udGVu
dD0iIj4KPG1ldGEgbmFtZT0iYWpzLWF1dG9jb21wbGV0ZS1lbmFibGVkIiBjb250ZW50PSJ0cnVl
Ij4KPG1ldGEgbmFtZT0iYWpzLXZpZXctaXNzdWUtdHJhY2Uta2V5IiBjb250ZW50PSJqaXJhLmlz
c3VlLnJlZnJlc2hlZCI+CjxtZXRhIG5hbWU9ImFqcy12aWV3LWlzc3VlLXBzeWNoby1rZXkiIGNv
bnRlbnQ9ImppcmEucHN5Y2hvLmlzc3VlLnJlZnJlc2hlZCI+CjxtZXRhIG5hbWU9ImFqcy12aWV3
LWlzc3VlLXJlZnJlc2hlZC1jYWNoZWQta2V5IiBjb250ZW50PSJqaXJhLnBzeWNoby5pc3N1ZS5y
ZWZyZXNoZWQuY2FjaGVkIj4KPG1ldGEgbmFtZT0iYWpzLXJldHVybi10by1zZWFyY2gtdHJhY2Ut
a2V5IiBjb250ZW50PSJqaXJhLnJldHVybmVkLnRvLnNlYXJjaCI+CjxtZXRhIG5hbWU9ImFqcy1y
ZXR1cm4tdG8tc2VhcmNoLXBzeWNoby1rZXkiIGNvbnRlbnQ9ImppcmEucHN5Y2hvLnJldHVybmVk
LnRvLnNlYXJjaCI+CjxtZXRhIG5hbWU9ImFqcy1kZWZhdWx0LWF2YXRhci11cmwiIGNvbnRlbnQ9
Imh0dHBzOi8vY2kub3Blbi1wYWFzLm9yZy9qaXJhL3NlY3VyZS91c2VyYXZhdGFyP3NpemU9eHNt
YWxsJmFtcDthdmF0YXJJZD0xMDEyMyI+CjxtZXRhIG5hbWU9ImFqcy1qaXJhLmlzc3Vlcy5wcmVm
ZXJyZWQubGF5b3V0LmtleSIgY29udGVudD0ic3BsaXQtdmlldyI+CjxtZXRhIG5hbWU9ImFqcy1t
YXgtcmVjZW50LXNlYXJjaGVycyIgY29udGVudD0iMTAiPgo8bWV0YSBuYW1lPSJhanMtamlyYS1i
YXNlLXVybCIgY29udGVudD0iaHR0cHM6Ly9jaS5vcGVuLXBhYXMub3JnL2ppcmEiPgo8bWV0YSBu
YW1lPSJhanMtZGV2LW1vZGUiIGNvbnRlbnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLWNvbnRl
eHQtcGF0aCIgY29udGVudD0iL2ppcmEiPgo8bWV0YSBuYW1lPSJhanMtdmVyc2lvbi1udW1iZXIi
IGNvbnRlbnQ9IjYuNC41Ij4KPG1ldGEgbmFtZT0iYWpzLWJ1aWxkLW51bWJlciIgY29udGVudD0i
NjQwMjAiPgo8bWV0YSBuYW1lPSJhanMtaXMtYmV0YSIgY29udGVudD0iZmFsc2UiPgo8bWV0YSBu
YW1lPSJhanMtaXMtcmMiIGNvbnRlbnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLWlzLXNuYXBz
aG90IiBjb250ZW50PSJmYWxzZSI+CjxtZXRhIG5hbWU9ImFqcy1pcy1taWxlc3RvbmUiIGNvbnRl
bnQ9ImZhbHNlIj4KPG1ldGEgbmFtZT0iYWpzLXJlbW90ZS11c2VyIiBjb250ZW50PSJzY29sc29u
Ij4KPG1ldGEgbmFtZT0iYWpzLXJlbW90ZS11c2VyLWZ1bGxuYW1lIiBjb250ZW50PSJTdGVwaGFu
ZSBDT0xTT04iPgo8bWV0YSBuYW1lPSJhanMtdXNlci1sb2NhbGUiIGNvbnRlbnQ9ImVuX1VTIj4K
PG1ldGEgbmFtZT0iYWpzLXVzZXItbG9jYWxlLWdyb3VwLXNlcGFyYXRvciIgY29udGVudD0iLCI+

=====================================================
== File: mailbox/store/src/test/resources/eml/mailWithLongHeaders.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment
header: 012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798012345679801234567980123456798

# Hello

```
Code snipset
```

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/calendar2.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Will be better for me, thx

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
 <p>Will be better for me, thx</p>
</html>

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="utf-8"; method=COUNTER
Content-Disposition: attachment;
 filename="attachment.txt"
Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--

=====================================================
== File: mailbox/store/src/test/resources/eml/signedMessage.eml
=====================================================
Return-Path: <client@linagora.com>
From: Important Client <client@linagora.com>
To: Big Boss <big.boss@linagora.com>, Big big boss <big.big.boss@linagora.com>
Subject: Fwd: Re: Deploying production instances of James
Date: Fri, 17 Nov 2017 11:50:12 +0100
Message-ID: <3927114.HFsDrDgxHn@domain.com>
Organization: Linagora
MIME-Version: 1.0
Content-Type: multipart/signed; boundary="nextPart2399737.qbvXs1L0ps"; micalg="pgp-sha1"; protocol="application/pgp-signature"

--nextPart2399737.qbvXs1L0ps
Content-Type: multipart/mixed; boundary="nextPart3147505.khcI58SeaZ"
Content-Transfer-Encoding: 7Bit

This is a multi-part message in MIME format.

--nextPart3147505.khcI58SeaZ
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain; charset="iso-8859-1"

For your information,

--nextPart3147505.khcI58SeaZ
Content-Type: message/rfc822
Content-Disposition: inline; filename="message suivi"
Content-Description: Harold Goguelin <hgoguelin@linagora.com>: Re: La Cerise - certificat =?UTF-8?B?RXhwaXLDqQ==?=

Return-Path: <project.manager@linagora.com>
Subject: Re: Deploying production instances of James
To: Important Client <client@linagora.com>
From: Project manager <project.manager@linagora.com>
Organization: Linagora
Message-ID: <c66d7ca6-24R2-d6ec-abac-c1f72ca428dd@linagora.com>
Date: Fri, 17 Nov 2017 11:39:27 +0100
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="------------51EED611A8498A33106C3AAD"
Content-Language: fr

 This is a multi-part message in MIME format.
--------------51EED611A8498A33106C3AAD
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Transfer-Encoding: 8bit

Message envoyé grâce à OBM <http://obm.org>, la Communication Libre par 
Linagora <http://www.linagora.com/>

--------------51EED611A8498A33106C3AAD
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit


=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithSimpleContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/mail5.eml
=====================================================
Date: Fri, 15 May 2015 06:35:59 +0000 (UTC)
From: "Luc DUZAN (JIRA)" <luc.duzan@james.apache.org>
To: "zzz" <mailet-api@james.apache.org>
Cc: any@any.com
Bcc: any@any.com
Message-ID: <JIRA.1234567890@Atlassian.JIRA>
Subject: This is a mail about mail!
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

This is the body of the mail


=====================================================
== File: mailbox/store/src/test/resources/eml/multiAttachmentsWithOneWrongContentDisposition.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Mon, 27 Feb 2017 05:24:55 +0100
X-Sieve: CMU Sieve 2.2
Received: from [192.168.12.138] (unknown [1.55.245.4])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 688BF7A9
	for <from@linagora.com>; Mon, 27 Feb 2017 05:24:54 +0100 (CET)
To: to@linagora.com
From: Lina <from@linagora.com>
Subject: MultiAttachment
Message-ID: <13d4375e-a4a9-f613-06a1-7e8cb1e0ea93@linagora.com>
Date: Mon, 27 Feb 2017 11:24:48 +0700
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------64D8D789FC30153D6ED18258"

This is a multi-part message in MIME format.
--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

Send


--------------64D8D789FC30153D6ED18258
Content-Type: text/plain; charset=UTF-8;
 name="text1"
Content-Transfer-Encoding: base64
Content-Disposition: wrongDisposition;
 filename="text1"

LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFb2dJQkFBS0NBUUVBeDdQRzAr
RS8vRU1wbTdJZ0k1UTlUTURTRnlhLzFoRSt2dlRKcmswaUdGbGxQZUhMCkE1L1ZsVE0wWVdn
RzZYNTBxaU1mRTNWTGF6ZjJjMTlpWHJUMG1xLzIxUFoxd0Zub2d2NHp4VU5haWgrQm5nNjIK
RjBTeXJ1RS9PL05qcXhoL0NjcTZLL2UwNVRWNFQ2NDNVU3hBZUcwS3BwbVlXOXg4SEEvR3ZW
ODMyYXBadXhrVgppNk5Wa0RCcmZ6YVVDd3U0ekgrSHdPdi9wSTg3RTdLY2NIWUMrK0JpYWoz
Cg==
--------------64D8D789FC30153D6ED18258
Content-Type: application/vnd.ms-publisher;
 name="text2"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="text2"

c3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFCQVFESHM4YlQ0VC84UXltYnNp

=====================================================
== File: mailbox/store/src/test/resources/eml/spamMail.eml
=====================================================
Return-Path: <root-bounces@listes.minet.net>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Wed, 03 Jun 2015 11:05:45 +0200
X-Sieve: CMU Sieve 2.4
Received: from smtp.minet.net (smtp.minet.net [192.168.102.18])
	by mx1.minet.net (Postfix) with ESMTP id F06FE610F72;
	Wed,  3 Jun 2015 11:05:48 +0200 (CEST)
Received: from listes.minet.net (listes.minet.net [192.168.102.29])
	by smtp.minet.net (Postfix) with ESMTP id AAB15610F70;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=minet.net; s=mail;
	t=1433322348; bh=8OtmVRMX7IWWyQo8WQIi5rKeDEQFghSX2r1WN9/pqUk=;
	h=From:Date:To:Subject:List-Id:List-Unsubscribe:List-Post:List-Help:
	 List-Subscribe:From;
	b=UkthSFXn5mtPnn7sYvDJIxgCk1O36L0p+hTOnI/xTF2WRMGJyXtLyCdFdE5jQ5gE4
	 EGNdhwmfjaKsoE7IDtc/4GrPvbnM8i9ojpSOBW1hXJPOeYnRgah/4gsXsMJWvmmq/A
	 4oTnw8ZswFXiShDmBMyaSEZuVrWTdaPBgUhVhGw8=
Received: from listes.minet.net (listes.minet.net [127.0.0.1])
	by listes.minet.net (Postfix) with ESMTP id 9CD5BA27FF9;
	Wed,  3 Jun 2015 09:05:48 +0000 (UTC)
X-Original-To: root@listes.minet.net
Delivered-To: root@listes.minet.net
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
 by listes.minet.net (Postfix) with ESMTP id B8C1FA27FEF
 for <root@listes.minet.net>; Wed,  3 Jun 2015 09:05:46 +0000 (UTC)
Received: from localhost (spam.minet.net [192.168.102.97])
 by mx1.minet.net (Postfix) with ESMTP id AD28B610F6D
 for <root@listes.minet.net>; Wed,  3 Jun 2015 11:05:46 +0200 (CEST)
Content-Type: multipart/mixed; boundary="----------=_1433322346-12583-0"
Content-Transfer-Encoding: 7bit
MIME-Version: 1.0
From: "Content-filter at spam.minet.net" <postmaster@minet.net>
Date: Wed, 3 Jun 2015 09:05:46 +0000 (UTC)
To: <root@listes.minet.net>
Message-ID: <VASs-IZaXqmZao@spam.minet.net>
Subject: [root] UNCHECKED contents in mail FROM <quentin.h@riseup.net>
X-BeenThere: root@listes.minet.net
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: <root.listes.minet.net>
List-Unsubscribe: <https://listes.minet.net/cgi-bin/mailman/options/root>,
 <mailto:root-request@listes.minet.net?subject=unsubscribe>
List-Post: <mailto:root@listes.minet.net>
List-Help: <mailto:root-request@listes.minet.net?subject=help>
List-Subscribe: <https://listes.minet.net/cgi-bin/mailman/listinfo/root>,
 <mailto:root-request@listes.minet.net?subject=subscribe>
Errors-To: root-bounces@listes.minet.net
Sender: "root" <root-bounces@listes.minet.net>


=====================================================
== File: mailbox/store/src/test/resources/eml/mail.eml
=====================================================
Return-Path: <arch-general-bounces@archlinux.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Thu, 04 Jun 2015 06:09:06 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx2.minet.net (Postfix) with ESMTP id 4492D821966
	for <benwa@minet.net>; Thu,  4 Jun 2015 06:09:11 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.499
X-Spam-Level:
X-Spam-Status: No, score=-1.499 required=1 tests=[BAYES_00=-1.5,
	FREEMAIL_FROM=0.001, T_DKIM_INVALID=0.01, T_RP_MATCHES_RCVD=-0.01]
	autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id Meygb-OHe7nm for <benwa@minet.net>;
	Thu,  4 Jun 2015 04:09:10 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=5.9.250.164; helo=luna.archlinux.org; envelope-from=arch-general-bounces@archlinux.org; receiver=benwa@minet.net 
Authentication-Results: mx2.minet.net; dkim=fail
	reason="verification failed; insecure key"
	header.d=gmail.com header.i=@gmail.com header.b=rtUETpuc;
	dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from luna.archlinux.org (luna.archlinux.org [5.9.250.164])
	(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))
	(No client certificate requested)
	by mx2.minet.net (Postfix) with ESMTPS id DD66B821952
	for <benwa@minet.net>; Thu,  4 Jun 2015 06:09:09 +0200 (CEST)
Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1])
	by luna.archlinux.org (Postfix) with ESMTP id A0E06260C6;
	Thu,  4 Jun 2015 04:09:05 +0000 (UTC)
Received: from luna.archlinux.org (luna.archlinux.org [127.0.0.1])
 by luna.archlinux.org (Postfix) with ESMTP id 0CD88260C5
 for <arch-general@lists.archlinux.org>; Thu,  4 Jun 2015 04:09:04 +0000 (UTC)
Received: from nymeria.archlinux.org (nymeria.archlinux.org [89.238.67.251])
 by luna.archlinux.org (Postfix) with ESMTPS
 for <arch-general@lists.archlinux.org>; Thu,  4 Jun 2015 04:09:04 +0000 (UTC)
Received: from nymeria.archlinux.org (localhost.localdomain [127.0.0.1])
 by nymeria.archlinux.org (Postfix) with ESMTP id DDBB240260
 for <arch-general@archlinux.org>; Thu,  4 Jun 2015 06:09:02 +0200 (CEST)
Received: from mail-wg0-x22c.google.com (mail-wg0-x22c.google.com
 [IPv6:2a00:1450:400c:c00::22c])
 (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA (256/256 bits))
 (No client certificate requested)
 by nymeria.archlinux.org (Postfix) with ESMTPS
 for <arch-general@archlinux.org>; Thu,  4 Jun 2015 06:09:02 +0200 (CEST)
Received: by wgme6 with SMTP id e6so23798103wgm.2
 for <arch-general@archlinux.org>; Wed, 03 Jun 2015 21:09:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113;

=====================================================
== File: mailbox/store/src/test/resources/eml/mailWithManyHeaders.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto
header: toto

=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithEmptyContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type:
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithNoCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
	 Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------FC06E08B3CDF05E9A3E28077"

This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

This is an inline attachment:
Cheers!

--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
 boundary="------------47107B0D40019CDFED2C4263"


--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    This is an inline attachment:<br>
    <br>
    <img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
      height="73" width="73"><br>
    <br>
    <br>
    Cheers!<br>
  </body>
</html>

--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
 name="james-logo-square.png"

=====================================================
== File: mailbox/store/src/test/resources/eml/invalidCharset.eml
=====================================================
To: Antoine DUPRAT <xyz@linagora.com>
From: Antoine DUPRAT <xyz@linagora.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
MIME-Version: 1.0
Content-Type: text/plain; charset=%invalid; format=flowed
Content-Transfer-Encoding: 7bit

This is an inline attachment: Cheers!

=====================================================
== File: mailbox/store/src/test/resources/eml/headerWithDot.eml
=====================================================
From: me@example.com
To: you@example.com
X-normal-header: normal header
X-header.with.dots: header with dots
Subject: Test me

Please!

=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithOnlyAttachment.eml
=====================================================
Return-Path: <chibenwa@apache.org>
Subject: 29989 btellier
From: <any@mail.com>
Content-Disposition: attachment
MIME-Version: 1.0
Date: Sun, 02 Apr 2017 22:09:04 -0000
Content-Type: application/zip; name="9559333830.zip"
To: <chibenwa@apache.org>
Message-ID: <149117094410.10639.6001033367375624@any.com>
Content-Transfer-Encoding: base64

UEsDBBQAAgAIAEQeg0oN2YT/EAsAAMsWAAAIABwAMjIwODUuanNVVAkAAxBy4VgQcuFYdXgLAAEE
AAAAAAQAAAAApZhbi1zHFYWfY/B/MP3i7kwj1/2CokAwBPIQ+sGPkgJ1tURkdeiMbYzQf8+3q8+M
ZmQllgn2aHrqnNq1L2uvtavnj2/b7evz26/Op5M6q/P+8OUX77784g8/lQtLisXTU/68vfzCv/Lg
D9vqs/3b8fNXf92273ey4XTCykk9w9LpfD7tX+zGzU83b8pPg39uBr/Kmxe7w9PLuP3xwpFKTJ32
AAEEAAAAAAQAAAAAUEsFBgAAAAABAAEATgAAAFILAAAAAA==

=====================================================
== File: mailbox/store/src/test/resources/eml/inlined-mixed.eml
=====================================================
Date: Wed, 26 Jan 2022 12:21:37 +0100
From: Bob <bob@domain.tld>
To: Alice <alice@domain.tld>
Subject: My subject
Message-ID: <20220126112137.wookj26xellphlam@W0248292>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="7f4cfz6rtfqdbqxn"
Content-Disposition: inline
Content-Transfer-Encoding: 8bit

--7f4cfz6rtfqdbqxn
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Main test message...

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="yyy.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn
Content-Type: application/json; charset=us-ascii
Content-Disposition: attachment; filename="xxx.txt"
Content-Transfer-Encoding: quoted-printable

[
    {
        "Id": "3xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    }
]

--7f4cfz6rtfqdbqxn--



=====================================================
== File: mailbox/store/src/test/resources/eml/filenameOnly.eml
=====================================================
Return-Path: <any@linagora.com>
MIME-Version: 1.0
Delivered-To: ddo@linagora.com
Date: Mon, 21 Aug 2017 00:17:47 +0200
From: any@linagora.com
To: any@linagora.com
Subject: Inventaire des VMs
Message-ID: <599a0a8b.MepmS5MLy1x/pobR%any@linagora.com>
Content-Type: multipart/mixed;
 boundary="=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA"

This is a multi-part message in MIME format.

--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Bonjour
En pièce jointe l'inventaire à jour des VMs et les erreurs
Cordialement.


--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/csv;
 charset=utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
 filename="inventory.csv"

DATA
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA

=====================================================
== File: mailbox/store/src/test/resources/eml/noContentDispositionWithCID.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-ID: <id>

I'm a Schroedinger cat
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: mailbox/store/src/test/resources/eml/embeddedAttachmentWithAttachment.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Thu, 12 May 2016 16:09:40 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 233CA267F
	for <aduprat@linagora.com>; Thu, 12 May 2016 16:09:40 +0200 (CEST)
References: <57348E62.7000505@linagora.com>
Subject: Fwd: EmbeddedAttachment
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>
X-Forwarded-Message-Id: <57348E62.7000505@linagora.com>
Message-ID: <57348EA3.8010501@linagora.com>
Date: Thu, 12 May 2016 16:09:39 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
 Thunderbird/38.5.1
MIME-Version: 1.0
In-Reply-To: <57348E62.7000505@linagora.com>
Content-Type: multipart/mixed;
 boundary="------------040807010700040800000502"

This is a multi-part message in MIME format.
--------------040807010700040800000502
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

forwarded

--------------040807010700040800000502
Content-Type: message/rfc822;
 name="EmbeddedAttachment.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="EmbeddedAttachment.eml"

Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Thu, 12 May 2016 16:08:35 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 0FC992683
	for <aduprat@linagora.com>; Thu, 12 May 2016 16:08:35 +0200 (CEST)
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>

=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachment.eml
=====================================================
Return-Path: <aduprat@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.107] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id F1F3E74E
	for <aduprat@linagora.com>; Tue,  5 Jul 2016 11:47:46 +0200 (CEST)
To: Antoine DUPRAT <aduprat@linagora.com>
From: Antoine DUPRAT <aduprat@linagora.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------FC06E08B3CDF05E9A3E28077"

This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

This is an inline attachment:




Cheers!

--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
 boundary="------------47107B0D40019CDFED2C4263"


--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    This is an inline attachment:<br>
    <br>

=====================================================
== File: mailbox/store/src/test/resources/eml/james-3901.eml
=====================================================
Return-Path: <firstname1.surname1@upn.integration-open-paas.org>
Received: from 10.2.0.0 (EHLO 617) ([10.2.0.0])
          by smtp.upn.integration-open-paas.org (JAMES SMTP Server ) with ESMTP ID -489272706
          for <firstname1.surname1@upn.integration-open-paas.org>;
          Sat, 28 Nov 2020 10:49:24 +0000 (GMT)
Date: Wed, 4 Apr 2001 13:19:00 -0700 (PDT),Wed, 4 Apr 2001 13:19:00 -0700  (PDT)
Message-ID: <IYIOY5YCQEC2XEIOMNMMMASDTLDQ3JZLB@zlsvr22>
from: "Drew Fossum"
to: "Mary Kay Miller"
subject: Revised Draft
filename: dfossum.nsf
folder: \Drew_Fossum_Dec2000_June2001_2\Notes Folders\Sent
date: Wed, 4 Apr 2001 13:19:00 -0700 (PDT),Wed, 4 Apr 2001 13:19:00 -0700  (PDT)
Status: RO
Cc: 
X-libpst-forensic-sender: Drew Fossum
X-libpst-forensic-bcc: 
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="--boundary-LibPST-iamunique-1722682679_-_-"


----boundary-LibPST-iamunique-1722682679_-_-
Content-Type: text/plain; charset="us-ascii"

---------------------- Forwarded by Drew Fossum/ET&S/Enron on 04/04/2001 
01:19 PM ---------------------------


"Hirasuna, Robert" <rhirasuna@AkinGump.com> on 04/04/2001 10:18:00 AM
To: "Drew Fossum (E-mail)" <dfossum@enron.com>
cc:  

Subject: Revised Draft


 <<4%P001!.DOC>> Use this draft instead.  I missed a couple of delted dashes 
on the first page.

The information contained in this e-mail message is intended only for the 
personal and confidential use of the recipient(s) named above. This message 
may be an attorney-client communication and/or work product and as such is 
privileged and confidential. If the reader of this message is not the 
intended recipient or an agent responsible for delivering it to the intended 
recipient, you are hereby notified that you have received this document in 
error and that any review, dissemination, distribution, or copying of this 
message is strictly prohibited. If you have received this communication in 
error, please notify us immediately by e-mail, and delete the original 
message.


=====================================================
== File: mailbox/store/src/test/resources/eml/messageWithNonASCIIFilenameAttachment.eml
=====================================================
Return-Path: <lroyet@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Fri, 26 Aug 2016 10:00:36 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.69.0.146] (mne69-10-88-173-78-196.fbx.proxad.net [88.173.78.196])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id A863676F
	for <lroyet@linagora.com>; Fri, 26 Aug 2016 10:00:36 +0200 (CEST)
To: Laura ROYET <lroyet@linagora.com>
From: Laura Royet <lroyet@linagora.com>
Subject: message with non ASCII filename attachment
Message-ID: <d929964c-032e-ada5-c97d-a048e9a32bab@linagora.com>
Date: Fri, 26 Aug 2016 10:00:35 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.2.0
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------9F1006EBC7F5F7758497FD08"

This is a multi-part message in MIME format.
--------------9F1006EBC7F5F7758497FD08
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit



--------------9F1006EBC7F5F7758497FD08
Content-Type: application/vnd.oasis.opendocument.text;
 name="=?UTF-8?B?2K/ZitmG2KfYtdmI2LEub2R0?="
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename*=utf-8''%D8%AF%D9%8A%D9%86%D8%A7%D8%B5%D9%88%D8%B1%2E%6F%64%74

UEsDBBQAAAgAAOB8GElexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
b2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAA4HwYSQ5gBad3CQAAdwkAABgAAABU
aHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAtQAAAQAIAgAAAHpB
oIwAAAk+SURBVHic7dvJT1TpAobxYihmmSQCojIICYao6Q6ioGHlgo2b3nWivei9/1ivOr2Q
hYZIolFDwAQktCIgQeIEMg8y3pf65KSA229fSuWyeH7pVE6dOnWw+3vqO+cr6czt7e0Y8A8y
/99/ABxr9AGHPuDQBxz6gEMfcOgDDn3AoQ849AGHPuDQBxz6gEMfcOgDzuH62N7eTktL0+PW
1paeajs9PT38BknYH21HT8MBevqvpw3nDE/1Lj0N7wpPwwn9efDdHa6PMDwhiyiUsJH86lZC
OCaMejhs36j/048ISWVkZMR244iKTH5XyOV/6Q8pS2X+WFxcfPbs2fr6emVl5eXLl2dmZoqL
i7V/aWlpbGwsLy9PT0tLS3XA+Ph4fX19eNe+CSB5RMP+d+/eZWVlLS8vT09PV1dX9/f3l5WV
6dWNjY2mpqZ4PL4vqYPnxHeXyv1HQYI+369evdLgffnyRSPa0dHx+vXrBw8etLW1jYyMbG5u
ak9vb69eVSjDw8O1tbXNzc3d3d1VVVXa+eHDhxMnTugk8/Pzubm5V69effLkifbk5OQohcHB
wUuXLn3+/Pn9+/eaIVZWVu7du3fx4sWJiYn8/HxVWFRUpB+hR/24MFd99/80iKVwfQmDkZm5
80ZNEm/evNEY63Fubk6jW15ePjU1pWlDB+iTrblEZWhi0B6Nuvp4+vSphvn06dMaeA32yZMn
dU7NGaOjo6urq3qLJiftqaio0AGrCXqqnrTx4sWLoaGh8+fP6+Saqx49enTz5s0f858FX6Vy
fdHGuXPntK1HzR8qpqWlRa3oo3/9+nUN3rVr11SDjlQQ4ZOt0S0sLNTGnTt3NFuEAhSWDtPs

=====================================================
== File: mailbox/store/src/test/resources/eml/filenameAndName.eml
=====================================================
Return-Path: <any@linagora.com>
MIME-Version: 1.0
Delivered-To: ddo@linagora.com
Date: Mon, 21 Aug 2017 00:17:47 +0200
From: any@linagora.com
To: any@linagora.com
Subject: Inventaire des VMs
Message-ID: <599a0a8b.MepmS5MLy1x/pobR%any@linagora.com>
Content-Type: multipart/mixed;
 boundary="=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA"

This is a multi-part message in MIME format.

--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Bonjour
En pièce jointe l'inventaire à jour des VMs et les erreurs
Cordialement.


--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA
Content-Type: text/csv;
 charset=utf-8; name="good.csv";
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
 filename="bad.csv"

DATA
--=_599a0a8b.iCfd4209N6lpM3fjUmImU2D6HH6PWpQZh/HT8dK7qTYz0tRA

=====================================================
== File: mailbox/store/src/test/resources/eml/invitationEmailFromOP.eml
=====================================================
Return-Path: <rbevillard@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Tue, 05 Jul 2016 17:33:42 +0200
X-Sieve: CMU Sieve 2.2
Received: from [127.0.0.1] (openpaas-rse.linagora.dc1 [172.16.18.188])
	by alderaan.linagora.com (Postfix) with ESMTP id 1F72974B
	for <ddolcimascolo@linagora.com>; Tue,  5 Jul 2016 17:33:42 +0200 (CEST)
Content-Type: multipart/mixed;
 boundary="----sinikael-?=_1-14677328221140.595814419677481"
From: rbevillard@linagora.com
To: ddolcimascolo@linagora.com
Subject: New event from Romain BEVILLARD: test event
X-Mailer: nodemailer (1.3.4; +http://www.nodemailer.com;
 SMTP/1.1.0[client:1.3.8])
Date: Tue, 05 Jul 2016 15:33:42 +0000
Message-Id: <1467732822125-f0c14587-1cd7b923-0d50a279@linagora.com>
MIME-Version: 1.0

------sinikael-?=_1-14677328221140.595814419677481
Content-Type: multipart/alternative;
 boundary="----sinikael-?=_2-14677328221140.595814419677481"

------sinikael-?=_2-14677328221140.595814419677481
Content-Type: multipart/related; type="text/html";
 boundary="----sinikael-?=_3-14677328221140.595814419677481"

------sinikael-?=_3-14677328221140.595814419677481
Content-Type: text/html
Content-Transfer-Encoding: base64

PCFET0NUWVBFIGh0bWw+CjxodG1sIGNsYXNzPSJtYWlsIj4KICA8aGVhZD4KICAgIDxtZXRhIGNo
YXJzZXQ9InV0Zi04Ij4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1k
ZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CiAgICA8c3R5bGU+QG1lZGlhIChtYXgtd2lk
dGg6IDc2OHB4KSB7CiAgLmNvbnRlbnQgewogICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsKICAg
IGJvcmRlci1yYWRpdXM6IDAgIWltcG9ydGFudDsKICB9Cn0KCiAgICA8L3N0eWxlPgogIDwvaGVh
ZD4KICA8Ym9keSBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2VlZWVlZTsiPgogICAgPGRpdiBj
bGFzcz0id3JhcHBlciIgc3R5bGU9IndpZHRoOiA3MDBweDsgbWFyZ2luLWxlZnQ6IGF1dG87IG1h
cmdpbi1yaWdodDogYXV0bzsiPjxicj4KICAgICAgPGRpdiBjbGFzcz0ibWFpbC1jb250ZW50IiBz
dHlsZT0icGFkZGluZzogMTBweCAxM3B4OyBib3JkZXItcmFkaXVzOiA1cHg7IHRleHQtYWxpZ246
IGp1c3RpZnk7IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOyI+CiAgICAgICAgPHRhYmxlIHN0eWxl
PSJib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTsgY29sb3I6ICMzMzMzMzM7
Ij4KICAgICAgICAgIDx0ciBjbGFzcz0idGFibGUtaGVhZGVyIiBzdHlsZT0idGV4dC1hbGlnbjog
cmlnaHQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZDZkN2Q5OyI+CiAgICAgICAgICAgIDx0
ZCBjb2xzcGFuPSIyIiBjbGFzcz0ibG9nbyIgc3R5bGU9InBhZGRpbmctYm90dG9tOiAxMHB4OyBw
YWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICAgICAgICA8ZGl2
PjxhIGhyZWY9Imh0dHBzOi8vZGV2Lm9wZW4tcGFhcy5vcmciPjxpbWcgc3JjPSJjaWQ6bG9nbyIg
YWx0PSJvcGVuLXBhYXMgbG9nbyI+PC9hPjwvZGl2PgogICAgICAgICAgICA8L3RkPgogICAgICAg
ICAgICA8dGQgY29sc3Bhbj0iMyIgY2xhc3M9Im9yZ2FuaXplciIgc3R5bGU9InBhZGRpbmctYm90
dG9tOiAxMHB4OyBwYWRkaW5nLXRvcDogNXB4OyB0ZXh0LWFsaWduOiByaWdodDsgdHJhbnNmb3Jt

=====================================================
== File: mailbox/store/src/test/resources/eml/mail3.eml
=====================================================
Return-Path: <server-dev-return-56848-benwa=minet.net@james.apache.org>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Tue, 02 Jun 2015 10:16:17 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx1.minet.net (Postfix) with ESMTP id 52917327827
	for <benwa@minet.net>; Tue,  2 Jun 2015 10:16:22 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx1.minet.net ([IPv6:::ffff:192.168.102.25])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id rcP3IZbh_eqS for <benwa@minet.net>;
	Tue,  2 Jun 2015 08:16:21 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56848-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Authentication-Results: mx1.minet.net; dkim=none reason="no signature";
	dkim-adsp=none (insecure policy); dkim-atps=neutral
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
	by mx1.minet.net (Postfix) with SMTP id 37EAD327826
	for <benwa@minet.net>; Tue,  2 Jun 2015 10:16:20 +0200 (CEST)
Received: (qmail 1143 invoked by uid 500); 2 Jun 2015 08:16:20 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 1132 invoked by uid 99); 2 Jun 2015 08:16:20 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
    by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 02 Jun 2015 08:16:20 +0000
Date: Tue, 2 Jun 2015 08:16:19 +0000 (UTC)
From: "abcd" <jira@apache.org>
Cc: zzz@bcd.org
To: "server" <c-server-dev@james.apache.org>
Message-ID: <JIRA.12473940.1284322083000.91735.1433232979714@Atlassian.JIRA>
In-Reply-To: <JIRA.12473940.1284322083000@Atlassian.JIRA>
References: <JIRA.12473940.1284322083000@Atlassian.JIRA> <JIRA.12473940.1284322083687@arcas>
Subject: [jira] [Closed] (MAILBOX-11) MailboxQuery ignore namespace
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394



=====================================================
== File: mailbox/store/src/test/resources/eml/frnog.eml
=====================================================
Return-Path: <frnog-owner@frnog.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Tue, 02 Jun 2015 12:01:42 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx2.minet.net (Postfix) with ESMTP id E92F2A25320
	for <benwa@minet.net>; Tue,  2 Jun 2015 12:01:46 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.499
X-Spam-Level:
X-Spam-Status: No, score=-1.499 required=1 tests=[BAYES_00=-1.5,
	UNPARSEABLE_RELAY=0.001] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id bRNLR9Tbk4Jg for <benwa@minet.net>;
	Tue,  2 Jun 2015 10:01:46 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=217.24.82.4; helo=cabale.usenet-fr.net; envelope-from=frnog-owner@frnog.org; receiver=benwa@minet.net
Received: from cabale.usenet-fr.net (cabale.usenet-fr.net [217.24.82.4])
	by mx2.minet.net (Postfix) with ESMTP id 089E7A2531A
	for <benwa@minet.net>; Tue,  2 Jun 2015 12:01:45 +0200 (CEST)
Received: by cabale.usenet-fr.net (Postfix, from userid 90)
	id A267298A5DC6; Tue,  2 Jun 2015 12:01:44 +0200 (CEST)
X-Original-To: frnog@frnog.org
Delivered-To: frnog@frnog.org
Received: from mta.mail.waycom.net (mta.mail.waycom.net [194.177.32.18])
	by cabale.usenet-fr.net (Postfix) with ESMTP id AE2E798A58FC
	for <frnog@frnog.org>; Tue,  2 Jun 2015 12:01:01 +0200 (CEST)
Received: from [127.0.0.1] (localhost [127.0.0.1])
	by mta.mail.waycom.net (Postfix) with ESMTP id D30D6567E1
	for <frnog@frnog.org>; Tue,  2 Jun 2015 12:00:56 +0200 (CEST)
Received: from [127.0.0.1] (localhost [127.0.0.1])
 wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) with Microsoft SMTP
 Server (TLS) id 15.0.847.32; Tue, 2 Jun 2015 12:00:56 +0200
Message-ID: <556D7ED7.2090108@waycom.net>
Date: Tue, 2 Jun 2015 12:00:55 +0200
From: Guillaume Genty <ggenty@waycom.net>
Organization: Waycom
MIME-Version: 1.0
To: <frnog@frnog.org>
Cc: no@no.com
Bcc: no@no.com
Content-Type: text/plain; charset="utf-8"; format=flowed
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: WCM-HV1-EXCH1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a) To
 wcm-hv1-exch1.wcmnoc.local (2002:c3d6:f04a::c3d6:f04a)
X-C2ProcessedOrg: 9180093e-3f32-48c9-b36b-0805cbe4c266
Subject: [FRnOG] [BIZ] Collecte de liens C2E/CELAN en DOM
X-Loop: frnog@frnog.org

=====================================================
== File: mailbox/store/src/test/resources/eml/twoAttachments.eml
=====================================================
Return-Path: <from@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Fri, 27 Feb 2015 20:32:14 +0100
X-Sieve: CMU Sieve 2.2
Received: from canondir.par.lng (unknown [92.103.166.6])
	(using TLSv1 with cipher AES256-SHA (256/256 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id BAB0D728
	for <to@linagora.com>; Fri, 27 Feb 2015 20:31:38 +0100 (CET)
X-Priority: 3 (Normal)
From: "From"
 <from@linagora.com>
To: "To"
 <to@linagora.com>
Subject: [8/10]Attached Image light with text
Date: Fri, 27 Mar 2015 21:48:38 +0100
Message-Id: <20150227203838.0011.CanonTxNo.4037@canondir.par.lng>
Mime-Version: 1.0
Content-Type: multipart/mixed;
 boundary="AHNPACBLDCDIDAGGGDDFAABECGCA"

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: text/html; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

<b>html</b>

--AHNPACBLDCDIDAGGGDDFAABECGCA
Content-Type: image/jpeg;
 name="4037_014.jpg"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="4037_014.jpg"

/9j/4X2cRXhpZgAASUkqAAgAAAANAA8BAgAKAAAAqgAAABABAgAJAAAAtAAAABIBAwABAAAA
AQAAABoBBQABAAAAvgAAABsBBQABAAAAxgAAACgBAwABAAAAAgAAADEBAgAKAAAAzgAAADIB
AgAUAAAA2AAAABMCAwABAAAAAgAAAGmHBAABAAAAfAIAAKXEBwDQAAAA7AAAANLGBwBAAAAA
vAEAANPGBwCAAAAA/AEAAEwqAABQYW5hc29uaWMARE1DLUZaNDUAALQAAAABAAAAtAAAAAEA
AABWZXIuMS4wICAAMjAxNDowMjoyNSAxMDozMjowOQBQcmludElNADAyNTAAAA4AAQAWABYA
AgAAAAAAAwBkAAAABwAAAAAACAAAAAAACQAAAAAACgAAAAAACwCsAAAADAAAAAAADQAAAAAA
DgDEAAAAAAEFAAAAAQEBAAAAEAGAAAAACREAABAnAAALDwAAECcAAJcFAAAQJwAAsAgAABAn
AAABHAAAECcAAF4CAAAQJwAAiwAAABAnAADLAwAAECcAAOUbAAAQJwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentAndSomeTextInlined.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: application/octet-stream;
	name="exploits_of_a_mom.png"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/oneHtmlAttachmentAndSomeTextInlined.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: text/html;
	name="attachment.html"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment;
	filename="attachment.html"
<html>
  <body>
    Hello!
  </body>
</html>

=====================================================
== File: mailbox/store/src/test/resources/eml/unknownDisposition.eml
=====================================================
To: me@linagora.com
From: Benoit Tellier <me@linagora.com>
Subject: Mail with text attachment
Message-ID: <befd8cab-9c9c-5537-4e77-937f32326087@any.com>
Date: Thu, 13 Oct 2016 10:26:20 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------4FD2D252DB453546C22C25B2"

This is a multi-part message in MIME format.
--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

I'm the body!

--------------4FD2D252DB453546C22C25B2
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-Disposition: gabouzomeuh;
 filename="attachment.txt"

I'm a Schroedinger cat
--------------4FD2D252DB453546C22C25B2--

=====================================================
== File: mailbox/store/src/test/resources/eml/mail2.eml
=====================================================
Return-Path: <server-dev-return-56863-benwa=minet.net@james.apache.org>
Received: from mx2.minet.net (mx2.minet.net [192.168.102.26])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Thu, 04 Jun 2015 11:27:36 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx2.minet.net (Postfix) with ESMTP id D65F3A1CA35
	for <benwa@minet.net>; Thu,  4 Jun 2015 11:27:40 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id jH3GE2vu5VKE for <benwa@minet.net>;
	Thu,  4 Jun 2015 09:27:40 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56863-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
	by mx2.minet.net (Postfix) with SMTP id 85A3AA1CA2C
	for <benwa@minet.net>; Thu,  4 Jun 2015 11:27:38 +0200 (CEST)
Received: (qmail 43145 invoked by uid 500); 4 Jun 2015 09:27:38 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 43130 invoked by uid 99); 4 Jun 2015 09:27:38 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
    by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:27:38 +0000
Date: Thu, 4 Jun 2015 09:27:37 +0000 (UTC)
From: "efij" <jira1@apache.org>
To: "aaa" <a-server-dev@james.apache.org>
Cc: abc@abc.org
Message-ID: <JIRA.12781874.1426269127000.9353.1433410057953@Atlassian.JIRA>
In-Reply-To: <JIRA.12781874.1426269127000@Atlassian.JIRA>
References: <JIRA.12781874.1426269127000@Atlassian.JIRA> <JIRA.12781874.1426269127444@arcas>
Subject: [jira] [Closed] (MAILBOX-217) We should index attachment in elastic
 search
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394


     [ https://issues.apache.org/jira/browse/MAILBOX-217?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

=====================================================
== File: mailbox/store/src/test/resources/eml/mail1.eml
=====================================================
Return-Path: <server-dev-return-56862-benwa=minet.net@james.apache.org>
Received: from mx1.minet.net (mx1.minet.net [192.168.102.25])
	 by imap (Cyrus v2.4.16-Debian-2.4.16-4+deb7u1) with LMTPA;
	 Thu, 04 Jun 2015 11:23:39 +0200
X-Sieve: CMU Sieve 2.4
Received: from localhost (spam.minet.net [192.168.102.97])
	by mx1.minet.net (Postfix) with ESMTP id 0113F385C15
	for <benwa@minet.net>; Thu,  4 Jun 2015 11:23:43 +0200 (CEST)
X-Virus-Scanned: by amavisd-new using ClamAV at minet.net
X-Spam-Flag: NO
X-Spam-Score: -1.51
X-Spam-Level:
X-Spam-Status: No, score=-1.51 required=1 tests=[BAYES_00=-1.5,
	T_RP_MATCHES_RCVD=-0.01] autolearn=ham
Received: from mx2.minet.net ([IPv6:::ffff:192.168.102.26])
	by localhost (spam.minet.net [::ffff:192.168.102.97]) (amavisd-new, port 10024)
	with ESMTP id IeILbadS9lo5 for <benwa@minet.net>;
	Thu,  4 Jun 2015 09:23:42 +0000 (UTC)
Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=140.211.11.3; helo=mail.apache.org; envelope-from=server-dev-return-56862-benwa=minet.net@james.apache.org; receiver=benwa@minet.net
Received: from mail.apache.org (hermes.apache.org [140.211.11.3])
	by mx2.minet.net (Postfix) with SMTP id CDE83A1C7FC
	for <benwa@minet.net>; Thu,  4 Jun 2015 11:23:40 +0200 (CEST)
Received: (qmail 37249 invoked by uid 500); 4 Jun 2015 09:23:38 -0000
Mailing-List: contact server-dev-help@james.apache.org; run by ezmlm
Precedence: bulk
List-Unsubscribe: <mailto:server-dev-unsubscribe@james.apache.org>
List-Help: <mailto:server-dev-help@james.apache.org>
List-Post: <mailto:server-dev@james.apache.org>
List-Id: "James Developers List" <server-dev.james.apache.org>
Reply-To: "James Developers List" <server-dev@james.apache.org>
Delivered-To: mailing list server-dev@james.apache.org
Received: (qmail 37236 invoked by uid 99); 4 Jun 2015 09:23:38 -0000
Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28)
    by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 04 Jun 2015 09:23:38 +0000
Date: Thu, 4 Jun 2015 09:23:37 +0000 (UTC)
From: "Tellier Benoit (JIRA)" <jira2@apache.org>
To: "abc" <b-server-dev@james.apache.org>
Message-ID: <JIRA.12835341.1433409792000.9340.1433409817961@Atlassian.JIRA>
In-Reply-To: <JIRA.12835341.1433409792000@Atlassian.JIRA>
References: <JIRA.12835341.1433409792000@Atlassian.JIRA> <JIRA.12835341.1433409792972@arcas>
Subject: [jira] [Created] (MAILBOX-234) Convert Message into JSON
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394

Tellier Benoit created MAILBOX-234:
--------------------------------------

             Summary: Convert Message into JSON

=====================================================
== File: mailbox/store/src/test/resources/eml/noAttachment.eml
=====================================================
Content-Type: text/plain; Charset=UTF-8
Date: Fri, 17 Sep 2010 17:12:26 +0200
Subject: my subject
To: a@test, B <b@test>
Cc: c@test
Bcc: d@test
MIME-Version: 1.0
Message-Id: <20100917151246.2A9384BA1@lenny>
From: Ad Min <admin@opush.test>

Mail content

-- 
Ad Min

=====================================================
== File: mailbox/store/src/test/resources/eml/charset.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Will be better for me, thx

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
 <p>Will be better for me, thx</p>
</html>

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-8859-1"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment1.txt"

QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--

=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithBlankCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
	 Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------FC06E08B3CDF05E9A3E28077"

This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

This is an inline attachment:
Cheers!

--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
 boundary="------------47107B0D40019CDFED2C4263"


--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    This is an inline attachment:<br>
    <br>
    <img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
      height="73" width="73"><br>
    <br>
    <br>
    Cheers!<br>
  </body>
</html>

--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
 name="james-logo-square.png"

=====================================================
== File: mailbox/store/src/test/resources/eml/embeddedAttachmentWithInline.eml
=====================================================
Return-Path: <iphone@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
	 by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
	 Wed, 21 Mar 2012 14:51:59 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
	by lenny.obm.lng.org (Postfix) with ESMTP id E495D32929
	for <usera@obm.lng.org>; Wed, 21 Mar 2012 14:51:58 +0100 (CET)
Message-ID: <4F69DD0E.3010502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:52:14 +0100
From: iphone <iphone@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.28) Gecko/20120306 Lightning/1.0b2 Thunderbird/3.1.20
MIME-Version: 1.0
To: usera <usera@obm.lng.org>
Subject: Fwd: Re: email with sign
Content-Type: multipart/mixed;
 boundary="------------080809000000030101030405"

This is a multi-part message in MIME format.
--------------080809000000030101030405
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

new email text part

--------------080809000000030101030405
Content-Type: message/rfc822;
 name="Re: email with sign.eml"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
 filename="Re: email with sign.eml"

Return-Path: <usera@obm.lng.org>
Received: from lenny.obm.lng.org (localhost [127.0.0.1])
	 by lenny.obm.lng.org (Cyrus v2.3.14-Debian-2.3.14-2) with LMTPA;
	 Wed, 21 Mar 2012 14:19:29 +0100
X-Sieve: CMU Sieve 2.3
Received: from [192.168.2.48] (unknown [192.168.2.48])
	by lenny.obm.lng.org (Postfix) with ESMTP id 47EC832D51
	for <iphone@obm.lng.org>; Wed, 21 Mar 2012 14:19:29 +0100 (CET)
Message-ID: <4F69D570.9090502@obm.lng.org>
Date: Wed, 21 Mar 2012 14:19:44 +0100
From: usera <usera@obm.lng.org>
User-Agent: Mozilla/5.0 (X11; U; Linux i686 (x86_64); en-US; rv:1.9.2.28) Gecko/20120306 Thunderbird/3.1.20
MIME-Version: 1.0
To: iphone <iphone@obm.lng.org>
Subject: Re: email with sign
References: <4F69D0C6.501@obm.lng.org>
In-Reply-To: <4F69D0C6.501@obm.lng.org>
Content-Type: multipart/alternative;

=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithoutContentType.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="gimp.png"

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/emailWithTextAttachment.eml
=====================================================
To: James User <user@james.org>
From: James Sender <sender@james.org>
Subject: Message with text attachment
Message-ID: <ffaa7bce-fbe3-83b5-de3f-9a7301233615@linagora.com>
Date: Tue, 5 Sep 2017 09:54:16 +0200
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------D24E361990BDBA143D4D8794"
Content-Language: en-US

This is a multi-part message in MIME format.
--------------D24E361990BDBA143D4D8794
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

The message has a text attachment.

--------------D24E361990BDBA143D4D8794
Content-Type: text/plain; charset=UTF-8;
 name="attachment.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment.txt"

VGhpcyBpcyBhIGJlYXV0aWZ1bCBiYW5hbmEuCg==
--------------D24E361990BDBA143D4D8794--

=====================================================
== File: mailbox/store/src/test/resources/eml/oneAttachmentWithoutName.eml
=====================================================
Mail content:
To: "=?utf-8?B?UmFuaSBBc3NhZg==?=" <rani.assaf@jri.obm.lng.org>
Subject: =?utf-8?B?VHIuIDogUGhvdG9zICE=?=
Importance: Normal
MIME-Version: 1.0
Content-Type: multipart/mixed;
	boundary="----=_Part_0_1330682067197"

------=_Part_0_1330682067197
Content-Type: multipart/alternative;
	boundary="----=_Part_2_1330682067197"

------=_Part_2_1330682067197
Content-Type: text/plain;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

Content of part 1-1
------=_Part_2_1330682067197
Content-Type: text/html;
	charset= utf-8
Content-Transfer-Encoding: 8bit
Content-Disposition: inline

<b>Content of part 1-2</b>
------=_Part_2_1330682067197--

------=_Part_0_1330682067197
Content-Type: application/octet-stream;
Content-Transfer-Encoding: base64
Content-Disposition: attachment

iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAALxklEQVR4Ae2Xe0xUZ97H5X4RiyAXEARURBSYCzNnLjMwwAx3huGOIBcUFJERAUVRq+KlwHABFdu+b9+0766x1W21ttnUtE3rul6aGNtm3XbdWncjaa3VXrZRK6IgfPd3Tp6wOGmyo0v/cOMknxwy5xzO7/P8LueZaWlpaU80TwWeCvy3CcRwXJlUqp39RApIOE4i5hQPxBz30hMpIJIrjktkseMimfzPUyoglilTf/XVl8u1Ik4xrOJEEMu4wSkVEMmVZ6VSTeivFXy0TDZfIlfc0qil0KpIQM59P6UCUk71lVShPD1t2jT7qQ4+Sq32prq/GhfHjSXFSxGvEfMCQ1MsoLzOadT3pArFwBQ3LSdRqK4mJyfcz0xRwaCLRVKcBDEybmxqBRTKH8uXpEOj0/1MD3wuMTHR8T9adY4LoOD3KuPj7xYVGlGYo0e6gUNKoowkpKBmHpXJZO5TKXCrpjwT5pWFSM1IvROrVH0hksujf+laAHYWi8XT+nsKyIlvVKlSeVSu0twtXpI/Yq4rR2lBKoxpamQmK5Gm55CcIAP1wxAvOWUCEk4xVLvchIaVedi8rgq1NSXjqnjdHcrGayK5yhStVPpbLLvE/Xt6Tnf3Wu529XSM9fZ13Wzbse2kJiGhK1ap/ETCqe5lGLNum+trxnZsbca6tcuwJM+AvKw4mNI1yEpVURYUSE2S8wJ3RSKN35QJUJPdM6/IQ8vaCmzdZMbObU2w7G7BhhbzeEFR4e2SsrIRChqnz5zE999/h9HREXz19SDefOt1dPW0Y8e2Frywtx0vDnRg57NrUVdTgJJ8PYpyEpBvjEdOhvahLIg55YOioiKHRxKgjwPBEaHEQzfz/3DH9mb07+nGsbeO4MjRw+jts8DS3or/GdiNnr4ufP6XC/jhh+9w587PuHdvGLdv38SNG9fwwYfvon9vN3Zvb0Td8lxUlqSirCgZpSRQnJuIgmwdcikL2elqZKUwAbni0aaQvb19M3HT2dnlloODw5Cdnd0d+rKVRFz48xkm0+i+gX5cv34NP/30I86fP4ePPjqL3n4LOjq24O2338CVK1/i22+v4ssvL+HTTz+B2WzGqlUrcfr0HzCwvw9Na8pRXZaBqtI0VBSnYGmBgUooEYUmHYQyyhDKCClJCl7gus0C9DE5OjkNpefkoXvPPugzjIiMEcN9+vQ7JHKFzvs1tzTdO3P2lBD8wYMHce3aNVBTYk1DPXp62/HHUx/g0qXPSOIyBgcHwX/u37+PiMhIiCViHP7dAbRuqAc/CJbxAktIoJAXSEKRiZURCRhJwJCoAPXcRZsF7B0dL8cq1RgeHgb/+fziX6E1pPCjDJ5e3iOUmcHWzRvHz398ThAoKSnB5b/9HYbUdMwJmUPl04GTJ9/DhQvn8cYbh/D++++D/1y/cYOvZbi6uWHvvj48u7kRgsDSdEGgjARKSOChPiCBpAQFpBx3ymYBWuXR9Zu2gH0wPj6O7KISyNRxiBJLMeMZz/GcXOP4a4cOCAJ5eXmY5eMDL29v6PUJ6O7aQX1xGOfOncLx429h5syZMDc2I05vQJQ0Fq6uriTZifWNy60yYCXAMqDVcmMiTtlrswAZPMgtLsXY2Jgg8PXVb5CYngWpSoMFi6MRsTAS7rSKnZZdeP3IIarv89ixow21tTXoaN9KE6kefdQLJ04cx5kzH0Cp5OA9axYCgoIx08sLCQlxsHS3o646F9XlGSQwuQeSJveAICBTKm49yuaRb+Drco0W6zdTM75zHJW1dVAlGvjXOULDF2ABCQQFz4FcEomdbc3o7qGpQ+za3oQtzWXY3LwUHc9twfPP9+Gd40ephN5GW9tmJCXpsHnLBrq+HS1N1VhRkYnlZemooilUzk+hgokpNPEuyExWUdlx99lb2GaBV+eGh48kJKciVq0VSofqX1j9wDkhCA4Ng0gihb+vF5pXF2K9uQgta4qxoWEJNq4l6LihoQRtW5vQRSu9d6AH//vSAI1cCzq7dmNdQxVWVmahhq3+RP3n/6t8cjO1yE5TQ59EDaxQsN8Ctk+hUH50JhqSESONFQKfF0GrToH7+AfAf3YQdIlJcHNzwdrafDTWFaCJRJqJdfVFAvzfTfR9c30xrfYytLbUotlchtXVOULwND6FICuXPLz61uWj1iruUePv4gvbZgGWhv2+fn5DesrCXCob34BAPniBoJBQJOj18KMM1NfkYM2KXGFL0VCbxwsJ0N/Cd2Y6x1+zmrYdq5YZJ1Z+OU2ejGTK6rwg4QX20Phkq59mUPLz/264SBRMAva2Sky8hWka/T4gMPBuVnY2OJUaIXPnYU7YXCQlJ0MsFkMaE05BZdPbNJtW1iRQTytMCH9T0MK5VVVC4ELN8ytPZSNsG6IjQ5C4wAkVWl+UZsYiP1sonYl9kIpWPzpW9gLFMp1wJhyYhM1bCUfqh5dp7A3J5PIHqWnpyDQaIZFKMMvbU3iD0hikwLKEAGt5KFhCWGUKlk2ZdGGrUEQlkqaXC+LBgV4ok7tik8Edr1fOwKbkGajXeaBcH4aclFik6hXC9sE7ICCK4vAhZhAutkj8UlMsopL6jZ2d/acOjo7fBAbPuW/Qax7QHkYoBZIQgqUjQ5guQm3nG3VCqeg0IsSKFmDRwlBERYZBHDUPxvhICvoZdGR54IudEfisg8Nva+aiQTcDpVq/B4qY8Ffo2QuIYCsJVk62C9gRTiyVPkFhYSqxnLuk0qqH83P0FGwmVi3PpbLJp2MeZSSbxGjlSa6yRJjxgsxSNmmWUCZo2gjjMj9LgwpDGMzxbji20h9Xu6JxpV+FI+aF4016z/u1atcPq/P1DTqdOoae7U24E46PI+DMVsCfCHN2do6OWBzdS9vqf3Bq1bAxM4FKJZMalqbQmkq00N6+eU0FGlaV0gurgErJiPLiNHpZJfN7fiqnJNawwrYZJoMYtfFeVErT8fG6WbjaGYHBPg6v1EWNdXa2Yeuz6w75+PgEshicHkfAhXiGCCDmEosJGaELCgnpiJJIByUK5YjBED++tDANtctoGq0uw4amGmxaX0vHFSRUhfqVJVhRlYeK0iwSSSaBeCoxJTQablwk40aTYvwvrta6DL9c7DF6eYsPeixtOPjqAbzw4v6hrp7OC+XV5QsfV8CJ2fsRIUQkISXURCpR6enl1b1g0eLP+d8KsQrlqEqjGtHr48ezMmhMFmWiqsyEylIjivNSKPBEJBu0UKoVD0Qy+djC6Oir7h4eA/R/mvw87FdXK13PbsyPHOnt7aAtyQmBQ4dfHe3p7by187ntOXTdPCKDcLZVwIFwI7yIQGLepCxomUQ50Ui0UTD/5+Pr925waOifFi6OuiaKlQ1JOOUYMU6CozGx8uHIqJjr/kFBJ11cXJ6ne7YSZmIpkUJoWxqXv2fp2n133/49d44de1OQOHr0CAIC/Meio6MhkUhA110jNhL21gLWEvaTGtmbmM0kFk3KRCKRRZQR9cQGoo3oIHppJPfTsY/oJtqJbUQLUUeUshVNIJSExMvLK9rT03P+upbGVd09nZfo9/XPJlM2/P390dnZKRAWFsZL8JT+OwG7SRLuxEzCn5VTOBHFRJREPKEn0ggTUcRWtoJRyr4zscwlEXHsXinLbDgbn37sWW7bdm2L9/Pzu+nu7o6NGzeitbWVshEAlokvCPsJARskXFlPeDORYJaRCCYjZuWlYNnREFqGhlCxczJ27WJ279xJgXsRHmyAOLJnnyTAQxkVjvPnz4evry94eWuBX5RgOEwSmU54ErOYzGxiDhHGpMKJCCvC2bkwFvBsFrQ3m3bTWeBO7Fl2jPUErKFy44/p1gK2ijgSzkzGnfBgQcxkAfkwfBk+DG9iJrvWg93ryoJ2nBy41bMPWQvQ7pk/LrMSeCQRe8JhkpATk3JhQblZ4crOOVsFLGwTrAOfDLv3AAErWq0FHldmktQEDlbYM+yseYTnLSOGCDD6H1/ARilrpuD/LyYuMoFDVgJPBqx3/p84YS3wpInonmQBxlOBpwJPBf4JszXhha5WvGwAAAAASUVORK5CYII=

------=_Part_0_1330682067197--


=====================================================
== File: mailbox/store/src/test/resources/eml/calendar.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Will be better for me, thx

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
 <p>Will be better for me, thx</p>
</html>

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="utf-8"; method=COUNTER
Content-Transfer-Encoding: base64

QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_--

=====================================================
== File: mailbox/store/src/test/resources/eml/oneInlinedAttachmentWithEmptyCid.eml
=====================================================
Return-Path: <test@local.com>
Received: from localhost;
	 Tue, 05 Jul 2016 11:47:47 +0200
X-Sieve: CMU Sieve 2.2
To: Test <test@local.com>
From: Test <test@local.com>
Subject: Inline attachment
Message-ID: <26d91590-b995-8d45-f66a-0433c65745bb@linagora.com>
Date: Tue, 5 Jul 2016 11:47:46 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101
 Thunderbird/45.1.1
MIME-Version: 1.0
Content-Type: multipart/alternative;
 boundary="------------FC06E08B3CDF05E9A3E28077"

This is a multi-part message in MIME format.
--------------FC06E08B3CDF05E9A3E28077
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit

This is an inline attachment:
Cheers!

--------------FC06E08B3CDF05E9A3E28077
Content-Type: multipart/related;
 boundary="------------47107B0D40019CDFED2C4263"


--------------47107B0D40019CDFED2C4263
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 7bit

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    This is an inline attachment:<br>
    <br>
    <img alt="" src="cid:part1.37A15C92.A7C3488D@linagora.com"
      height="73" width="73"><br>
    <br>
    <br>
    Cheers!<br>
  </body>
</html>

--------------47107B0D40019CDFED2C4263
Content-Type: image/png;
 name="james-logo-square.png"

=====================================================
== File: mailbox/store/src/test/resources/eml/charset2.eml
=====================================================
From: Test 1 <test1@linagora.com>
To: Test 2 <test2@linagora.com>
Subject: New Time Proposed: New event from Test: lole
Date: Tue, 13 Mar 2018 14:36:08 +0000
Message-ID: <AM5P190MB03542A58E344C68475A951AFD20@AM5P190MB0354.EURP190.PROD.OUTLOOK.COM>
Accept-Language: en-US
Content-Language: en-US
Content-Type: multipart/alternative;
	boundary="_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_"
MIME-Version: 1.0

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

Will be better for me, thx

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
 <p>Will be better for me, thx</p>
</html>

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-8859-1"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment1.txt"

QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9
MTtCWURBWT0tMVNVO0JZTU9OVEg9MTANCkVORDpTVEFOREFSRA0KQkVHSU46REFZTElHSFQNCkRU
U0VRVUVOQ0U6MA0KRFRTVEFNUDoyMDE4MDMxM1QxNDM2MDdaDQpDT01NRU5UO0xBTkdVQUdFPWVu
LVVTOldpbGwgYmUgYmV0dGVyIGZvciBtZVwsIHRoeFxuDQpFTkQ6VkVWRU5UDQpFTkQ6VkNBTEVO
REFSDQo=

--_000_AM5P190MB03542A58E344F2C68475A951AFD20AM5P190MB0354EURP_
Content-Type: text/calendar; charset="iso-4444-5"; method=COUNTER
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="attachment2.txt"

QkVHSU46VkNBTEVOREFSDQpNRVRIT0Q6Q09VTlRFUg0KUFJPRElEOk1pY3Jvc29mdCBFeGNoYW5n
ZSBTZXJ2ZXIgMjAxMA0KVkVSU0lPTjoyLjANCkJFR0lOOlZUSU1FWk9ORQ0KVFpJRDpFdXJvcGUv
QmVybGluDQpCRUdJTjpTVEFOREFSRA0KRFRTVEFSVDoxNjAxMDEwMVQwMzAwMDANClRaT0ZGU0VU
RlJPTTorMDIwMA0KVFpPRkZTRVRUTzorMDEwMA0KUlJVTEU6RlJFUT1ZRUFSTFk7SU5URVJWQUw9

=====================================================
== File: mailbox/store/src/test/resources/eml/nonTextual.eml
=====================================================
Return-Path: <btellier@linagora.com>
Received: from alderaan.linagora.com (smtp.linagora.dc1 [172.16.18.53])
	 by imap (Cyrus v2.2.13-Debian-2.2.13-19+squeeze3) with LMTPA;
	 Thu, 18 Jun 2015 12:43:28 +0200
X-Sieve: CMU Sieve 2.2
Received: from [10.75.9.154] (unknown [92.103.166.6])
	(using TLSv1 with cipher DHE-RSA-AES128-SHA (128/128 bits))
	(No client certificate requested)
	by alderaan.linagora.com (Postfix) with ESMTPSA id 0EB1078A
	for <btellier@linagora.com>; Thu, 18 Jun 2015 12:43:28 +0200 (CEST)
To: btellier@linagora.com
From: Benoit Tellier <btellier@linagora.com>
Subject: Test message
Message-ID: <5582A0CE.4020801@linagora.com>
Date: Thu, 18 Jun 2015 12:43:26 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101
 Thunderbird/38.0.1
MIME-Version: 1.0
Content-Type: multipart/mixed;
 boundary="------------030000010109090603040500"

This is a multi-part message in MIME format.
--------------030000010109090603040500
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit

This mail have a non textual attachment !

--------------030000010109090603040500
Content-Type: application/vnd.oasis.opendocument.text;
 name="toto.odt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="toto.odt"

UEsDBBQAAAgAAGNV0kZexjIMJwAAACcAAAAIAAAAbWltZXR5cGVhcHBsaWNhdGlvbi92bmQu
b2FzaXMub3BlbmRvY3VtZW50LnRleHRQSwMEFAAACAAAY1XSRnPWCvM4AwAAOAMAABgAAABU
aHVtYm5haWxzL3RodW1ibmFpbC5wbmeJUE5HDQoaCgAAAA1JSERSAAAAxgAAAQAIAwAAAN+D
+XIAAAEyUExURXJoXXN0dXZ4e3h3eHl7fnx8gXqCh32IgXuJnoB7fI+Fa4+IbIODe4iEe5+Q
eISDhICFiISJhIaMiY2Gg4uJgomMjIGJkIuOkY6Uj4SRm4+WkomZnJGKgJGUjJuTh5uWj5GV
kZGVnJaYkpWbmpmVlZmblJ2en4OYqZSYoJSfqpyeoI6gs5SipJygopKhsZapvKeajKGemKqd
k6KjnaqilKmrn7SllL2tnaampaarraquo6msrqmusKq2urSwqLu5tLy5uaO2yKu5w77EtrXI
1sC5p8+8rcHGt83BtdfGttnKus3NysLO3svP0tbRzdrQy9rYztrb2tvg5Nru9+bf3Ozg0PLj
yfLl0PXo0/vt0uTn7ujn5+jp7Ovw6OL2/en4/fLr5/336vP7/v7+/gAAAP///4uCFGkAAAHB
SURBVHja7dPbThMBEAbgYgsaQmkEVhfbxR5YDKUIslBUWuTogZI0HGxq0gBt3/8dIE00ek+C
gW8uZv6Zu+9iUsNHUSkMDAwMDAwMDAwMDAyMJ8o4Of137+z/vfV+h7Nh+a6X+8t/rqN2MxjF
y9H4fv1wjN1c5eOXdOpdshTNFQuvTrbGk2pzIq6/DJbGnk+udOY/ZYNqsBcnM4WpSqVbquxk
e7nCRPZ4pZ8Oxhe+vZh+3RzbqC1uzlxvXz0Y4+fpbC7qlVqZ8moUhfH5j8/PkupBMahHYb4V
Ti7/mm+EH1a/HkXFIG7n33RrpUY4DOOzjeR9v9SefXtYy2YOovX84mZ00R78t7/RWfPiGBgY
GBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgY

=====================================================
== File: mailbox/store/src/test/resources/documents/writter.docx
=====================================================

=====================================================
== File: mailbox/store/src/test/resources/documents/Text.txt
=====================================================
This is some awesome text text.


=====================================================
== File: mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/FetchGroupConverterTest.java
=====================================================
/****************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one   *
 * or more contributor license agreements.  See the NOTICE file *
 * distributed with this work for additional information        *
 * regarding copyright ownership.  The ASF licenses this file   *
 * to you under the Apache License, Version 2.0 (the            *
 * "License"); you may not use this file except in compliance   *
 * with the License.  You may obtain a copy of the License at   *
 *                                                              *
 *   http: ww.apache.org/licenses/LICENSE-2.0                 *
 *                                                              *
 * Unless required by applicable law or agreed to in writing,   *
 * software distributed under the License is distributed on an  *
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
 * KIND, either express or implied.  See the License for the    *
 * specific language governing permissions and limitations      *
 * under the License.                                           *
 ****************************************************************/

package org.apache.james.mailbox.store.mail;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.EnumSet;
import java.util.stream.Stream;

import org.apache.james.mailbox.model.FetchGroup;
import org.apache.james.mailbox.model.FetchGroup.Profile;
import org.apache.james.mailbox.model.MimePath;
import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

class FetchGroupConverterTest {
    private static final int[] PARTS = new int[]{12};

    static Stream<Arguments> getFetchTypeShouldReturnCorrectValue() {
        return Stream.of(
            Arguments.arguments(FetchGroup.MINIMAL, FetchType.METADATA),
            Arguments.arguments(FetchGroup.HEADERS, FetchType.HEADERS),
            Arguments.arguments(FetchGroup.HEADERS_WITH_ATTACHMENTS_METADATA, FetchType.ATTACHMENTS_METADATA),
            Arguments.arguments(FetchGroup.BODY_CONTENT, FetchType.FULL),
            Arguments.arguments(FetchGroup.FULL_CONTENT, FetchType.FULL),
            Arguments.arguments(FetchGroup.BODY_CONTENT.with(Profile.HEADERS), FetchType.FULL),
            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_CONTENT), FetchType.FULL),
            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_DESCRIPTOR), FetchType.FULL),
            Arguments.arguments(FetchGroup.MINIMAL.with(Profile.MIME_HEADERS), FetchType.FULL),
            Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), EnumSet.noneOf(Profile.class)), FetchType.FULL),
            Arguments.arguments(FetchGroup.MINIMAL.addPartContent(new MimePath(PARTS), Profile.HEADERS), FetchType.FULL),

=====================================================
== File: mailbox/cassandra/doc/README.md
=====================================================
# Cassandra implementation for the mailbox

This file attempts to provide information useful to mailbox/cassandra developers.

## Table structure

![Table structure chart](table_structure.png)

Can be edited using [this source file](table_structure.drawio) on [this website](https://app.diagrams.net/).

This file should be edited everytime the table structure is modified.

## Approach regarding denormalization

The Cassandra mailbox is heavily relying on denormalization. The same data is stored several times, in distinct tables,
to satisfy the various read access patterns. Of course, the various tables can become inconsistent between them.

We have been developing several approaches in order to diagnose, mitigate and solve such issues. They are described in
the following documents:

 - [Applicative read repaires](../../../src/adr/0042-applicative-read-repairs.md)
 - [Inconsistencies among messages](../../../src/adr/0022-cassandra-message-inconsistency.md)
 - [Inconsistencies among mailboxes](../../../src/adr/0020-cassandra-mailbox-object-consistency.md)
 - [Recompute user quotas](../../../src/adr/0028-Recompute-mailbox-quotas.md)
 - [Mailbox counter inconsistencies](../../../src/adr/0023-cassandra-mailbox-counters-inconsistencies.md)

=====================================================
== File: mailbox/cassandra/doc/table_structure.drawio
=====================================================
<mxfile host="app.diagrams.net" modified="2021-08-24T02:04:00.037Z" agent="5.0 (X11)" etag="lTsFg4HG33iSt8uwSXVP" version="14.9.8" type="device"><diagram id="T0L1nU3M2jZuK1mChcqM" name="Page-1">7R1bd6M2+tf4nPTBOSDuj5lk0nY72c42SbfztEcG2abF4AKexP31KwHCIAmML1xMPA8TWwiB9X367peJcr96/zGE6+VT4CBvAiTnfaI8TAD+J0n4DxnZpiOGBtKBReg66ZC0G3h2/0HpoExHN66DomwsHYqDwIvddXnQDnwf2XFpDIZh8FaeNg88pzSwhgvEDTzb0ONH/+s68TIdNTVpN/4TchdL+mSZ/uAVpJOzgWgJneCtMKR8nij3YRDE6afV+z3yyOaV9+Wx4mr+YiHy4yY3PNg/rl//eQr+RPP41z9+/dWG7r+nevZu8Zb+YOTg3599DcJ4GSwCH3qfd6OfwmDjO4isKuFvuzlfgmCNB2U8+CeK420GTLiJAzy0jFdedhW9u/Ef5PZbLfv2rXDl4T1bOfmypV/8ONz+UfzyLVlBNWU6sLsx+Va68ysK3RWKUZgNRjEM4zuCH3jA9mAUuTYdfnQ9+qb8HmfbHgWb0EY1G0txFYYLFNfMU9J5ZNcLD8gg+CMK8EuHWzwhRB6M3e9lrIQZci/yeTv44w8ZChyADrLSBz6UgOEHPmIgIZ0DEufb4ezWr4GLXwVIGamTDS29JSN0llReIcWE7CYGTPlbnAC59GnfobfJfsEE6B7eqk+O+528hucu/OSC/veGkJxPHr599w1/WpC/L3BGgHpHnreC61fXSUeyxWYhnVg9gt8/eWZ59LDXaHf1r78QAo2iCFPvn512n3WfPAu63ix4Fz0ruY6ZnOAKuTFwntHf4mtudOdHbyhEFfe60QPyMM2rvPwbsslpqrj66MHFovrmZ4T8yueGcF6xbrwMEXSEG0H2IUIheW7UMkzIW/qYG2Aq9QBjAXaTGbPA2T4TMvSrHaNY8Epk0nzjefcBXsuvnbbEPxqF2cTmP46hxWVK+7Z0Y/S8hgn1e8PiV5mq0s1ItkD5NHfJi3pBmCylzOdIt1OWFwZ/ocIVx7BmUi3J/Y7CGL3XElN6lUpDGVGUzez7206WkqkstSzIUQqQqgnwSSzOuDyJ59YEelHqmUq3kpSPDErsAZcp9gwIKaRapGhXVALdiEqK2auopGoCWakG/Nk2D1zMbXryzi4On3TywPnF1lyuG63gWi1Mnl1wrRZMq6Xnq9x6lVsvXG5V5MHJrVqfIgr9/K0kruyRW4mYKufWucxcp+8z1zUUUYXi7fHcU2nIPdVBcU+lNe75XemacXZqkxkaHU04DHqPN/hsuj6mapuqWeSlapdZIceFL9t1xY+KNrPqi3a6cBWXyy4/oMgO3XXsBhWMlM5zo3UQuWTe3kc+OVrt9ZcQ+tEchZ99O3Bcf9Fo8pfAhnvf8gv0FxviBGr4U77CECY0pwLS9B3wL943FcYxtJcrPPsAueHSWStQyqxVUwWs1WqLteqv25dvr7b+0xY+/oLWX5UIvfbLWg8xCR3P387Ot8SavcZo9qbBLNG2an9+hrg7pL+D6lN6scqk69xFr0It7+wMt4KrzLxgVsVx4mo+Rs5VM810bBRUkxtQUJFyIqttKScmd+58bp+JfDNhDGLFXcosYsUtzYbophOtn8j6n8heuTb07rILK9dxEqosgl4ZvmfYf5nlYDK//6pg+1tTDa2PtPus8ViTet59Cv2Psf2qoZe2X5eMnrefj3yQR7z9DO3XBYapbrcffKTtB4w/Wzf63n5e4n2i8s8T9PHfkJeSbgpT1msU/sBPmeIPcEX2MBOasGYQhy7CmkEuYUXE/BEGK/K76m03N/96uvv6w3jRQnAIhWiQh0OcHw/0KjyoxIKSJF9GDAYtajSA47Fl58TCe0JuOUAJufl53PiUe8RzGYfHL12AX63J9zIvYt7levFBGFa87YxIVjKl5Xjml640tyqPnV6pqlzCL9PqG8EAL0Tf2MHaTcjGm5ss4CFIqEUcEKhgsIeQjBJHUDptTaxKiW04nUO2vuTQIHPdeDtiwLKWAYFuJLYMKK0B9kOJ5wpLuEHP8qFSb9s+V2hTW6FshRhIbVJwJO9zIleCcn8YVabP7I9gzGxebZvUTVO91VVD0kwTKBqwlBKCcRJlywZ2uj1ndTmnouAIjetdRWrhuT7EjC6hbpUBSuIr5MaKe1znd/wKDmaZH8c9KUsKuC1bGIGIi8rdclFRpAez1dESrsnHuYfeM7KKqaJTEUrDDxcAwey8A5E5F+68bptoNq/b+b3ksbCpIsmEjp1IRfN1MpgqrCSbMgaObvKxy4yIpSgWRZeuSLDIyXnFhea4gLVZUIKhYZnHIcPUArdS4Z+qMesat1bhn9kpnij1ub1X0Y87WFpT0c/qRvSTJcbXlXOdjlBIM7tBoR2oQQnW0h5Yt5xR0RQfgH5ufDhNWBDlt5xHRv8K4+XvnYeGdiCp14jPZ39WhSxOX6MiqqUmg/ijyuomKMtiQkG9Y3MX74c5+exB2xvhiTtYNyZoHhIYRpePuRaDuareO+ZShehCxcUT2LzRkTQHpFpLXseyHf3Z56RUhLM9pef67v7LCIkW+YFiHt0lfcQAzzyh/ixapzcy33NK+VFkAZmNyhwASQV8WCy30e1ZapDsaMgQ7bulGwrU6/Z9IJYaWTIYf5rKWdua2mo4BNFUs0frDOAjKk4mv+gdUwGS8o5V1nGmvndDf/eWbJoQ8a0ZCb5qc00p+FQ2jdIB1VW1bwquiMqq1UjJCEP1rZgmlgzgC8sgdP8J/Bh6VfS9AI2hk+WpTNO6aAEXAG6puflwG/r+tSpoMd5EuC1MSwKAorr3Bsyz5PxZOyxJVz2vKR5waHRn2yhKopZgTBKRo0TRt8MgGUzot0B6e3MxePHEMKEMDCKOJopmqqqMC9ai8a1FUmAKMLy9QJr6ypjnV4+NoejHFHn3u0VAQyrVUXEEXsHNdNM8YFW6yUfW4jj48R4y02SNp9wJy1O1iydMb+2E8dpSTiRn27LQNFagcApP3+k9Cq+meG4UJwLwY8qyChBak5rXowWOqRgMWxJVBZK1DsGj8vJpBp4bB3loAZMqWvTkoGjMoc+yPjTgdC0yDEViUM8uCIjleQMw4REdB8PS39mCoz2pAFSXU3OxJpyrp/0CbTM6Gz7Zv6edGocKhy/J+iE6SiGmXLLTk8Q7jUfD+XSdlUtEro9uWZ8oDILZ/15jVMtFCs1JMejsVgfKpD7wTFh9UFwsUQdmLSsmX85Xx7Cprt6YRXcUnq0z9EVjMLNxeDYTWKHwDqMzGRM1Rn9WzFL7nXYMiarIazSkc1WJuQNBNItREjDiHe1QlBjxE2hWjw5FukG1roo9joedKgGa6xKF6F2jq0htoyGZo3swEOwzLTHNOBj3LJVZiBWz2ka2Jn6xxsh2VE+MgwLFT0C1phy1cRD4FdUOQzVeyR5xeS1ZZpiKKiju16kFWONTD8e9/xXo3tv+83ruiAsoyBJraeh9/3lVdtT7z1Q465/+8G7cEe8/72NSBMWfugUAr3OOGAAkJIjhwH1TIGobEbgZ5kEiqu0AQc3g5MI0qZGceBVkc/1eY+3P7duwVNUfv+1MYNlOHzr2+Ii8KRy1qdJSi72hQTfuxHZdg3o2ca86pTfV3LsJJtJFCu+Jrr60pdRYu5R1mSrjrtD/sjpv/xOWmd/TW2Z/g68ZjNDzZvYnaTH/Ybx+U5mxcTdug9We24/ShcJBfF0TloUJgY3c72n9P0T8fxNwz8PKXiL7L/ILlq69zMGefEDkp8+QF+QlBEfL2wBgi6hzcBUyt9bqP+r1HVj7jJU5thBJy4xUbcpImzpgOmKkLbRoSc8wRoK/NuuxstMOO6NVc+77jNk+Hf4yo+OFSuOuK+3xQj5imkR9EhVuxOEuU8az0bT4emu8ywCD5V0t86Cu6mApTOpu17USdN4EdjLTijazmjaKF8+vxKGXZ2VVhSxd/OmGsCxhBs84GZIMmFQRYfUj0ClDMkSWyhrSWJkuSznM5PKTZWWFqQrJOdAbBxwpjG9GYXOxzhTaJgNW1tE7iG0zeBMbU3VurBKNDDRNDNi+bM0G7/QnLVfwyJfn10+JYUXiSe2/0ilPlCY/JrHY44Xa/ly9bqOujQaVgc9freCYHvEnyJyN7R5N6/N3wwbYDAr12HgsJlKa6+l5Jh5QUVqxXQ7QQuFSexMSJPsPngBHKGaTMfhbEBzglTjWLJRZoGp600dxEAo7qY9WBlfV4cngLVQgdQIsiflP8H2sxyj9gUKs3lvmaQXfn/YdjSaLPJdPz+jOisb4nBRB70xZ2DWxvbPSQg3M1XhPSXfMpq9D9wFYlt6kaLao91+Lx1BUJ/NUloXmcOPFlGeBaghf7HH8Cwky0BvhfXpyjrs5GjmbMmhlzjo21e35MOvV+BbacAyoC4dhNVT4qfY4kEAHcwzhmkZXHj7NLFdDV6jLrSMPn6l2c8TE5f3aSXocyrk8e33904QN3pebyetSXhdwtCZrVgfr3WRtikx+gzRZV6a5t5d73PyIDcvWLWtsLf5jjd0yW2VDbZh9fLDL06yocFT5ZlzzIaMDC7m5x7iXSuE/+w6mMXHWFB2jfxISiVUiPwhXmCRFMA06kdwo2uzKDNcoJunQlNcYngNvk8WbSUv4nTxmhlCyNilFvyJ0z5lkDdnhxnHJFkKfDM1dErYRL9Hq9mj1ezSUeSpbepky02q6JeuYxZ9ZnamVfT7S3IJWvgqcCP09Ql38qG5WdDcuXWcWFCDrP1HErI7ZOzZrUrLz/dsNKo+P0oP0UI11Gw4N6cCX/74UkGMmQBju3g+Tfsnn4YK+83Bp3PEVoy4Sowym9Jdu9Y1PoqbuV3y6FHyasgWnrb4rNVh8/FeWDiVBm+hzXmZm2SZZkqygkqgE91hdxvJ5SOwhHnnnt/TNsaQeQj8i64w7uyS/h0KVNovf13qkNUnGaqOfc8F5Osoy00cJ5D7G4leSQH7pErnJxCUNQB63qk0XV243fLpocYWJ+pefTG67h5J3d3RN1HZ9NlbTuqlmU4NyNz4by7oESINLhLQ1LK+5xUfkvf6M/398CpxnYiuTFshHITVgb9LSH1m5j6wECBRX/sgSWJ4/f/l8/zJeQm0ArkuRgFDLhoBSt9baK2/MUs38haxckozHx8ca+ZEdOK0e2o33Fv9QydlrBYOPIQTIrMKr9SsByBKfM/iUqasOWqPEz3SQWpsUesrv2mIym+CmP3cXG0p1xgrdqVqueGcZPHhlUxAd0CLdAFe6MQLMAnJZHRXVEeuYcFSXIapHrPt7wsv2ItbLb68vP11hP0nMpKAMfInSmf6gz1vUnlOJGhP+ecIUNkmj5SRswXHhwg+i+hCK8YJPshjwKf2zhb22pOvpbYdyi9oEd3x2q3O2rrBv2wXft4crJ0YF6H/+jlLhjVBwoWOLH7nJin4GfuISczah8EZokzdaBY47JwF1REXgO+ji13bXURVUio6BaE3KxyoPc/edwIlzDZg2ErsGZqamaufS4STekivyDoh6f7fnHZBlvqb8AE18A7Lw5TXQ9pr48kMzEBtf/ubFTu/3X5iTRp4cEplr7XpBGkSa9BiHicGPO/NStI1itGpy+PP6NLuAf+kmLySWdjVPzj1cr1E44pbZFltJ0eIlu7xScClOXGsNNUQKP7P/7TU4RLKjIUNEgS3dUKBet+1nPIYdRemzrV4064ReiExZGs3ssxeiLItCq4aERjlPkScHpJIc0zLveA7TuMvi8DCb0Vp06QTMNvRbzVBlBeO4opqUQGUrG3hlU5E0gKeosqYxwfit4/nVjNVZYyyT1YZ6D4DIU/WuMTWXilNlOmX0bheXecvaZz92YzdJJlsl8jIVxTltmUjmHAJQ9fyZUc9F2FBYa7EI0QLGiIP+panb5bx2XeW7SHWuareQ2IVVJQ8fJPz90YOLiAdo9ciYA0pJFexsQxg0vriQUllhiJVOK82VMhSVblG5hcLs0PeDGI60LPtRWFxVaCjb9stHbcDU/BGiNlA7RW3AG8lORu25G0bxqx8lGdpX3B5VyL+sqXoDJDa6RWKROe9EJCZBnqKKfx8Tf9PdyLsfbkaByjqNP691UHUraoDqbM1Ts7AeSNMmVAP2j4XS48BhU7GGh8MNqi0Nwyx+YKkzuqeyegtMzZBV+r9OXzTzCGu3oHAV/18H7f2Gb3lohZfMsgygGYzjpbHZG1jgVpJkS5UMw8CIU06K1U3t1rJMSbMAAKZBjRpdmb2BKP7risfH4zFVNoaCxzoTdKiZx+KxqstctEvHThogsrddsfUEbAUDw1ajjGGaJR2JrYah9I6tIpPaFVtPwFZlWNhqSGWXhGYc6xq3lN6xVeGtZO4Krl9dJ6t8wmDueHyHbB1/jaZZ9OY7pBULa2u57qhEtq+X1MpRZyxsVEo59ORMATDqV2r93DSpu3vZsCrvsCyZRwKLXal7WDXQdi4aVvg4qCywjpX3dWvPSq1DS5SfMnZoGUfTwfJSuqR1Cy3KIa9pB9k+7E07ULLzdEbjWEdpB+pFpJgMqYrMAcBubEHqCtjdtF85BtjDgVlTO0pXMOu6CcuHOqBNzRAdAVvhraIPNLv+H5oBluTfz2EUJy0FIvxs/Ccr5BSsszpQJDL1hgR7ktyxH8iVeTr/7w0Ks8BVFEMHJk1eEEkWSzLJPkhBKFlTys4bk4rExTQvWkmnlMBvtQV8deiOyKEL4aBswzOsIyVwzANKeVqaxqyr95nGpe7pz5oVduun3UltS5MJzV5NZs3Ip1JDlKaRF2MlSlOm2wnVA0tNFkUk6QzdTvTX7cu3V1v/aQsff0Hrr0qEXqd8IbEOCZIDkTkXhqTotolm8wsgSLJmlc1kGguqA1y25ZWUtno+aUxyhpZZ9o5s4YS/hqQ5cmE6Pj3Lp8BBZMb/AQ==</diagram></mxfile>

=====================================================
== File: mailbox/cassandra/src/test/resources/cassandra-driver.conf
=====================================================
datastax-java-driver {
  basic.request {
    timeout = 5 seconds
  }
}

=====================================================
== File: docs/modules/customization/nav.adoc
=====================================================
* xref:index.adoc[]

=====================================================
== File: docs/modules/customization/pages/index.adoc
=====================================================
= Apache James Customization
:navtitle: Customization


=====================================================
== File: docs/modules/servers/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:demo.adoc[]
*** xref:servers:5-minute-demo.adoc[]
*** xref:servers:15-minute-demo.adoc[]
** xref:basic/index.adoc[]
*** xref:basic/context.adoc[]
*** xref:basic/objectives.adoc[]
*** xref:basic/concepts.adoc[]
*** xref:basic/architecture.adoc[]
*** xref:basic/conf/index.adoc[]
*** xref:basic/help.adoc[]
** xref:extendable.adoc[]
** xref:test.adoc[]

=====================================================
== File: docs/modules/servers/pages/5-minute-demo.adoc
=====================================================
= Short Demo

In this short demo (~5 minutes), we will set up a running James demo very quickly
using a prepared Docker image.
Then you will add a domain, and a user account within that domain.


Requirements: 

 * Docker

== Set up the demo server

To begin, run the James demo server using Docker:

[source,bash]
----
docker run -d -p "25:25" -p "143:143" --name james apache/james:demo-latest
----

Explanation:

 * `docker run` runs the provided image with the given parameters
 * The `-d` parameter runs the container in "detached" mode
 * `-p "25:25" -p "143:143"` attaches the image ports to the ports 25 (SMTP) and 143 (IMAP) on the host machine
 * The `--name james` parameter gives the running container a name to make it easier to manipulate
 * `apache/james:demo-latest` is the image that is used for this demo

Docker will pull the image and start the container.

== Connect via the CLI

****
To run commands using the James CLI, you can use the running container via Docker:

----
docker exec james james-cli <<COMMAND>>
----

****

As an example, list all the domains currently in use by James:

[source,bash]
----
docker exec james james-cli listDomains
----

You should notice that a default domain, james.local, has been created


=====================================================
== File: docs/modules/servers/pages/extendable.adoc
=====================================================
= James Extendable Mail Server
:navtitle: Extendable

(TODO)


=====================================================
== File: docs/modules/servers/pages/15-minute-demo.adoc
=====================================================
= Long Demo

In this demo (~15 minutes), we will set up a running James demo using a prepared Docker image.
We will then test the server by connecting with an email client. Finally, we
will connect to the server via the REST-based Admin API.


Requirements: 

 * Docker
 * curl
 * Thunderbird client (optional)

== Set up the demo server

Before starting the server, because we will be connecting to the Admin API we need to set some configuration parameters.
We will create a `webadmin.properties` file that James will use in order to allow us to connect to the API.

Run this command to create the `webadmin.properties` file:

[source,bash]
----
printf 'enabled=true\nport=8000\nhost=localhost' >> webadmin.properties
----

Explanation:

 * `enabled=true` instructs James to run the Admin API service
 * `port=8000` configures the Admin API to be made available via port 8000
 * `host=localhost` configures the Admin API to respond on localhost


Now run the James demo server using this command:

[source,bash]
----
docker run -d -p "25:25" -p "143:143" -p "127.0.0.1:8000:8000" -v $(pwd)/webadmin.properties:/root/conf/webadmin.properties --name james apache/james:demo-latest
----

Explanation:

 * `docker run` runs the provided image with the given parameters
 * The `-d` parameter runs the container in "detached" mode
 * `-p "25:25" -p "143:143"` attaches the image ports to the ports 25 (SMTP) and 143 (IMAP) on the host machine
 * `-p "127.0.0.1:8000:8000" attaches the port 8000 to localhost on the host machine to allow us to connect to the Admin API
 * `-v $(pwd)/webadmin.properties:/root/conf/webadmin.properties` mounts the webadmin.properties file to configure the Admin API
 * The `--name james` parameter gives the running container a name to make it easier to manipulate
 * `apache/james:demo-latest` is the image that is used for this demo

Docker will pull the image and start the container.

=====================================================
== File: docs/modules/servers/pages/test.adoc
=====================================================
= James Test Server
:navtitle: Test 

https://github.com/apache/james-project/tree/master/server/apps/memory-app[Apache James Memory App]
is a memory-only implementation of Apache James. It is useful for testing and development purposes.


=====================================================
== File: docs/modules/servers/pages/demo.adoc
=====================================================
= Server Demo
:navtitle: Demo

The James Demo Server sets up  a light-weight, disposable mail server
so you can try it out easily on your own local machine.

 * xref:servers:5-minute-demo.adoc[Short demo] (~5 minutes)
   ** Set up a demo server
   ** Create a new user with the CLI
 * xref:servers:15-minute-demo.adoc[Long demo] (~15 minutes)
   ** Same steps as above
   ** Interact with the server via the Admin API
   ** Test the server with an email client

=====================================================
== File: docs/modules/servers/pages/basic/context.adoc
=====================================================
= James Basic Server &mdash; Context
:navtitle: Context

Email has been around in one form or another for more than 50 years.
It is arguably one of the most resilient applications or our day, and
may even be called **THE** killer app of our time. Most of us, if not
all but the most unfortunate, use email on a regular basis. If you are
reading this page over the web, it is almost 100% certain that you have
used and continue to use email.

Despite its ubiquity, the vast majority of people do not control their
own email infrastructure. Although, unlike telecommunications or electricity
for example, the barriers to owning and maintaining your own infrastructure 
are very low, individuals and companies alike usually defer to the large
email providers for this essential service.
Although relying on the big providers is easy, what they offer is often
limited and in some cases much more costly than it ought to be.

The Apache James Community is dedicated to liberating email. Our mission
is to make email hosting both easy and fun. We do this by:

 * Providing an easy-to-use self-hosted server for amateur Operators
 * Providing an extendable server for those more experienced Operators
 * Providing a distributed solution for heavy-duty projects
 * Ensuring that James remains a flexible, reliable technology platform

=====================================================
== File: docs/modules/servers/pages/basic/objectives.adoc
=====================================================
= James Basic Server &mdash; Objectives
:navtitle: Objectives

The objective of the Basic Server is to be as simple and minimalistic as possible,
while still being useful. Many people wish to have a basic self-hosted mail server that they
can use without having to become a deep technical expert.
The Basic Server is intended to be an entry-level server that is accessible to
those who want a self-hosted mail server, but who don't want to have to learn about all the
complexities of email communications.

This server is therefore intended to be the simplest to set up and use in 
production.
Of all the James Servers, it has the least amount of dependencies and configurations.
If you are not sure which of the James servers is best for you, you should
probably choose this one.

The default configuration of the Basic Server includes the following features:

 * Secure SMTP (SSL/TLS) over port 465
 * Secure IMAP4 (SSL/TLS) over port 993
 * Local Mailbox support
  ** Files are stored locally on the filesystem
  ** Optionally use a volume if you are a Docker or Kubernetes user
 * Multi-domain (virtual domain) support
 * Administration of users either via a command-line tool or the admin api

We have disabled all of the insecure communications and require SSL. If you have
a specific requirement to use an insecure protocol, or if the above list does not
satisfy your needs, then after having successfully set up this server you may want
to move on to the xref:extendable.adoc[Extendable Server].

=====================================================
== File: docs/modules/servers/pages/basic/conf/index.adoc
=====================================================
= James Basic Mail Server Configuration
:navtitle: Configuration

(Work in progress.)

////
== JIRA Issues

* dnsservice.xml - DNS Service Configuration -> https://issues.apache.org/jira/browse/JAMES-3219
  ** Status: to be removed
* domainlist.xml - Domain List Configuration -> https://issues.apache.org/jira/browse/JAMES-3220
  ** Status: to be removed
* events.xml - Event system Configuration (Spring only)
  ** Status: Spring only, so n/a
* fetchmail.xml- FetchMail Configuration (Spring only) 
  ** Status: Spring only, so n/a
* imapserver.xml - IMAP4 Configuration -> https://issues.apache.org/jira/browse/JAMES-3229
  ** Status: 
* jmap.properties - JMAP Configuration (Guice only) -> https://issues.apache.org/jira/browse/JAMES-3230
  ** Status:
* lmtpserver.xml - LMTP Configuration -> https://issues.apache.org/jira/browse/JAMES-3231
  ** Status: 
* mailrepositorystore.xml - Mail Repository Stores Configuration -> https://issues.apache.org/jira/browse/JAMES-3232
  ** Status: 
* mailbox.xml - Mailbox Configuration (Spring only)
  ** Status: Spring only, so n/a
* mailetcontainer.xml - Mailet Container Configuration -> https://issues.apache.org/jira/browse/JAMES-3233
  ** Status: 
* pop3server.xml - POP3 Configuration -> https://issues.apache.org/jira/browse/JAMES-3234
  ** Status:
* mailbox.xml - Quota Configuration (Spring only)
  ** Status: Spring only, so n/a
* recipientrewritetable.xml - Recipient Rewrite Table Configuration -> https://issues.apache.org/jira/browse/JAMES-3235
  ** Status: 
* smtpserver.xml - SMTP Configuration -> https://issues.apache.org/jira/browse/JAMES-3236
  ** Status:
* usersrepository.xml - Users Configuration -> https://issues.apache.org/jira/browse/JAMES-3237
  ** Status:  
* webadmin.properties - WebAdmin Configuration -> https://issues.apache.org/jira/browse/JAMES-3238
  ** Status: 
* jmx.properties -> https://issues.apache.org/jira/browse/JAMES-3240
  ** Status: 
* extensions.properties -> https://issues.apache.org/jira/browse/JAMES-3241
  ** Status: 
* jwt_publickey -> https://issues.apache.org/jira/browse/JAMES-3242a
  ** Status:
* healthcheck.properties -> https://issues.apache.org/jira/browse/JAMES-3243
  ** Status: 
* listeners.xml -> https://issues.apache.org/jira/browse/JAMES-3244
  ** Status: 

=====================================================
== File: docs/modules/servers/pages/basic/help.adoc
=====================================================
= James Basic Server &mdash; Where to get help
:navtitle: Help

////

This information is based on the email discussion from here:
  --> https://www.mail-archive.com/server-dev@james.apache.org/msg66420.html

However, I am not satisfied that I have properly captured the community's
opinion, and there are only a few people who have contributed to the
thread.

Would be good to have some comments on this content.

It could just be that I don't like the content. But if that is what the
community thinks, then that is what we should write.

////

////
Comment this out until there is agreement.
== Warning

Please note that if you want to try to use James, you are pretty
much on your own.

James is intended for use only by the current committers, or perhaps only by
competent developers only who have the ability to understand the code as it
exists now and can make changes themselves without any help. What you see
is what you get. Take it or leave it.

The James Community is made up of people who "scratch their own itch".
If you have a problem with the code or the documentation, then please
step up and fix it rather than asking for help.

If you are a user who wants to try to use James, you should seriously
consider hiring a professional organization to help you. Most likely,
James is not for you.

You can try filing issues, but there is absolutely no guarantee it will be
fixed. If you are lucky and a developer has the same problem as you, then
it may be fixed. Or if one of the developers is feeling particularly generous and wants
to volunteer their valuable time to help you, it may happen. There is no 
way to know unless you try.

On the other hand, the developers would **love** for you to do stuff that
they are not interested in doing, like documentation. If you don't know anything
about the code, it would be a good way to help out until you can eventually
join the exclusive committer club, too.
////

=====================================================
== File: docs/modules/servers/pages/basic/concepts.adoc
=====================================================
= James Basic Server &mdash; Background Concepts
:navtitle: Concepts

Before embarking on your adventure with the **James Basic Server**, we
highly recommend that you familiarize yourself with the following concepts:

[TODO: provide links and ensure that articles exist for each of these topics]

 * xref:concepts:user/index.adoc[James User Model]
 * xref:concepts:protocols/smtp.adoc[SMTP]
 * xref:concepts:protocols/imap.adoc[IMAP]
// What link should go here??
 * Secured email communications
 * xref:concepts:/storage/index.adoc[Email storage]

=====================================================
== File: docs/modules/servers/pages/basic/architecture.adoc
=====================================================
= James Basic Server &mdash; Architecture
:navtitle: Architecture

(TODO)

=====================================================
== File: docs/modules/servers/pages/basic/index.adoc
=====================================================
= James Basic Mail Server
:navtitle: Basic 

The **James Basic Server** is intended for xref:concepts:user/index.adoc#Operator[Operators]
who are just getting initiated with operating their own 
xref:concepts/???[Self-Hosted] mail server.

The server is intended to be a mostly "out-of-the-box" solution.
With a few small interactions necessary to configure the system, you should
be up and running in no time with all the standard features.

These documents will present all the concepts that underpin this server,
and will walk you through its installation and configuration. If you run into
trouble, we explain how you can get help from the James Community.

 * xref:basic/context.adoc[The context of contemporary email]
 * xref:basic/objectives.adoc[Objectives and motivation of the Basic Server]
 * xref:basic/concepts.adoc[Useful background concepts]
 * xref:basic/architecture.adoc[Overview of architecture]
 * xref:basic/conf/index.adoc[Configuration]
 * xref:basic/help.adoc[Where to go for help]

=====================================================
== File: docs/modules/servers/pages/basic/self-hosting.notes
=====================================================
The name of the project is "Jame Self Hosting Sandbox", and I see the term "self hosting" in a few places... So it sounds like it is important, but what is that intended to mean?

I would like to understand better the intention behind the term.



I would say "self hosting" means individuals having bought a domain name and want to install their own mail server for hosting their personal emails. Volumetry is small. They want control on their data.

One generally tricky point about this kind of set up is getting third parties (like eg GMail) trusting your setup. It would be important to document a checklist regarding Mail Exchange trust like:

 I'm not an open spam relay
 MX record registered for my domain
 Reverse DNS setted up for MX servers
 SPF records setted up
 DKIM signature setted up
(which is slightly external to James as DNS setup is required)



A "how to" regarding this is a MUST have in my opinion http://james.apache.org/howTo/index.html



Just a thought based on the ideas you wrote here...

But what if the mission of James were to "help people self-host their email" as an alternative to providers like gmail etc.

Right now James is very obscure and is only for total tekkie geeks. If we modify the target, perhaps this could be the mission.

The way of accomplishing this is:

Provide in-depth "concept" articles
Provide more "how tos" for important things
Make James easier to install and operate
wdyt?


It would be more like:

Apache James give you the ability to "self-host" email. Many companies and individuals are unable to develop their own mail infrastructure, but often feel trapped into using services like gmail, yahoo, etc. James provides a low-cost alternative for those who desire the freedom to use email the way they want.

Or something like that.



Apache James give you the ability to "self-host" email. Many companies and individuals are unable to develop their own mail infrastructure, but often feel trapped into using services like gmail, yahoo, etc. James provides a low-cost alternative for those who desire the freedom to use email the way they want.

This should be the goal of the Basic server.

Regarding "Advanced server":

=====================================================
== File: docs/modules/servers/pages/run.adoc
=====================================================
= Run James in Production
:navtitle: Run

James provides a number of *profiles* out of the box.
These profiles have been tested and verified so you can
get set up quickly with a production mail server that you
can use with confidence.

The available profiles are:

 * <<minimal,James Minimal Profile>>
 * <<basic,James Basic Profile>>
 * <<advanced,James Advanced Profile>>
 * <<distributed,James Distributed Profile>>



[#minimal]
== James Minimal Profile

If you are not sure which profile you should be using, then
you probably ought to be using the *James Minimal Profile*.

This profile is intended to be the simplest to set up and use in production.
It has the least amount of dependencies and complexities. If you do not yet
have a huge amount of emails to process, then usually the simplicity is
well worth the loss of some functionality. The last thing you need is
to have to resolve difficult issues on a production server when you have not
yet acquired the requisite knowledge to deal with those issues. Using the
*James Minimal Profile* will help you reduce the risk of running into 
production issues.

This profile is:

 * Suggested for use with smaller deployments
 * Appropriate for use by most operators
 * The preferred choice for most installations
 * Endowed with fewer dependencies, which makes it simpler and less risky to use in production
 * Only dependent on your local file system for data storage, so very easy to manage

(TODO: Add link to details page)


[#basic]
== James Basic Profile

This profile is intended to be relatively easy to use, but provides additional features with regards
to data storage and management. Of course, these additional features come at the cost of more
operational complexity. You will have to now deal with a relational database and all the fun
that comes with it. However, if you are already an expert at relational database management,

=====================================================
== File: docs/modules/servers/pages/index.adoc
=====================================================
= Apache James Mail Servers
:navtitle: Servers

James offers five types of ready-made Mail Servers. The servers are intended 
for those with different needs, ranging from xref:concepts:user/index.adoc#Operators[Operators]
who are interested in setting up a server for the first time, to experienced teams of 
xref:concepts:user/index.adoc#Developer[Developers]
looking to deploy an advanced distributed system.
Each of the servers has been tested and verified so you can 
deploy a production-grade 
xref:concepts/insert-link[Mail Server] with confidence.

The available James Servers are:

 * <<demo,James Demo Mail Server>>
 * <<basic,James Basic Mail Server>>
 * <<extendable,James Extendable Mail Server>>
 * <<distributed,James Distributed Mail Server>>
 * <<test,James Test Server>>

If you are just checking out James for the first time, then we highly recommend
investigating the servers in this order:

. Initiate yourself with James by using the <<demo,Demo Server>>
. Install the <<basic,Basic Server>>
. If and only if the Basic Server is not enough, then try the <<extendable,Extendable Server>>

[#demo]
== James Demo Server
The xref:demo.adoc[Demo Server] is intended for those who just want 
to give James a quick spin on their local machine to see what all
the fuss is about.



[#basic]
== James Basic Mail Server

If you just want to get up and running quickly, if you have very simple needs,
or you want to try deploying a mail server for the first time, then the
xref:basic/index.adoc[*Basic Server*] is the right choice for you. If you are
not sure which server you should be using, then this server is probably the right
choice.

This server is intended to be the simplest to set up and use in production.
It has the least amount of complexity and configurations to worry about.
The last thing you need is
to have to resolve difficult issues on a production server when you have not
yet acquired the requisite knowledge to deal with those issues. Using the
xref:basic/index.adoc[*Basic Server*] will help you reduce the risk of running into 

=====================================================
== File: docs/modules/concepts/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:user/index.adoc[]
** xref:mail/index.adoc[]
*** xref:messages/index.adoc[]
**** xref:messages/imf.adoc[]
**** xref:messages/mime.adoc[]
** xref:protocols/index.adoc[]
*** xref:protocols/smtp.adoc[]
*** xref:protocols/pop.adoc[]
*** xref:protocols/imap.adoc[]
*** xref:protocols/jmap.adoc[]
*** xref:protocols/esmtp.adoc[]
*** xref:protocols/lmtp.adoc[]
** xref:storage/index.adoc[]
*** xref:storage/mailbox.adoc[]
*** xref:storage/users.adoc[]
** xref:processing/index.adoc[]
** xref:configuration.adoc[]
** xref:glossary.adoc[]

=====================================================
== File: docs/modules/concepts/pages/configuration.adoc
=====================================================
= Configuration

== Overview

An important aspect to understand about James is the idea of "configuration".
Sometimes "configuration" means different things to different people, so we
wanted to ensure that what we mean by the concept is clear and precise, 
because in order operate a James server, you will necessarily need to 
configure it.

A "*Configuration*" is a https://martinfowler.com/bliki/ValueObject.html[value object]
that communicates to a James server how the xref:user/index.adoc#_operator[Operator] wishes the
server to behave. It is very similar to an interface, but yet it is not quite an interface
(which is why we call it something different).

An "interface" provides a means for an Operator to interact with a server as part of the
normal course of ongoing operations. Interfacing with the system essentially means either
reading the server's current state, or updating the server's current state. A typical example
would be adding a new mailbox via the xref:concepts:???.adoc[Useradmin API]. Each time the Operator
interacts with the system via an interface, although the *state* of the system may change, 
the *behavior* of the system is not expected to change.

By contrast, "configuration" of a system (also a noun, but yet not the same as the
"Configuration" we mention above) is more like a switching mechanism that instructs the server
how to behave given some kind of interaction via an interface. For example, if a James server
is configured to allow multiple domains, then if an Operator adds "user@domain1.com" and
"user@domain2.com", the server will happily accept the command. If only a single domain is
permitted via configuration, then only one of those mailboxes will be allowed. In other words,
given the same interaction by the Operator, given different configurations the behavior of 
the system is different.

Some systems call these "settings", so as a user of a system you would "configure your settings".



=====================================================
== File: docs/modules/concepts/pages/mail/index.adoc
=====================================================
= All About Emails
:navtitle: Emails

The https://en.wikipedia.org/wiki/History_of_email[history of email] has resulted
in a convoluted patchwork of standards and practices, which can be very difficult
to understand and decipher. Fortunately, James has your back.

We have built up our own view of emails that allows us to process messages in a
consistent and comprehensible way.

To help you understand how James approaches emails, we have divided this section
up into the following parts:

 * xref:messages/index.adoc[]
 * xref:protocols/index.adoc[]

=====================================================
== File: docs/modules/concepts/pages/storage/mailbox.adoc
=====================================================
= Mailboxes
:navtitle: Mailboxes

== Overview

To (over)use the analogy once again of a postal system, we think of a mailbox
as a place where a letter is placed to await pickup by its recipient. Although
current methods have evolved considerably, the original idea used for the development
of email was exactly that. The concept <<RFC196,has been around officially>> since
at least 1971. The image of a mailbox is so prevalent that, although current
systems have evolved to do so much more than just hold messages for processing,
the industry continues to apply the concept.

The more general term is "Email Storage". It is necessary to store email for
many reasons:

 * As a mailbox system &mdash; part of a queue to await processing
 * As a persistence mechanism &mdash; a place where you can go back and predictably
    locate a message that you may want to refer to again in the future
 * As an archive &mdash; a place where you may want to store "deleted" emails so that
    you can potentially retrieve them if you wish to change your mind later
 * As a temporary step in a process &mdash; perhaps you have a "todo" folder where
    you temporarily store an email that you intend to process soon

There are numerous ways to store emails, just as there are numerous reasons for
storing them:

 * A <<Specifications,standardized>> "mailbox" format
 * A relational database
 * A custom file-based mechanism
 * Etc.

This section briefly describes how email storage is a core concept in an
email system.



== Specifications

=== Electronic Mail Box

==== RFC196

The concept of an "electronic mail box" was 
https://tools.ietf.org/html/rfc196[initially specified] way back in 1971.
It is amusing to read the retro concepts in the initial description of this
document:

  The purpose of this protocol is to provide at each site a
  standard mechanism to receive sequential files for immediate or

=====================================================
== File: docs/modules/concepts/pages/storage/users.adoc
=====================================================
= User Repository
:navtitle: Users

== Overview

Whereas xref:storage/mailbox.adoc[mailboxes] are clearly a core component of
any email system, user management is a lighter shade of gray.

// "Repository" should be "Directory". See JAMES-3360.
On the one hand, mailboxes ought to match up with actual 
xref:user/index.adoc#_user[Users], so there is
a clear relationship between mailbox management and user management.
Because of this relationship, it is not at all strange to include a user respository
within an email system.

However, on the other hand email is only one of many applications that require
user management. It is therefore also completely reasonable to use some kind of
centralized user directory, and ensure that mailboxes somehow synchronize with
this external system.

The former case is much simpler to manage, but requires duplicate and therefore
unproductive work. The latter case can become quite complex from a technological 
perspective (and all the risks that are associated with it), but reduces the
amount of unproductive work.

== Common Operations

// "Repository" should be "Directory". See JAMES-3360.
Because the user repository is used in the context of managing mailboxes, there
are some operations that are relatively common to any email system.

=== Domain Management

A mailbox belongs to a https://en.wikipedia.org/wiki/Domain_name[domain]. For a mail
system that can process multiple domains, the system will usually have operations to:

* List available domains
* Add a domain
* Remove a domain
* Update a user's password


=== User Management

A User has at least one mail box, and will usually have a canonical mailbox
that matches the user's identity in the system.
For each domain that is managed by the system, it is common to be able to:

* List all users for the domain
* Add a user

=====================================================
== File: docs/modules/concepts/pages/storage/index.adoc
=====================================================
= Storage
:navtitle: Storage

== Overview

Email is useful because any one person can send a message to any other person,
anywhere in the world. The heart of email is the ability to transfer some message
based on a  commonly-understood message format between two different systems that
may have been developed entirely independently of each other. The concept is relatively
simple, but the fact that email is so ubiquitous is simply a miracle.

However, there is more to email than just the transfer of messages.

For starters, I want people I know to be able to send me a mail even when 
I happen to be out mountain climbing. I want to be able to receive the message
when I'm not available, then review it afterward when I am back at my desk.
For this reason, email is by design asynchronous. Time can pass between the moment
a mail is sent and the moment it is read. 
In the meantime, it needs to be stored somewhere.


Additionally, although it is possible to read a message, then discard it, never to be seen again,
it is more common for people to archive a message. Some people even get creative and
use their email for various other purposes, such as a kind of poor man's information archive.
Many corporations use email for business purposes, which requires administration of
users within the organization.
Even individuals with a self-hosted email server want to ensure that their system does
not get abused as an xref:concepts:glossary.adoc#open_relay[open relay].

All of these types of concerns requires that the system maintain some kind of state,
whether that be the messages themselves, information about the system's users,
and even in some cases user credentials. Keeping state requires a storage system.
The system of storage must work intimately with the various 
xref:protocols/index.adoc[protocols].

In this section, we describe the two principle types of storage that James manages:

 * xref:storage/mailbox.adoc[Mailboxes] for email storage, and
// "Repository" should be "Directory". See JAMES-3360.
 * xref:storage/users.adoc[User Repository] for data about Mailbox users.

=====================================================
== File: docs/modules/concepts/pages/messages/mime.adoc
=====================================================
= Multipurpose Internet Mail Extensions
:navtitle: MIME

== Overview

The base format of an email message is xref:messages/imf.adoc[Internet Message Format"],
but most contemporary messages use a format called
https://en.wikipedia.org/wiki/MIME["Multipurpose Internet Mail Extensions"].
MIME specifies how to extend a valid IMF message, dealing with character encodings, 
various file formats, and many other odds and ends that make email what it is today.

A user of email rarely has to be concerned with the MIME specifications. Usually the
communications system should take care of all the nitty gritty, and even then MIME 
processing is usually at a very low level. For this reason, the blissfully simple 
conception of a simple "email" is usually just fine from the perspective of a user
and even in most cases for a developer.




== Specifications

Multipurpose Internet Mail Extensions, or just MIME, functions much like an extension
to IMF in order to:

 * Add different character sets for internationalization
 * Allow for processing of media types other than plain text

=== RFC2045

https://tools.ietf.org/html/rfc2045[RFC2045] ("Multipurpose Internet Mail Extensions
Part One: Format of Internet Message Bodies")
describes the message body format of an email. It is part of a serious of MIME
specifications including <<RFC2046>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.
This particular document in the series specifies the various headers that
are used to describe the structure of a MIME message.



=== RFC2046

https://tools.ietf.org/html/rfc2046[RFC2046] ("Multipurpose Internet Mail Extensions
Part Two: Media Types") describes the various MIME media types, such as
plain text, images, videos, etc. It is part of the serious of MIME specifications
that includes <<RFC2045>>, <<RFC2047>>, <<RFC2048>>, and <<RFC2049>>.




=== RFC2047

=====================================================
== File: docs/modules/concepts/pages/messages/imf.adoc
=====================================================
= Internet Message Format
:navtitle: IMF

== Overview

What people casually call "email" actually refers more specifically to a
text message written in a specified format called
https://en.wikipedia.org/wiki/Email["Internet Message Format"] or "IMF".
After the first IMF specification was published in 1982 there was no looking back.
Email took the world by storm. Today it is arguably the most prevalent means of 
communicating with a distant party.

IMF is very basic, and is limited to only specifying a syntax for text messages.  
For the transmission of images, audio, or other types of data we need to make
use of the xref:mail/messages/mime.adoc[MIME] specification. 
Although IMF forms the base standard upon which
email is based, email today is rarely used without MIME. We therefore consider
for practical purposes that an email message is essentially the equivalent of
a MIME message.



== Specifications

The specifications for Internet Message Format (IMF) form the basis of what we commonly
call "email".

=== RFC822

https://tools.ietf.org/html/rfc822[RFC822] ("Standard for the Format of ARPA Internet Text Messages")
was the original standard that defined the format of an email. It was obsoleted by
<<RFC2822>>. The definition of an email under this standard was an attempt to take the lessons
learned from the ARPANET and extend the use of text messaging to a broader context.

Electronic mail messages are defined as having contents and an envelope. The contents
consist of header fields and, optionally, a body. The body is nothing more than
a (potentially empty) sequence of lines of text.

Although this sounds like an extremely simple concept, to get two completely separate systems
to agree and understand each other is a surprisingly complex problem that most people
today take for granted. Most of RFC822 deals with the nitty-gritty of formatting and parsing
this type of text message.

This specification deals with the headers, additionally relating them to the sending and
forwarding of messages. The body content is dealt with in <<RFC2045>>



=== RFC2822


=====================================================
== File: docs/modules/concepts/pages/messages/index.adoc
=====================================================
= Email Messages
:navtitle: Messages

An email message is essentially a simple text message that is communicated
from one party to another. It is no miracle that two unknown parties are
able to communicate; rather we can thank a set of standards that
allow any two unrelated systems to process an email even if the system owners
do not know each other.

The two most important standards upon which today's emails are based
are:

 * xref:messages/imf.adoc[Internet Mail Format] (IMF)
 * xref:messages/mime.adoc[Multipurpose Internet Mail Extensions] (MIME)

=====================================================
== File: docs/modules/concepts/pages/protocols/jmap.adoc
=====================================================
= JSON Meta Application Protocol (JMAP)
:navtitle: JMAP

== Overview

https://jmap.io/[JSON Meta Application Protocol] ("JMAP")
is

From <<RFC8620>>:

   The JSON Meta Application Protocol (JMAP) is used for synchronising
   data, such as mail, calendars, or contacts, between a client and a
   server.  It is optimised for mobile and web environments and aims to
   provide a consistent interface to different data types.

   This specification is for the generic mechanism of data
   synchronisation.  Further specifications define the data models for
   different data types that may be synchronised via JMAP.


== Specifications

=== RFC8620

https://tools.ietf.org/html/rfc8620[RFC8620] ("The JSON Meta Application Protocol (JMAP)")

== Related Concepts



=====================================================
== File: docs/modules/concepts/pages/protocols/imap.adoc
=====================================================
= Internet Message Access Protocol (IMAP)
:navtitle: IMAP

== Overview

https://en.wikipedia.org/wiki/Internet_Message_Access_Protocol[Internet Message Access Protocol],
or IMAP, is a protocol used by email clients to retrieve 
xref:messages/index.adoc[email messages] from a xref:glossary.adoc#email_server[mail server].
One could say that it is effectively in competition with xref:protocols/pop.adoc[POP]
because it accomplishes a function similar in nature, and most clients will force you
to choose one or the other.
These days, the natural choice of protocol tends to be IMAP rather than POP.

The main difference between IMAP and POP is that messages are kept on the server, which
keeps a kind of master reference. Instead of transferring the message to the client,
only an image, or copy of the message is kept locally. When the client synchronises with
the state of the server, it will tend to mimic that state. So if a new message is stored
in a mailbox, it will appear on the client, or if a message is deleted from the server,
it will also be deleted from the client.

The user can control the state of server from the client by adding, deleting, or moving
messages between folders. The user can also add folders from the client, the state of which
will be stored on the server.


== Specifications

=== IMAP

Apparently, no official specification exists for the original IMAP.
It became a specification with the publication of <<IMAP2>>


=== IMAP2

==== RFC1064

https://tools.ietf.org/html/rfc1064[RFC1064] ("Interactive Mail Access Protocol - Version 2")
was the original IMAP2 specification, published in 1988. The specification was obsoleted
by <<RFC1176>>.

==== RFC1176

https://tools.ietf.org/html/rfc1176[RFC1176] ("Interactive Mail Access Protocol - Version 2")
provides various, somewhat minor updates to <<RFC1064>>. This specification was superseded by
the first IMAP3 specification, <<RFC1203>>.

=== IMAP3

==== RFC1203

=====================================================
== File: docs/modules/concepts/pages/protocols/smtp.adoc
=====================================================
= Simple Mail Transfer Protocol (SMTP)
:navtitle: SMTP

== Overview

When the original specification for Simple Mail Transfer Protocol, or SMTP, 
was published almost 40 years ago together with 
xref:messages/imf.adoc[IMF], email as we know it today was born.



== Specifications

=== RFC821

https://tools.ietf.org/html/rfc821[RFC821] ("Simple Mail Transfer Protocol")
was the original SMTP specification published in 1982. 
It was obsoleted by <<RFC2821>> in 2001.

=== RFC2821

https://tools.ietf.org/html/rfc2821[RFC2821] ("Simple Mail Transfer Protocol") replaced
<<RFC821>>. It was itself replaced by <<RFC5321>> in 2008.

=== RFC 5321

https://tools.ietf.org/html/rfc5321[RFC5321] is the currently used standard for
"Simple Mail Transfer Protocol", or "SMTP". Published in 2008, it is "a specification of the basic 
protocol for Internet electronic mail transport". If you are interested in all
the gory details, we recommend that you read this document.

This specification has many dependencies with xref:messages/imf.adoc[IMF],
xref:messages/mime.adoc[MIME], and other technical concepts, which can quickly
become utterly confusing.
Here, we provide a very short and simplified description of those portions of the 
specification that we felt were interesting enough to repeat here.

As the spec mentions, "SMTP transports a mail object",  a mail object being described
as an object that contains both an envelope and content. An SMTP client connects
to a server and communicates via a session. Both client and server provide a
mail transport service, and are therefore act as "Mail Transfer Agents", or
"MTAs". A mail originates and terminates with a "Mail User Agent" ("MUA").
On the originating side, a MUA may, for instance, collect mail to be transmitted
by a user and hand it off to an MTA. On the terminating side, an MTA would 
hand a mail off to an MUA.

"SMTP sessions are stateful, with both parties carefully maintaining a
common view of the current state." The session is initiated by the client,
which establishes a two-way channel to an SMTP server. The session must either
close successful (or with a failure message), else delivery is considered to

=====================================================
== File: docs/modules/concepts/pages/protocols/index.adoc
=====================================================
= Transmission Protocols
:navtitle: Protocols 

The true value of email is that any one party can communicate with any
other party located virtually anywhere. All they need are a common understanding
of a xref:messages/index.adoc[message format], and a means of
transmitting the message.

Transmitting email messages between parties requires a mutually-known protocol. 
It turns out that there are several standard protocols used for the 
transmission of email messages, each with a different purpose:

 ** xref:protocols/smtp.adoc[Simple Mail Transfer]
 ** xref:protocols/pop.adoc[Post Office]
 ** xref:protocols/imap.adoc[Internet Message Access]
 ** xref:protocols/jmap.adoc[JSON Meta Application]
 ** xref:protocols/lmtp.adoc[Local Mail Transfer]

=====================================================
== File: docs/modules/concepts/pages/protocols/pop.adoc
=====================================================
= Post Office Protocol (POP)
:navtitle: POP

== Overview

The https://en.wikipedia.org/wiki/Post_Office_Protocol[Post Office Protocol], 
or POP, is described in the original specification
as being "a simple method for workstations to dynamically access mail from 
a xref:storage/index.adoc[mailbox server]" (though interestingly "mailbox server" 
is never actually defined in this specification nor in later specifications. ??)

POP was proposed as the first non-xref:protocols/smtp.adoc[SMTP] protocol aimed
at users for the purpose of retrieving emails stored remotely for local consumption.
POP was developed in pre-spam days, so was inherently a non-secure protocol.
It has been updated several times to address several issues, including lack of
security, so that POP3 is now the current specification.

As the name suggests, the protocol is modeled after a post office. The analogy being:

 * The various SMTP servers along the transmission chain are like post offices
 * The user's mail server is the local post office that will dispatch the mail to the recipient
 * The postman is, ummm, well no analogy is perfect ??
 * The mail gets dropped into the user's mailbox (though just to make the analogy even 
    muddier there is an option to leave a copy on the server)

Analogies aside, the protocol worked quite well for most users, and is still widely
in use today.

POP requires essentially two pieces, the POP Client and the POP Server. How the
message gets initially delivered to the POP Server and how a message is managed
once delivered to the POP Client is out of scope of the POP protocol.


== Specifications

=== POP

POP has been around since the early days of email. The original specification
<<RFC918>> was published in 1984. 


==== RFC918

https://tools.ietf.org/html/rfc918[RFC918] ("Post Office Protocol") was the original
specification published in 1984. The RFC "suggests a simple method for workstations 
to dynamically access mail from a mailbox server."
Like xref:protocols/smtp.adoc[SMTP] that came before it, POP is a session-based
protocol with a handful of defined commands.
This RFC was obsoleted shortly after its publication by <<RFC937>>.


=====================================================
== File: docs/modules/concepts/pages/protocols/esmtp.adoc
=====================================================
= SMTP Service Extensions (ESMTP)
:navtitle: ESMTP

== Overview

https://en.wikipedia.org/wiki/Extended_SMTP[SMTP Service Extensions], written as "ESMTP"
and characterized in the literature as "Extended SMTP" (and sometimes "Enhanced SMTP")
is a framework for extending SMTP. Extensions are expected to be registered with
IANA and negotiated between the client and server.

Whereas SMTP mandates that a session begins with the "HELO" command, ESMTP requires
the "EHLO" (extended hello) command. Note that nowadays even "standard" SMTP uses
EHLO as its initial greeting, and only falls back to HELO, so in a sense every
SMTP server has effectively become an ESMTP server.

The ESMTP specification itself no longer actually exists independently of SMTP.
We mention it here mostly for completion, historical purposes, and as a reference 
to a concept that is still very much in use, albeit now as a concept internal to
SMTP.


== Specifications

=== RFC1425

https://tools.ietf.org/html/rfc1425[RFC1425] ("SMTP Service Extensions") is the originally
published ESMTP specification. It was obsoleted by <<RFC1651>>.


=== RFC1651

https://tools.ietf.org/html/rfc1651[RFC1651] ("SMTP Service Extensions") obsoletes <<RFC1425>>
and was itself obsoleted by <<RFC1869>>.


=== RFC1869

https://tools.ietf.org/html/rfc1869[RFC1869] ("SMTP Service Extensions") obsoletes <<RFC1651>>, and
is essentially the final specification in which ESMTP was defined separately from SMTP. When this
spec was obsoleted by xref:protocols/smtp.adoc#RFC2821[RFC2821], it was incorporated into the
SMTP specification.
 

== Related Concepts

 * *xref:protocols/smtp.adoc[SMTP]*, because ESMTP defines an extension framework for SMTP
 * *xref:protocols/lmtp.adoc[LMTP]*, as LMTP is defined by the ESMTP framework


=====================================================
== File: docs/modules/concepts/pages/protocols/lmtp.adoc
=====================================================
= Local Mail Transfer Protocol (LMTP)
:navtitle: LMTP

== Overview

https://en.wikipedia.org/wiki/Local_Mail_Transfer_Protocol[Local Mail Transfer Protocol] ("LMTP")
is

From <<RFC2033>>:

   Although LMTP is an alternative protocol to ESMTP, it uses (with a
   few changes) the syntax and semantics of ESMTP.  This design permits
   LMTP to utilize the extensions defined for ESMTP.  LMTP should be
   used only by specific prior arrangement and configuration, and it
   MUST NOT be used on TCP port 25. 


== Specifications

=== RFC2033

https://tools.ietf.org/html/rfc2033[RFC2033] ("Local Mail Transfer Protocol") was published
in 1996, and defines a simplified protocol for local mail delivery mainly inspired by
xref:protocols/esmtp.adoc[ESMTP]. It is the first, last, and only specification of its kind.


== Related Concepts

LMTP relates to:

 * *xref:protocols/esmtp.adoc[ESMTP]*, as it is a derivative thereof


=====================================================
== File: docs/modules/concepts/pages/user/index.adoc
=====================================================
= James User Model
:navtitle: User Model


For clarity, we have defined various roles for actors who interact
with xref:servers:index.adoc[James servers] in one way or another.
The deliverables we make available are produced with these roles in mind.
Note that any given person may play more than one role, even at the same
time.

 * <<User>>
 * <<Operator>>
 * <<Integrator>>
 * <<Developer>>
 * <<Contributor>>
 * <<Committer>>
 * <<PMC Member>>

== User

A **User** simply uses email without any notion of what server is providing the service.

More precisely, in typical cases a User will have an email client for reading and writing email. The
xref:glossary.adoc[email client] will connect to the James server via
xref:protocols/smtp.adoc[SMTP],
xref:protocols/pop.adoc[POP], or
xref:protocols/imap.adoc[IMAP].
The User will have no indication anywhere that the server is a James server.


== Operator

An **Operator** installs and runs James for the benefit of Users.

The Operator does not compile any Java code, and does not require any software
development environment. 

Apache James offers Operators a range of servers for various use cases, including:
 * A xref:servers:basic/index.adoc[Basic Server] ideal for busy Operators who
   are interested in an easy-to-use self-hosting solution, but who may not have the
   time to gain deep expertise
 * An xref:server/advanced/index.adoc[Advanced Server] well-suited for Operators with
   advanced skills and resources who are not daunted by getting their hands dirty
   with configurations or using built-in extensions



== Integrator 

An **Integrator** has some expertise with Java or a JVM-based language. Based 

=====================================================
== File: docs/modules/concepts/pages/processing/index.adoc
=====================================================
= Mail Processing Domain Model
:navtitle: Processing

(TODO)


=====================================================
== File: docs/modules/concepts/pages/glossary.adoc
=====================================================
= Glossary

[[email_client]]
Email Client::
Any software application that acts as a POP Client or an IMAP Client.

xref:messages/imf.adoc[IMF]::
*Internet Message Format* (IMF) is the base specification that defines the
syntax of an email message.

[[email_server]]
Email Server (or Mail Server)::
Any host that contains a software application that acts as a POP Server, an
IMAP Server, or an MTA.

IMAP::

IMAP Client::
One of the main actors in an email system that implements the IMAP protocol. The client
acts as a slave, in that it mirrors the state of the IMAP Server.

IMAP Server::
One of the main actors in an email system that implements the IMAP protocol. The server
acts as the master, in that it dictates the state that will be seen on each of the
IMAP Clients.

JMAP::

xref:messages/mime.adoc[MIME]::
*Multipurpose Internet Mail Extension* (MIME) is a specification that extends
IMF, defining most of the "advanced" features of email.

[[mta]]
MTA::
A *Mail Transfer Agent* (MTA) is a host that is capable of providing a mail
transport service compliant with the SMTP protocol.

MUA::
A *Mail User Agent* (MUA) is either an agent that hands over a message to an initial
MTA on the originating side of a transmission, or receives the message from the
final MTA on the terminating side of a transmission. It is in some respects similar to
an MTA, but is local in scope and does not necessarily follow a known specification.

xref:protocols/smtp.adoc[SMTP]::
*Simple Mail Transfer Protocol* (SMTP) is a protocol that specifies how to transmit
a valid email message from one MTA to another.

[[open_relay]]
Open Relay::


=====================================================
== File: docs/modules/concepts/pages/index.adoc
=====================================================
= Apache James Core Concepts
:navtitle: Concepts

The core domain of Apache James is intimately related to email communications.
Therefore this section is divided into topics that deal with the various
aspect of email systems.

 * <<emails>>
 * <<protocols>>
 * <<mailbox>>
 * <<processing>>

[#emails]
== Email Messages

Electronic Mail (often written as "e-mail" or "email") is a means of
exchanging messages over a data network. In our context, it is obvious
that we mean "electronic mail" and not "postal mail", so we usually just
write "mail".

xref:mail/index.adoc[Email messages] are based on a few specifications
that are not easy to digest, so we make an effort to provide a simplified
model.




[#protocols]
== Transmission Protocols

Emails are only useful because people can communicate with each other.
To allow for this, obviously there must be a means of transmitting messages
from one user to another. A number of different protocols have emerged to
handle the various different requirements of using email in a practical 
manner. The most common xref:protocols/index.adoc[transmission protocols]
are SMTP, POP, and IMAP. More recently JMAP is an interesting protocol
that merits attention.





[#mailbox]
== Mailbox and Email Storage

Email would not be very useful if, like in https://www.youtube.com/watch?v=0TiqXFssKMY[Mission Impossible], 
a message would self-destruct immediately after being read.
For those of us who are not secret agents, we generally prefer to keep
a record of those messages that we receive. For this reason we need a means
of xref:storage/index.adoc[storing messages].

=====================================================
== File: docs/modules/ROOT/nav.adoc
=====================================================
* Apache James Reference Documentation

=====================================================
== File: docs/modules/ROOT/pages/index.adoc
=====================================================
= Welcome

Welcome to the Apache James Reference Documentation! These documents are for version {page-version} of James.

Apache James is a flexible email platform that provides out-of-the-box mail servers that you can start
using in production immediately.
James runs on the JVM and is highly customizable.

This Reference Book is divided into the following Parts:

* xref:james-project:concepts:index.adoc[James Core Concepts]
**    These are the core concepts that describe what James is all about.
    Start here if you want to learn more about what James can do
    and how it is designed.
* xref:james-project:servers:index.adoc[James Servers]
**    We provide a few out-of-the-box servers that you can 
    choose from depending on your needs. Start here if you just
    want to get up and running quickly with a working production-grade mail server.
* xref:james-project:customization:index.adoc[Customization]
**    Shows how you can customize any James server with the 
    functionalities that you need.
    Check out this section if you have special business or technical
    needs and are interested in a custom solution.
* xref:james-project:development:index.adoc[James Developer Guide]
**    A guide aimed at experienced developers, describing 
    how you can assemble your own specialized server.
* xref:james-project:community:index.adoc[James Community]
**    All about the Apache James community, and how you can be 
    part of this active and dynamic group, too!

Please note that this Reference Documentation is a **living document**. It is subject to change. You are currently reading version {page-version}. If you find anything that is unclear, unfinished, or confusing, please do not hestiate to xref:james-project:community:index.adoc[lend us a hand].

=====================================================
== File: docs/modules/development/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:logging.adoc[]

=====================================================
== File: docs/modules/development/pages/deployment-tests.adoc
=====================================================
= How to run deployment Tests
:navtitle: Deployment tests

We wrote some MPT (James' Mail Protocols Tests subproject) deployment tests to validate a James
deployment.

It uses the External-James module, that uses environment variables to locate a remote
IMAP server and run integration tests against it.

For that, the target James Server needs to be configured with a domain `domain` and a user `imapuser`
with password `password`. Read above documentation to see how you can do this.

You have to run MPT tests inside docker. As you need to use maven, the simplest option is to
use james/parent image, and override the entry point ( as git and maven are already configured
there ) :

    $ export JAMES_ADDRESS=127.0.0.1
    $ export JAMES_IMAP_PORT=143
    $ export JAMES_SMTP_PORT=25

    $ mvn -T 1C -DskipTests -pl org.apache.james:apache-james-mpt-external-james -am install
    $ mvn -T 1C -pl org.apache.james:apache-james-mpt-external-james test -Pintegration-tests

Where :

* JAMES_IP: IP address or DNS entry for your James server
* JAMES_IMAP_PORT: Port allocated to James' IMAP port (should be 143).
* JAMES_SMTP_PORT: Port allocated to James' SMTP port (should be 25).



=====================================================
== File: docs/modules/development/pages/logging.adoc
=====================================================
= Logging in Apache James

NOTE: This information targets developers.

Logging is very important when running a software.
Most of the time people use logs for debugging and troubleshooting issues in production.
In Apache James we leverage a logging facade for logging http://www.slf4j.org/[Slf4j] .
Please see the documentation for exact details.

In a typical application logs are stored for a specific period.
This can be 1 day, 1 week, etc.

Some other typical scenarios include:

* Rotating logs periodically.
* Shipping logs centrally.
* Saving some logging messages to other files / end devices

By leveraging a logging facade like Slf4j, the end user has the ability to use different logging back ends and achieve the above requirements.

Logging is something we do to help the people running our code.
We also help ourselves when they encounter bugs, and they need to share information with us for a fix.
As developers, we should be mindful of the logging statements.
We should also be mindful about the performance implications of logging and not abuse it.

== Loggers used in code

You can define a logger using a string or a class.
For common loggers it's ok to use a string name.

[source,java]
--
    private static final Logger LOGGER = LoggerFactory.getLogger("org.apache.james.CONFIGURATION");
    private static final Logger LOGGER = LoggerFactory.getLogger(JamesServerMain.class);
--

Loggers can be hierarchical.
This helps when we build a logger from a class name, and we use package structure to drive the logger hierarchy.

The most useful loggers should to be documented below.
Please maintain this list of loggers.

org.apache.james.CONFIGURATION:: It is used to log events related to configuration loading and updating.

=====================================================
== File: docs/modules/development/pages/index.adoc
=====================================================
= Apache James Developer Guide
:navtitle: Developer Guide

(TODO)


=====================================================
== File: docs/modules/community/nav.adoc
=====================================================
* xref:index.adoc[]
** xref:mailing-lists.adoc[]
** xref:contributing.adoc[]
** xref:guidelines.adoc[]
** xref:download.adoc[]
** xref:website.adoc[]
** xref:release.adoc[]
** xref:support.adoc[]
** Apache Software Foundation
*** https://www.apache.org/[ASF]
*** https://www.apache.org/foundation/getinvolved.html[Get involved]
*** https://www.apache.org/foundation/faq.html[FAQ]
*** https://www.apache.org/licenses/[Licenses]
*** https://www.apache.org/security/[Security]
*** https://www.apache.org/foundation/sponsorship.html[Sponsorship]
*** https://www.apache.org/foundation/thanks.html[Thanks]

=====================================================
== File: docs/modules/community/pages/support.adoc
=====================================================
= Professional support

Here is a list of companies which can provide you some support on James.

== Baechler Craftsmanship

mailto:matthieu@baechler-craftsmanship.fr[*Baechler Craftsmanship*] has a very strong knowledge both on email and James. The company is
run by a long-time contributor and PMC of James which contributed significant enhancements
over the years.

The company is committed to contribute to James and offers consultancy for companies willing
to use James on their own infrastructure and/or need enhancements to fit their own needs.

Free Software is a core value of the company and it can also help customers to work with
James community in an efficient and positive way.

== Linagora

image::linagora.png[link=https://linagora.com]

*Linagora* is an Open Source Software Company.

Their mission is to bring digital independence to their customers.

They are focused on large organizations both from private and public sector. They have set themselves the goal of
helping Governments to achieve their digital sovereignty.

*Linagora* can offer professional services related to James: support, feature development or project integration.

=====================================================
== File: docs/modules/community/pages/website.adoc
=====================================================
= Building and publishing the website

The source code of website https://james.apache.org[james.apache.org] is located in src/homepage.
Here are the instructions how to publish new changes to the website.

1. Install Apache Maven 3.0.2+ and make its binary 'mvn' available on your PATH.
See http://maven.apache.org/download.html#Installation.
2. run "mvn clean site"
3. Test the built site in your browser from the {path}/target/site folder
4. If everything looks OK, deploy the site using "mvn clean site-deploy".
5. Wait for the changes to replicate to the Apache web server or setup 140.211.11.10:80 as
a proxy to review the changes (described here: http://www.apache.org/dev/project-site.html)

To deploy the technical reports use the "-Psite-reports" profile.

For wagon-ssh-external configuration see
http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ssh-external.html

You can alternatively use a docker container to build the website :

You need to build the homepage by:

    $ docker build -t james/homepage src/homepage-docker
    $ docker run -v $PWD:/origin -v $PWD/site:/destination james/homepage master

In order to test the homepage, you can use this command:

    $ docker run --rm -v $PWD/site:/srv/jekyll  -p 4000:4000 -it jekyll/minimal:3.8.3 jekyll serve

the site will be available at http://localhost:4000/

Then you build the other pages by:

    $ docker build -t james/site src/site-docker
    $ docker run -v $PWD/.m2:/root/.m2 -v $PWD:/origin -v $PWD/site:/destination james/site master

If you need to update the current site, checkout the branch asf-site from Apache git:

    $ git clone https://git-wip-us.apache.org/repos/asf/james-site.git
    $ cd james-site
    $ git checkout origin/asf-site -b asf-site

And replace in the previous commands `$PWD/site` by `<james-site-clone-directory>/content`, for example:

    $ docker run -v $PWD:/origin -v $PWD/../james-site/content:/destination james/homepage master
    $ docker run -v $PWD/.m2:/root/.m2 -v $PWD/../james-site/content:/origin -v $PWD/site:/destination james/site master

Then just push the new site:

    $ cd ../james-site

=====================================================
== File: docs/modules/community/pages/guidelines.adoc
=====================================================
= Apache James Project guidelines
:navtitle: Guidelines

This document defines the guidelines for the Apache James Project. It includes definitions of how conflict is being
resolved by voting and who is able to vote.

The objective here is to avoid unnecessary conflicts over changes and continue to produce a quality system in a timely
manner. Not all conflict can be avoided, but at least we can agree on the procedures for conflicts to be resolved.

== People, Places, and Things

=== Apache James Project Management Committee

The group of volunteers who are responsible for managing the Apache James Project. This includes deciding what is
distributed as products of the Apache James Project, maintaining the Project's shared resources, speaking on behalf of
the Project, resolving license disputes regarding Apache James products, nominating new PMC members or committers,
and establishing these guidelines.

Membership in the Apache James PMC is by invitation only and must be approved by consensus of the active Apache James
PMC members. A PMC member is considered inactive by their own declaration or by not contributing in any form to the
project for over six months. An inactive member can become active again by reversing whichever condition made them
inactive (i.e., by reversing their earlier declaration or by once again contributing toward the project's work).
Membership can be revoked by a unanimous vote of all the active PMC members other than the member in question.

=== Apache James Committers

The group of volunteers who are responsible for the technical aspects of the Apache James Project. This group has write
access to the appropriate source repositories and these volunteers may cast non-binding votes on any technical discussion.

Membership as a Committer is by invitation only and must be approved by consensus of the active Apache James PMC members.
A Committer is considered inactive by their own declaration or by not contributing in any form to the project for over
six months. An inactive member can become active again by reversing whichever condition made them inactive (i.e., by
reversing their earlier declaration or by once again contributing toward the project's work). Membership can be revoked
by a unanimous vote of all the active PMC members (except the member in question if they are a PMC member).

=== Mailing list

The Apache committers' primary mailing list for discussion of issues and changes related to the project
(xref:mailing-lists.adoc#_server_developer_list[server-dev@james.apache.org]). Subscription to the list is open, but
only subscribers can post directly to the list.

=== Private list

The Apache James Project's private mailing list for discussion of issues that are inappropriate for public discussion,
such as legal, personal, or security issues prior to a published fix. Subscription to the list is only opened to Apache
James PMC members and Apache Software Foundation Members.

Topics to be discussed on the private mailing list:

 - Discussion of board reports. PMC members need to report quarterly project activity to the Apache board of directors,

=====================================================
== File: docs/modules/community/pages/download.adoc
=====================================================
= Download Apache James releases
:navtitle: Download releases

https://james.apache.org/download[Download Apache James releases]

=====================================================
== File: docs/modules/community/pages/mailing-lists.adoc
=====================================================
= Mailing lists

Please read the <<_guidelines>> below before subscribing to our lists and join our community.

== James mailing lists

Most James mailing lists are open and also archived and available online.
You can read them even if you are not subscribed. 
You can post only if you are subscribed.

=== Mailing list archives and web browsing

You can browse the mailing list archives online using the https://lists.apache.org/list.html?james.apache.org[Pony Mail] instance.

=== Server user list

*Low traffic*
mailto:server-user-subscribe@james.apache.org[Subscribe]
mailto:server-user-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?server-user@james.apache.org++[Archive]

This is the list where users of the Apache James (Server) meet and discuss issues. Developers are also expected to be
subscribed to this list to offer support to users of Apache James (Server).

=== Server developer list

*Medium traffic*
mailto:server-dev-subscribe@james.apache.org[Subscribe]
mailto:server-dev-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?server-dev@james.apache.org++[Archive]

This is the list where participating developers of the Apache James Project meet and discuss issues, code changes/additions,
etc. Do not send mail to this list with usage questions or configuration problems -- that's what server-user@james is for.

=== Mime4j

*Medium traffic*
mailto:mime4j-dev-subscribe@james.apache.org[Subscribe]
mailto:mime4j-dev-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?mime4j-dev@james.apache.org++[Archive]

Discussions on the http://james.apache.org/mime4j[Mime4j] parser library.

=== James general list

*Low traffic*
mailto:general-subscribe@james.apache.org[Subscribe]
mailto:general-unsubscribe@james.apache.org[Unsubscribe]
link:++https://lists.apache.org/list.html?general@james.apache.org++[Archive]


=====================================================
== File: docs/modules/community/pages/release.adoc
=====================================================
= Creating an official Apache James release

Read details about http://www.apache.org/dev/publishing-maven-artifacts.html[Publishing Maven releases to Maven Central Repository]

In short, just follow the 'standard' process:

* prepare pom for release
* publish snapshot
* prepare release
* stage the release for a vote (don't forget to close the staging repository)
* vote
* release

Don't forget to add your key to https://downloads.apache.org/james/KEYS

    $ ssh people.apache.org
    $ cd /www/www.apache.org/dist/james

== Release cheat sheet

First, discuss your intention to perform a release on server-dev mailing list, to ensure a consensus would be reached
before starting this time-consuming process.

Then you can prepare the release materials:

 * Ensure the `CHANGELOG.md` and `upgrade-instructions.md` files are up to date.
 * Freeze your version in it and initiate a new iteration.
 * Write a blog post within `/src/homepage/_post` about your release.
 * Update the documentation website `/docs`, `src/site`, and `README.md` to point to your new release.
 * Update the `/dockerfiles`

Open a pull request to validate the changes.

=== Running a maven release

Once merged, it is time for the maven release.

Set up your maven configuration in `~/.m2/settings.xml` :

[source,bash]
----
<settings>
  <servers>
    <server>
      <id>apache.snapshots.https</id>
      <username>apacheId</username>
      <password>xxxxxx</password>
    </server>
    <!-- To stage a release of some part of Maven -->
    <server>

=====================================================
== File: docs/modules/community/pages/index.adoc
=====================================================
= Apache James Community
:navtitle: Community

Apache James Project is an Open Source all-volunteer project obtaining its strength from its Community made of
developers and users. All are welcome to the Community!

== Join the community

There are many ways for Users, Developers, Curious and Fans to join and be part of the James Community:

 * https://james.apache.org/[Apache James Website]
 * xref:mailing-lists.adoc[Mailing lists]: Subscribe to the appropriate Mailing Lists according to your interests and profile.
 * https://gitter.im/apache/james-project[Gitter chat room]: Chat in live with the community on Gitter.
 * https://twitter.com/ApacheJames[Twitter]: Express yourself and follow us @ApacheJames.
 * https://github.com/apache/james-project[GitHub]: Read and contribute to the source code of the project.
 * https://issues.apache.org/jira/projects/JAMES[JIRA]: Report issues or make suggestions for the project on our bug tracker.
 * https://builds.apache.org/job/ApacheJames/[CI]: Check the status of James builds on our Jenkins CI.
 * xref:download.adoc[Download releases]: Download artifacts and sources your need for the James Server and James libraries.
 * xref:support.adoc[Professional support]: Find a list of companies which can provide you some support on James.

== Contribute

James is a project that lives from the contributions of its community. *Anyone can contribute!*

That's right, we always want to hear from people with contributions to the code, the documentation, the website,
and bug reports. We more than welcome non-coding contributions.

You can find more information on how to contribute to the James project on the xref:contributing.adoc[contributing] section.

== Articles for contributors

** xref:website.adoc[]
** xref:release.adoc[]

== The Apache Software Foundation

James is a project belonging to the https://www.apache.org/[Apache Software Foundation [ASF\]]. Thus, the Apache Jame project
is governed by a number of xref:guidelines.adoc[guidelines] directly depending on the *ASF*.

If you wish to get more involved with the *ASF* community in general, those links might interest you as well:

 * https://www.apache.org/foundation/getinvolved.html[Get involved with the ASF]
 * https://www.apache.org/foundation/faq.html[Apache FAQ]
 * https://www.apache.org/licenses/[Apache Licenses]
 * https://www.apache.org/security/[The Apache security team]
 * https://www.apache.org/foundation/sponsorship.html[Sponsorship program]
 * https://www.apache.org/foundation/thanks.html[Sponsors list]

=====================================================
== File: docs/modules/community/pages/contributing.adoc
=====================================================
= Contributing

This document defines the different ways available for contributing to the Apache James project.

To keep you informed on James issues, subscribe to the relevant xref:mailing-lists.adoc[mailing lists].

== Be involved in the community

An easy start is to be involved in the community.

Share your experiences with James, your needs, your enhancements proposition via the
xref:mailing-lists.adoc[mailing lists], on https://gitter.im/apache/james-project[Gitter], or on our
https://issues.apache.org/jira/projects/JAMES/issues[Bug Tracker].

Don't hesitate to write articles and blog posts. Use your preferred media to spread the love!

== Reporting bugs

Many improvements come as a direct result of bug reports.

To report a bug, please use the appropriate Bug Tracker JIRA link according to the project you want to address:

* https://issues.apache.org/jira/browse/JAMES[Server]
* https://issues.apache.org/jira/browse/MAILET[Mailet]
* https://issues.apache.org/jira/browse/MAILBOX[Mailbox]
* https://issues.apache.org/jira/browse/PROTOCOLS[Protocols]
* https://issues.apache.org/jira/browse/MPT[MPT]
* https://issues.apache.org/jira/browse/MIME4J[Mime4j]
* https://issues.apache.org/jira/browse/JSIEVE[jSieve]
* https://issues.apache.org/jira/browse/JSPF[jSPF]
* https://issues.apache.org/jira/browse/JDKIM[jDKIM]

Once you are logged on the appropriate JIRA page, click on the red Create button, then complete the different fields
as accurately as possible, so that any user can reproduce the reported bug. Also, note that all your information must be
readable (use markdown).

Then, you have to click on Create to submit your bug.

=== Reporting security vulnerabilities

http://www.apache.org/security/[Security vulnerabilities] should be announced to the Apache Security team.
PMCs will be notified about them, and will work hard to propose fixes as fast as possible.

Specific details about security in James can be found here.

== Documentation

Documentation is an easy way to get on board! Check out the
link:https://issues.apache.org/jira/issues/?jql=project%20%3D%20JAMES%20AND%20resolution%20%3D%20Unresolved%20AND%20labels%20%3D%20documentation%20ORDER%20BY%20priority%20DESC%2C%20updated%20DESC[~documentation]
label on JIRA to get some ideas.

=====================================================
== File: docs/antora.yml
=====================================================
name: james-project
title: Apache James Server
version: '3.8.1'
prerelease: SNAPSHOT
nav:
- modules/concepts/nav.adoc
- modules/servers/nav.adoc
- modules/customization/nav.adoc
- modules/development/nav.adoc
- modules/community/nav.adoc

=====================================================
== File: testing/base/src/main/resources/logback-test.xml
=====================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
                <file>target/test-run.log</file>
                <append>false</append>
                <!-- set immediateFlush to false for much higher logging throughput -->
                <immediateFlush>false</immediateFlush>
                <!-- encoders are assigned the type
                     ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{35} - %msg%n%rEx</pattern>
                </encoder>
        </appender>


        <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
                <encoder>
                        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
                </encoder>
                <immediateFlush>false</immediateFlush>
                <!-- Disable below block for debug logs mode-->
                <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                        <level>ERROR</level>
                </filter>
        </appender>

        <root level="WARN">
                <appender-ref ref="CONSOLE" />
                <appender-ref ref="FILE" />
        </root>
        <logger name="org.apache.james" level="DEBUG" />
        <logger name="org.testcontainers" level="DEBUG"/>
        <logger name="org.apache.james.metrics" level="INFO"/>
</configuration>

=====================================================
== File: testing/base/src/main/resources/testcontainers.properties
=====================================================
checks.disable = false