diff --git a/.bootstraprc b/.bootstraprc
index e579effcaed034a57ec58ed2b2205a61833e0952..60d67fc5d59cf90493f80080cc920cfc898b4981 100644
--- a/.bootstraprc
+++ b/.bootstraprc
@@ -43,10 +43,10 @@
         "collapse": true,
         "dropdown": true,
         "modal": true,
+        "popover": true,
         "scrollspy": true,
         "tab": true,
         "tooltip": true,
         "util": true,
-        "popover": true,
     }
 }
diff --git a/.gitignore b/.gitignore
index 865abbfc27c590cd02937855a4fb245b538a6e34..fec9c94d7648136a5c9a7819e031ecc9beef0d66 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,11 +24,14 @@ __pycache__
 
 /uploads*
 /media*
+/logs*
 
 SCIPOST_JOURNALS
 UPLOADS
 
 /docs/_build
+/docs/*/_build/*
+/docs/local_files/
 /local_files/
 /static/
 static_bundles/
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..be3f7b28e564e7dd05eaf59d64adba1a4065ac0e
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,661 @@
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+<https://www.gnu.org/licenses/>.
diff --git a/README.md b/README.md
index 325b9f60667e163e6a7a0a78598cca2e06e08f40..dcbe4ae84532c16b4bbcc328fbbe0a0dca5a1151 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,13 @@
 # SciPost
-The complete scientific publication portal
+This repository carries the entire codebase for the [scipost.org](https://scipost.org) scientific publication portal.
+
+## Project organization
+Development work for SciPost is headed by [Jean-Sébastien Caux](https://jscaux.org) and Jorran de Wit. Bug reports, issues, suggestions and ideas can be emailed to [techsupport@scipost.org](mailto:techsupport@scipost.org).
+
+If you are competent in web development and would like to join our core development team, please email your credentials to [jscaux@scipost.org](mailto:jscaux@scipost.org).
+
+## License
+This codebase is released under the terms of the GNU Affero General Public License (Version 3, 19 November 2007).
 
 ## Dependencies
 SciPost is written in Python 3.5 using Django 1.11 and requires PostgreSQL 9.4 or
@@ -12,11 +20,11 @@ Make sure that PostgreSQL is installed and running and that a database with user
 good guide how to do this can be found [here](https://djangogirls.gitbooks.io/django-girls-tutorial-extensions/content/optional_postgresql_installation/) (NOTE: stop before the 'Update settings' part).
 
 ### Python version
-Make sure you're using Python 3.5. You are strongly encouraged to use a [virtual environment](https://virtualenv.pypa.io/en/stable/).
+Make sure you're using Python 3.5. You are strongly encouraged to use a [virtual environment](https://docs.python.org/3.5/library/venv.html).
 
 
 ```shell
-$ virtualenv scipostenv --python=python3.5
+$ pyvenv scipostenv
 $ source scipostenv/bin/activate
 ```
 
@@ -34,7 +42,7 @@ Now install dependencies:
 ```
 
 ### Settings
-In this project, most settings are tracked using Git. Some settings however, are still secret are and should stay that way. These settings may be saved into the  `secrets.json` file in the root of the project. The minimum required structure is as follows, please mind the non-empty, but still invalid `SECRET_KEY`:
+In this project, many settings are not sensitive and are thus tracked using Git. Some settings are however secret. These settings may be saved into the  `secrets.json` file in the root of the project. The minimum required structure is as follows (please mind the non-empty, but still invalid `SECRET_KEY`):
 
 ```json
 {
@@ -45,22 +53,38 @@ In this project, most settings are tracked using Git. Some settings however, are
 }
 ```
 
-The settings files itself are saved into `SciPost_v1/settings/local_<name>.py`. Be sure to *wildcard import* the `base.py` file in the top of your settings file. To run the server, one can do it two ways. Either:
+The settings file itself is saved into `SciPost_v1/settings/local_<name>.py`. Be sure to *wildcard import* the `base.py` file in the top of your settings file. To run the server, use one of two ways. Either:
 
 ```shell
 (scipostenv) $ ./manage.py runserver --settings=SciPost_v1.settings.local_<name>
 ```
 
-...or for convenience, export the same settingsfile path to the `DJANGO_SETTINGS_MODULE` variable, so that one can run the django commands are default:
+... or for convenience, export the same settingsfile path to the `DJANGO_SETTINGS_MODULE` variable, so that one can run the django commands by default:
 
 ```shell
 (scipostenv) $ export DJANGO_SETTINGS_MODULE="SciPost_v1.settings.local_<name>"
 ```
 
-One can of course also add the variable to the `~/.bash_profile` for convenience.
+One can of course also add this variable to the `~/.bash_profile` for convenience.
+
+### Mail
+
+In the `mails` application a special [Email Backend](https://docs.djangoproject.com/en/1.11/topics/email/#email-backends) is defined. This will write all emails to the database. To use this backend, in the settings set the the variable `EMAIL_BACKEND` as:
+
+```python
+# settings.py
+EMAIL_BACKEND = 'mails.backends.filebased.ModelEmailBackend'
+EMAIL_BACKEND_ORIGINAL = 'mails.backends.filebased.EmailBackend'
+```
+
+A management command is defined to send the unsent mails in the database. This management command uses the Email Backend defined in the settings under variable `EMAIL_BACKEND_ORIGINAL`. If not defined, this defaults to the Django default: `django.core.mail.backends.smtp.EmailBackend`.
+
+```shell
+(scipostenv) $ ./manage.py send_mails
+```
 
 ### Check, double check
-To make sure everything is set up and configured well, run:
+To make sure everything is set up and correctly configured, run:
 
 ```shell
 (scipostenv) $ ./manage.py check
@@ -79,62 +103,62 @@ While editing assets, it may be helpful to put Webpack in _watch_ mode. This wil
 (scipostenv) $ npm run webpack-live
 ```
 
-#### Sass and bootstrap
+#### Sass and Bootstrap
 Styling will mainly be configured using [.scss files](http://www.sass-lang.com/) in the `scipost/static/scipost/scss/preconfig.scss` file, relying on [Bootstrap v4.0.0-beta](//www.getbootstrap.com/). A full list of variables available by default can be found [here](https://github.com/twbs/bootstrap/blob/v4-dev/scss/_variables.scss).
-All modules are configured in the `.bootstraprc` file; All modules are disabled by default.
+All modules are configured in the `.bootstraprc` file. All modules are disabled by default.
 
 ### Collectstatic
-In order to collect static files from all `INSTALLED_APPS`, i.e. the assets managed by Webpack, run:
+In order to collect static files from all `INSTALLED_APPS` (i.e. the assets managed by Webpack), run:
 
 ```shell
 (scipostenv) $ ./manage.py collectstatic
 ```
 
-This will put all static files in the `STATIC_ROOT` folder defined in your settings file. It's a good idea to use the clear option in order to remove stale static files:
+This will put all static files in the `STATIC_ROOT` folder defined in your settings file. If needed, you can remove stale static files through:
 
 ```shell
 (scipostenv) $ ./manage.py collectstatic --clear
 ```
 
 ### Create and run migrations
-Now that everything is setup, we can set up the datastructures.
+Now that everything is set up, we can create the relevant tables in the database:
 ```shell
 (scipostenv) $ ./manage.py migrate
 ```
 
 ### Create a superuser
-In order to use the admin site, you'll need a superuser account.
+In order to use the admin site, you'll need a superuser account, which can be created using:
 ```shell
 (scipostenv) $ ./manage.py createsuperuser
 ```
 
 ### Create groups and permissions
-Groups and their respective permissions are set using the management command.
+Groups and their respective permissions are set using the management command:
 
 ```shell
 (scipostenv) $ ./manage.py add_groups_and_permissions
 ```
 
-### Run development server
-You are now ready to run the development server:
+### Run server
+You are now ready to run the server:
 
 ```shell
 (scipostenv) $ ./manage.py runserver
 ```
 
 ## Contributors
-Users of the portal are known as Contributors and are created through the registration form accessible from the home page.
+Users of the SciPost portal are known as Contributors and are created through the registration form accessible from the home page.
 
 You can create a number of users, and use the admin site to give them various permissions through memberships of certain groups. For example, you'll want members of the SciPost Administrators and Editorial Administrators groups in order to access the internal management and editorial tools.
 
 ## Initial data
-If you're working on an (almost) empty database, one can easily fill its test database using one of the built-in commands. To create few instances for each available object, simply run:
+If you're working on an (almost) empty test database, you can easily fill it using one of the built-in commands. To create a few instances for each available object, simply run:
 
 ```shell
 (scipostenv) $ ./manage.py populate_db --all
 ```
 
-Run the help argument to find arguments to create instances for individual models.
+Run the same command with the `--help` argument to find arguments to create instances for individual models:
 
 ```shell
 (scipostenv) $ ./manage.py populate_db --help
@@ -146,40 +170,43 @@ Every time fields in any of the models change, a [database migration](https://do
 needs to be created and applied. The first documents a database change and its
 inverse, the second actually changes the database.
 
-Make sure to commit the migration to GIT after applying it, so other developers
+Make sure to commit the migration to Git after applying it, so other developers
 can use them.
 
 ```shell
-(scipostenv) $ ./manage.py makemigration
+(scipostenv) $ ./manage.py makemigrations
 (scipostenv) $ ./manage.py migrate
 ```
 
 ## Search engine
-[Django Haystack]() is used to handle search queries. The search engine needs indexing before proper use.
+[Django Haystack]() is used to handle search queries. The search engine needs indexing before you can use it:
 
 ```shell
 (scipostenv) $ ./manage.py update_index -u default
 ```
-Models involved in searches are re-indexed as per `post_save` signal.
+Models involved in searches are re-indexed using `post_save` signals.
 
 
 ## Documentation
 All project documentation is gathered from `.rst` files and code-embedded docstrings.
-The documentation itself can be found in `docs`.
+The documentation for the codebase can be found in `docs/codebase`.
 
 ### Sphinxdoc
-The documentation is saved in the local database as a Project with name `SciPost`
+The documentation is saved in the local database as a Project with name `SciPost Codebase`,
+with slug `codebase` and path `/docs/codebase`
 (this project should be manually created in the admin under the `Sphinxdoc` app).
 
 To update the docs, simply run
 ```shell
-(scipostenv) $ python3 ../manage.py updatedoc -b scipost
+(scipostenv) $ ./manage.py updatedoc -b codebase
 ```
 
-The documentation is then viewable by navigating to `docs/`.
+The documentation is then viewable by navigating to `docs/codebase`.
+
+There are also other Projects containing information about SciPost, user guides etc. The list can be found on by viewing `docs` in the browser.
 
 
-### Locally-served
+### Locally-served documentation
 The documentation can be rendered using
 [Sphinx](http://www.sphinx-doc.org/). Note that rendering documentation is only
 available from the virtual environment - and only when the host settings have
@@ -188,11 +215,77 @@ been configured.
 To build the documentation, run:
 
 ```shell
-(scipostenv) $ cd docs
+(scipostenv) $ cd docs/[project slug]
 (scipostenv) $ make html
 ```
 
-After this, generated documentation should be available in `docs/_build/html`.
+for each of the documentation projects.
+After this, generated documentation are available in `docs/[project slug]/_build/html`.
+
+## Mails
+The `mails` app is used as the mailing processor of SciPost.
+It may be used in one of two possible ways: with or without editor.
+
+The actual mails only have to be written in the html version
+(the text based alternative is automatically generated before sending).
+Creating a new `mail_code` is easily done by creating new files in the `mails/templates/mail_templates` folder called `<mail_code>.html` and `<mail_code>.json` acting as resp. a content and configuration file.
+
+##### The config file is configured as follows
+`mails/templates/mail_templates/<mail_code>.json`
+
+* `context_object` - (_required_) Instance of the main object. This instance needs to be passed as `instance` or `<context_object>` in the views and as `<context_object>` in the template file (see description below);
+* `subject` - (_string, required_) Default subject value;
+* `to_address` - (_string or path of properties, required_) Default to address;
+* `bcc_to` - (_string or path of properties, optional_) - A comma-separated bcc list of mail addresses;
+* `from_address` - (_string, optional_) - From address' default value: `no-reply@scipost.org`;
+* `from_address_name` - (_string, optional_) - From address name's default value: `SciPost`.
+
+
+### Mailing with editor
+Any regular method or class-based view may be used together with the builtin wysiwyg editor. The class-based views inherited from Django's UpdateView are easily extended for use with the editor.
+
+```python
+from django.views.generic.edit import UpdateView
+from mails.views import MailEditorMixin
+
+class AnyUpdateView(MailEditorMixin, UpdateView):
+    mail_code = '<any_valid_mail_code>'
+```
+
+For method-based views, one implements the mails construction as:
+
+```python
+from mails.views import MailEditingSubView
+
+def any_method_based_view(request):
+    # Initialize mail view
+    mail_request = MailEditingSubView(request, mail_code='<any_valid_mail_code>', instance=django_model_instance)
+    if mail_request.is_valid():
+        # Send mail
+        mail_request.send()
+        return redirect('reverse:url')
+    else:
+        # Render the wsyiwyg editor
+        return mail_request.return_render()
+```
+
+### Direct mailing
+Mailing is also possible without intercepting the request for completing or editing the mail's content. For this, use the `DirectMailUtil` instead.
+
+```python
+from mails.utils import DirectMailUtil
+
+def any_python_method_within_django():
+    # Init mailer
+    mail_sender = DirectMailUtil(mail_code='<any_valid_mail_code>', instance=django_model_instance)
+
+    # Optionally(!) alter from_address from config file
+    mail_sender.set_alternative_sender('SciPost Refereeing', 'refereeing@scipost.org')
+
+    # Send the actual mail
+    mail_sender.send()
+    return
+```
 
 ## Django-extensions
 [django-extensions](https://github.com/django-extensions/django-extensions) provide added commands like
diff --git a/SciPost_v1/settings/base.py b/SciPost_v1/settings/base.py
index 081cd3c2e480baa6e2c353c96dafdb2e415b8201..476ac570dcb5a87340d3c4510eabff473864510c 100644
--- a/SciPost_v1/settings/base.py
+++ b/SciPost_v1/settings/base.py
@@ -89,6 +89,7 @@ INSTALLED_APPS = (
     'commentaries',
     'comments',
     'finances',
+    'invitations',
     'journals',
     'mails',
     'mailing_lists',
@@ -105,7 +106,7 @@ INSTALLED_APPS = (
     'stats',
     'petitions',
     'webpack_loader',
-    'metacore'
+    'metacore',
 )
 
 
@@ -125,7 +126,9 @@ HAYSTACK_SIGNAL_PROCESSOR = 'SciPost_v1.signalprocessors.AutoSearchIndexingProce
 
 SPHINXDOC_BASE_TEMPLATE = 'scipost/base.html'
 SPHINXDOC_PROTECTED_PROJECTS = {
-    'scipost': ['scipost.can_view_docs_scipost'],
+    'admin': ['scipost.can_view_docs_scipost'],
+    'codebase': ['scipost.can_view_docs_scipost'],
+    'users': ['scipost.can_view_docs_scipost'],
 }
 
 CAPTCHA_CHALLENGE_FUNCT = 'captcha.helpers.math_challenge'
@@ -138,9 +141,9 @@ SHELL_PLUS_POST_IMPORTS = (
     ('submissions.factories', ('SubmissionFactory', 'EICassignedSubmissionFactory')),
     ('commentaries.factories',
         ('EmptyCommentaryFactory',
-         'VettedCommentaryFactory',
+         'CommentaryFactory',
          'UnvettedCommentaryFactory',
-         'UnpublishedVettedCommentaryFactory',)),
+         'UnpublishedCommentaryFactory',)),
     ('scipost.factories', ('ContributorFactory')),
 )
 
@@ -153,6 +156,7 @@ MATHJAX_CONFIG_DATA = {
     }
 
 MIDDLEWARE = (
+    # 'django.middleware.http.ConditionalGetMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.locale.LocaleMiddleware',
     'django.middleware.common.CommonMiddleware',
@@ -161,7 +165,7 @@ MIDDLEWARE = (
     'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'django.middleware.security.SecurityMiddleware'
+    'django.middleware.security.SecurityMiddleware',
 )
 
 ROOT_URLCONF = 'SciPost_v1.urls'
@@ -206,7 +210,7 @@ DATABASES = {
         'USER': get_secret("DB_USER"),
         'PASSWORD': get_secret("DB_PWD"),
         'HOST': '127.0.0.1',
-        'PORT': '5432',
+        'PORT': '5432'
     }
 }
 MONGO_DATABASE = {
@@ -266,7 +270,7 @@ WEBPACK_LOADER = {
 }
 
 # Email
-EMAIL_BACKEND = 'mails.backends.extendedfilebased.EmailBackend'
+EMAIL_BACKEND = 'mails.backends.filebased.EmailBackend'
 EMAIL_FILE_PATH = 'local_files/email/'
 EMAIL_SUBJECT_PREFIX = '[SciPost Server] '
 MAILCHIMP_DATABASE_CODE = 'us6'
diff --git a/SciPost_v1/settings/local_JSC.py b/SciPost_v1/settings/local_JSC.py
index 14b06d9ab44773b41532eee5147490c1cc7deb22..ca896e60bb06b07a40d62d19732554f1e4da2434 100644
--- a/SciPost_v1/settings/local_JSC.py
+++ b/SciPost_v1/settings/local_JSC.py
@@ -16,3 +16,7 @@ MAILCHIMP_API_KEY = get_secret("MAILCHIMP_API_KEY")
 LOGGING['handlers']['scipost_file_arxiv']['filename'] = '/Users/jscaux/Sites/SciPost.org/scipost_v1/local_files/logs/arxiv.log'
 LOGGING['handlers']['scipost_file_doi']['filename'] = '/Users/jscaux/Sites/SciPost.org/scipost_v1/local_files/logs/doi.log'
 CROSSREF_DEPOSIT_EMAIL = 'jscaux@scipost.org'
+
+# Customized mailbackend
+EMAIL_BACKEND = "mails.backends.filebased.ModelEmailBackend"
+EMAIL_BACKEND_ORIGINAL = "mails.backends.filebased.EmailBackend"
diff --git a/SciPost_v1/settings/local_jorran.py b/SciPost_v1/settings/local_jorran.py
index 0ca80ebb49d60854a148e3619d6d79bae6e0d078..6b4b12e24cea7c7d0747cf4a948c0a5d03091146 100644
--- a/SciPost_v1/settings/local_jorran.py
+++ b/SciPost_v1/settings/local_jorran.py
@@ -13,25 +13,28 @@ MIDDLEWARE += (
 INTERNAL_IPS = ['127.0.0.1', '::1']
 
 # Static and media
-STATIC_ROOT = '/Users/jorranwit/Develop/SciPost/scipost_v1/local_files/static/'
-MEDIA_ROOT = '/Users/jorranwit/Develop/SciPost/scipost_v1/local_files/media/'
+STATIC_ROOT = '/Users/jorrandewit/Documents/Develop/SciPost/scipost_v1/local_files/static/'
+MEDIA_ROOT = '/Users/jorrandewit/Documents/Develop/SciPost/scipost_v1/local_files/media/'
 WEBPACK_LOADER['DEFAULT']['BUNDLE_DIR_NAME'] =\
-    '/Users/jorranwit/Develop/SciPost/scipost_v1/local_files/static/bundles/'
+    '/Users/jorrandewit/Documents/Develop/SciPost/scipost_v1/local_files/static/bundles/'
 
 MAILCHIMP_API_USER = get_secret("MAILCHIMP_API_USER")
 MAILCHIMP_API_KEY = get_secret("MAILCHIMP_API_KEY")
 
-DATABASES['default']['PORT'] = '5433'
 
 # iThenticate
 ITHENTICATE_USERNAME = get_secret('ITHENTICATE_USERNAME')
 ITHENTICATE_PASSWORD = get_secret('ITHENTICATE_PASSWORD')
 
 # Logging
-LOGGING['handlers']['scipost_file_arxiv']['filename'] = '/Users/jorranwit/Develop/SciPost/SciPost_v1/logs/arxiv.log'
-LOGGING['handlers']['scipost_file_doi']['filename'] = '/Users/jorranwit/Develop/SciPost/SciPost_v1/logs/doi.log'
+LOGGING['handlers']['scipost_file_arxiv']['filename'] = '/Users/jorrandewit/Documents/Develop/SciPost/scipost_v1/logs/arxiv.log'
+LOGGING['handlers']['scipost_file_doi']['filename'] = '/Users/jorrandewit/Documents/Develop/SciPost/scipost_v1/logs/doi.log'
 
 # Other
 CROSSREF_LOGIN_ID = get_secret("CROSSREF_LOGIN_ID")
 CROSSREF_LOGIN_PASSWORD = get_secret("CROSSREF_LOGIN_PASSWORD")
 CROSSREF_DEPOSIT_EMAIL = 'jorrandewit@scipost.org'
+
+# Customized mailbackend
+EMAIL_BACKEND = 'mails.backends.filebased.ModelEmailBackend'
+EMAIL_BACKEND_ORIGINAL = 'mails.backends.filebased.EmailBackend'
diff --git a/SciPost_v1/settings/production.py b/SciPost_v1/settings/production.py
index 96773150db78602acfc4d082f8e88df0fc1dd124..0cb4a7a3d4a9eb2264234519ed961c31bda5fce6 100644
--- a/SciPost_v1/settings/production.py
+++ b/SciPost_v1/settings/production.py
@@ -25,7 +25,8 @@ SESSION_COOKIE_SECURE = True
 CSRF_COOKIE_SECURE = True
 
 # Email
-EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+EMAIL_BACKEND = 'mails.backends.filebased.ModelEmailBackend'
+EMAIL_BACKEND_ORIGINAL = 'django.core.mail.backends.smtp.EmailBackend'
 EMAIL_HOST = get_secret("EMAIL_HOST")
 EMAIL_HOST_USER = get_secret("EMAIL_HOST_USER")
 EMAIL_HOST_PASSWORD = get_secret("EMAIL_HOST_PASSWORD")
diff --git a/SciPost_v1/settings/staging_1.py b/SciPost_v1/settings/staging_1.py
deleted file mode 100644
index 6650202fb06501443bf2f8b75b4a741811d8fadf..0000000000000000000000000000000000000000
--- a/SciPost_v1/settings/staging_1.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# Used on staging server with IP http://146.185.181.185/
-# A Digital Ocean setup
-
-from .base import *
-
-# THE MAIN THING HERE
-DEBUG = True
-ALLOWED_HOSTS = ['146.185.181.185']
-
-# Static and media
-STATIC_ROOT = '/home/django/scipost_v1/static/'
-MEDIA_ROOT = '/home/django/scipost_v1/media/'
-WEBPACK_LOADER['DEFAULT']['BUNDLE_DIR_NAME'] = '/home/django/scipost_v1/static/bundles/'
-
-JOURNALS_DIR = 'journals_dir'
diff --git a/SciPost_v1/signalprocessors.py b/SciPost_v1/signalprocessors.py
index 585051caeda166da1e513d4562d1db929bd2b0ba..b5f522655a1e49149b21d4cf1026977c224ed6b5 100644
--- a/SciPost_v1/signalprocessors.py
+++ b/SciPost_v1/signalprocessors.py
@@ -5,18 +5,18 @@ from submissions.models import Submission
 
 
 class AutoSearchIndexingProcessor(signals.RealtimeSignalProcessor):
-    def prepare_submission_indexing(self, sender, submissions):
+    def remove_objects_indexes(self, sender, objects):
         """
-        Given an individual model instance, determine which backends the
-        update should be sent to & update the object on those backends.
+        Given a set of `objects` model instances, remove them from the index as preparation
+        for the new index.
         """
         try:
-            using_backends = self.connection_router.for_write(instance=submissions[0])
+            using_backends = self.connection_router.for_write(instance=objects[0])
         except IndexError:
             # No submissions given, stop processing here
             return None
 
-        for instance in submissions:
+        for instance in objects:
             for using in using_backends:
                 try:
                     index = self.connections[using].get_unified_index().get_index(sender)
@@ -32,7 +32,7 @@ class AutoSearchIndexingProcessor(signals.RealtimeSignalProcessor):
         try:
             using_backends = self.connection_router.for_write(instance=instance)
         except IndexError:
-            # No submissions given, stop processing here
+            # No valid instance given, stop processing here
             return None
 
         for using in using_backends:
@@ -47,8 +47,11 @@ class AutoSearchIndexingProcessor(signals.RealtimeSignalProcessor):
         if isinstance(instance, Submission):
             # Submission have complex status handling, so a status change should lead to
             # more drastic reindexing.
-            self.prepare_submission_indexing(sender, [instance])
-            self.prepare_submission_indexing(sender, instance.other_versions)
+            self.remove_objects_indexes(sender, instance.thread)
             self.update_instance_indexes(sender, instance)
         else:
-            super().handle_save(sender, instance, **kwargs)
+            # Objects such as Reports, Comments, Commentaries, etc. may get rejected. This
+            # does not remove them from the index. Therefore, do a complete rebuild_index
+            # action on that specific instance every time the index signal is triggered.
+            self.remove_objects_indexes(sender, [instance])
+            self.update_instance_indexes(sender, instance)
diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index 84048ed0b4a7294dd8c3ec44c53c25462fc06949..5e6a5528d37dce401df6897e0817f4347d731bba 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -36,6 +36,7 @@ urlpatterns = [
     url(r'^comments/', include('comments.urls', namespace="comments")),
     url(r'^funders/', include('funders.urls', namespace="funders")),
     url(r'^finances/', include('finances.urls', namespace="finances")),
+    url(r'^invitations/', include('invitations.urls', namespace="invitations")),
     url(r'^journals/', include('journals.urls.general', namespace="journals")),
     url(r'^mailing_list/', include('mailing_lists.urls', namespace="mailing_lists")),
     url(r'^metacore/', include('metacore.urls', namespace="metacore")),
diff --git a/SciPost_v1/wsgi_staging.py b/SciPost_v1/wsgi_staging.py
index a78b524fd804bea5c24ce5b0a2615d48b206a71a..02e689c1c438d4728d1f720f49f8ca99eeb1b298 100644
--- a/SciPost_v1/wsgi_staging.py
+++ b/SciPost_v1/wsgi_staging.py
@@ -6,6 +6,6 @@ import os
 
 from django.core.wsgi import get_wsgi_application
 
-os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings.staging_release")
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings.staging")
 
 application = get_wsgi_application()
diff --git a/affiliations/__init__.py b/affiliations/__init__.py
index 82323b3dfc6109a67eb86b3f5207b5736e368fa2..010e7870a94436d970afeb25f813b633faeaf4c4 100644
--- a/affiliations/__init__.py
+++ b/affiliations/__init__.py
@@ -1 +1,5 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 default_app_config = 'affiliations.apps.AffiliationsConfig'
diff --git a/affiliations/admin.py b/affiliations/admin.py
index ea51f0ed9181b2ba50fdc92b4fcdb010ee4b556d..2187f27ad02dc12a9ab40510f020c1bf807df4bc 100644
--- a/affiliations/admin.py
+++ b/affiliations/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Affiliation, Institution
diff --git a/affiliations/apps.py b/affiliations/apps.py
index d7b32efc830089fa50650a30bfbd7cf14964f7c2..d3eb63f813fa1d58c9ef006bea0f60da5f8fbfe4 100644
--- a/affiliations/apps.py
+++ b/affiliations/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 from django.db.models.signals import post_save
 
diff --git a/affiliations/constants.py b/affiliations/constants.py
index 579a66e75cab194173b692c37dad3f3940edd85f..c14aaca021df81dd1b3e957949e5f9dc916f471e 100644
--- a/affiliations/constants.py
+++ b/affiliations/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 TYPE_UNIVERSITY = 'university'
 INSTITUTION_TYPES = (
     (TYPE_UNIVERSITY, 'University'),
diff --git a/affiliations/factories.py b/affiliations/factories.py
new file mode 100644
index 0000000000000000000000000000000000000000..8bd88bbbc4e545cf9ce74f49fc06b2268c13e003
--- /dev/null
+++ b/affiliations/factories.py
@@ -0,0 +1,30 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import factory
+
+from .constants import INSTITUTION_TYPES
+from .models import Institution, Affiliation
+
+
+class InstitutionFactory(factory.django.DjangoModelFactory):
+    name = factory.Faker('company')
+    acronym = factory.lazy_attribute(lambda o: o.name[:16])
+    country = factory.Faker('country_code')
+    type = factory.Iterator(INSTITUTION_TYPES, getter=lambda c: c[0])
+
+    class Meta:
+        model = Institution
+        django_get_or_create = ('name',)
+
+
+class AffiliationFactory(factory.django.DjangoModelFactory):
+    institution = factory.SubFactory('affiliations.factories.InstitutionFactory')
+    contributor = factory.SubFactory('scipost.factories.ContributorFactory')
+    begin_date = factory.Faker('date_this_decade')
+    end_date = factory.Faker('future_date', end_date="+2y")
+
+    class Meta:
+        model = Affiliation
+        django_get_or_create = ('institution', 'contributor')
diff --git a/affiliations/forms.py b/affiliations/forms.py
index 774a2e6a7895455701b1fbc7652c79cc6c4aa205..b601ab5e907d306d551ff99e3c0f46baaaaae959 100644
--- a/affiliations/forms.py
+++ b/affiliations/forms.py
@@ -1,6 +1,9 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.forms import BaseModelFormSet, modelformset_factory
-# from django.db.models import F
 
 from django_countries import countries
 from django_countries.fields import LazyTypedChoiceField
@@ -66,7 +69,7 @@ class AffiliationForm(forms.ModelForm):
         return affiliation
 
 
-class AffiliationsFormSet(BaseModelFormSet):
+class BaseAffiliationsFormSet(BaseModelFormSet):
     """
     This formset helps update the Institutions for the Contributor at specific time periods.
     """
@@ -93,7 +96,7 @@ class AffiliationsFormSet(BaseModelFormSet):
 
 
 AffiliationsFormset = modelformset_factory(Affiliation, form=AffiliationForm, can_delete=True,
-                                           formset=AffiliationsFormSet, extra=0)
+                                           formset=BaseAffiliationsFormSet, extra=0)
 
 
 class InstitutionMergeForm(forms.ModelForm):
diff --git a/affiliations/managers.py b/affiliations/managers.py
index 13b4fc254527fcae904f5b993447a00b1d7d6670..e6a0872050e865cd4a2e7fdf3efcab9fae156f2e 100644
--- a/affiliations/managers.py
+++ b/affiliations/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.db.models import Q
 from django.utils import timezone
diff --git a/affiliations/models.py b/affiliations/models.py
index 33b31f455404ed1c67aa03743236234de981bcb9..40f41195d423482d132f86ceb33536c7fb26e7ea 100644
--- a/affiliations/models.py
+++ b/affiliations/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.urls import reverse
 
diff --git a/affiliations/signals.py b/affiliations/signals.py
index 8a75e16f0704061f62fe811708c8cdf997a5197f..ba0ce268c4f12e8210d5434cd85d0a9a565b9a40 100644
--- a/affiliations/signals.py
+++ b/affiliations/signals.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.models import User
 
 from notifications.models import FakeActors
diff --git a/affiliations/tests.py b/affiliations/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/affiliations/tests.py
+++ b/affiliations/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/affiliations/urls.py b/affiliations/urls.py
index ab379c2c136c6626cbc06edc2785f7bb14412555..0b839a4656c5434cacde2f183db38203ed1182fc 100644
--- a/affiliations/urls.py
+++ b/affiliations/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/affiliations/views.py b/affiliations/views.py
index 3acbc40fa67dc18c1e9497da52ec5657cd0963de..83e94a2c94c16ab8d865b246803bdc04c6d9ab47 100644
--- a/affiliations/views.py
+++ b/affiliations/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.shortcuts import redirect
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
diff --git a/colleges/admin.py b/colleges/admin.py
index d81df17fd46f1abefbc1a7fc464a409d6550f6c2..0f182f45acab68882237d3e132fca8bdf74b29dd 100644
--- a/colleges/admin.py
+++ b/colleges/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Fellowship
diff --git a/colleges/apps.py b/colleges/apps.py
index e1d74cff7d6248bb7702cad64f2ba1c406061042..ed191537c9dc040b91a1bf12515435e5fb2a810a 100644
--- a/colleges/apps.py
+++ b/colleges/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/colleges/factories.py b/colleges/factories.py
new file mode 100644
index 0000000000000000000000000000000000000000..1f7a3648dd24853e0ea5590eceb5e6c000807915
--- /dev/null
+++ b/colleges/factories.py
@@ -0,0 +1,26 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import factory
+
+from scipost.models import Contributor
+
+from .models import Fellowship
+
+
+class BaseFellowshipFactory(factory.django.DjangoModelFactory):
+    contributor = factory.Iterator(Contributor.objects.all())
+    start_date = factory.Faker('date_this_year')
+    until_date = factory.Faker('date_between', start_date="now", end_date="+2y")
+
+    guest = factory.Faker('boolean', chance_of_getting_true=10)
+
+    class Meta:
+        model = Fellowship
+        django_get_or_create = ('contributor', 'start_date')
+        abstract = True
+
+
+class FellowshipFactory(BaseFellowshipFactory):
+    pass
diff --git a/colleges/forms.py b/colleges/forms.py
index 4968ae748ce693b1b9be65a9508c49474cac2b15..abeef20baa7e6810e26b4ae428757a7d20bf385e 100644
--- a/colleges/forms.py
+++ b/colleges/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django import forms
diff --git a/scipost/templates/scipost/_assignments_summary_as_td.html b/colleges/management/__init__.py
similarity index 100%
rename from scipost/templates/scipost/_assignments_summary_as_td.html
rename to colleges/management/__init__.py
diff --git a/colleges/management/commands/__init__.py b/colleges/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/colleges/management/commands/create_fellowships.py b/colleges/management/commands/create_fellowships.py
new file mode 100644
index 0000000000000000000000000000000000000000..f2e929247513f23db5f2d61a8ee8185626f6a3f9
--- /dev/null
+++ b/colleges/management/commands/create_fellowships.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from colleges import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Fellowships objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Fellowships to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_fellowships(kwargs['number'])
+
+    def create_fellowships(self, n):
+        factories.FellowshipFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Fellowships.'.format(n=n)))
diff --git a/colleges/managers.py b/colleges/managers.py
index 428eb4761e5faffc0e10d0c7e13516ac194d90b7..c6eeacb9366dcaad57a4e27dafcd3b711a14c7e4 100644
--- a/colleges/managers.py
+++ b/colleges/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.db.models import Q
 from django.utils import timezone
diff --git a/colleges/models.py b/colleges/models.py
index 8455d618ae862896b6646658d2bf3817cd6df31e..8f4f8ac110f51050320e5a738ea5d8c652f4f3bd 100644
--- a/colleges/models.py
+++ b/colleges/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.db import models
diff --git a/colleges/permissions.py b/colleges/permissions.py
index 042e4bac9400fefb26e5a2487945b74d90525566..edfd198daba4bae9d7879cd27f371cb384fb8ee6 100644
--- a/colleges/permissions.py
+++ b/colleges/permissions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.decorators import user_passes_test
 from django.core.exceptions import PermissionDenied
 
diff --git a/colleges/templates/colleges/fellowship_submission_remove.html b/colleges/templates/colleges/fellowship_submission_remove.html
index c5defe25aec8a8c6f7f2828fc603dbcecfedfa9b..4089e3b5eb455377d7fc08bee7ffb47da473f20d 100644
--- a/colleges/templates/colleges/fellowship_submission_remove.html
+++ b/colleges/templates/colleges/fellowship_submission_remove.html
@@ -16,7 +16,7 @@
     <h2 class="text-primary">Fellowship {{ fellowship }}</h2>
 
     <h3>Submission details</h3>
-    {% include 'submissions/_submission_summary_short.html' with submission=submission %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission %}
     <br>
 
     <form method="post">
diff --git a/colleges/templates/colleges/fellowship_submission_remove_voting.html b/colleges/templates/colleges/fellowship_submission_remove_voting.html
index 837f1955a07c873134d63a767a177a1db28dea08..ea3d87fb3c0e4cf2005c925da85e353109d146d0 100644
--- a/colleges/templates/colleges/fellowship_submission_remove_voting.html
+++ b/colleges/templates/colleges/fellowship_submission_remove_voting.html
@@ -15,7 +15,7 @@
     <h2 class="text-primary">Fellowship {{ fellowship }}</h2>
 
     <h3>Submission details</h3>
-    {% include 'submissions/_submission_summary_short.html' with submission=submission %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission %}
     <br>
 
     <form method="post">
diff --git a/colleges/templates/colleges/submission_add.html b/colleges/templates/colleges/submission_add.html
index e071c00b49bf87ae604544bc030a88a39680d426..3766e1133d5ab38542127461347cd2fe129c031e 100644
--- a/colleges/templates/colleges/submission_add.html
+++ b/colleges/templates/colleges/submission_add.html
@@ -14,7 +14,7 @@
     <h1>Add Fellowship to Submission's Pool</h1>
     <h2 class="text-primary">{{submission.title}}</h2>
     <h3 class="mb-3">by {{submission.author_list}}</h3>
-    {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
     <br>
 
     <h3>Choose one of the following (active) Fellowships to add to the Pool:</h3>
diff --git a/colleges/templates/colleges/submission_add_for_voting.html b/colleges/templates/colleges/submission_add_for_voting.html
index 35338669f512ce63787f41bef781d4a37b929e2e..3ff38218314088b68dd08f4366c7891d9d0b2dee 100644
--- a/colleges/templates/colleges/submission_add_for_voting.html
+++ b/colleges/templates/colleges/submission_add_for_voting.html
@@ -14,7 +14,7 @@
     <h1>Add Fellowship to Submission's Voting Fellows</h1>
     <h2 class="text-primary">{{submission.title}}</h2>
     <h3 class="mb-3">by {{submission.author_list}}</h3>
-    {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
     <br>
 
     <h3>Choose one of the following (active) Fellowships to add to the Submission's Voting Fellows:</h3>
diff --git a/colleges/templates/colleges/submission_pool.html b/colleges/templates/colleges/submission_pool.html
index 1b487dc58ba434d0d1b45f38888154d73703447d..3b81638e50b06d612e010fb35d0508fea721075e 100644
--- a/colleges/templates/colleges/submission_pool.html
+++ b/colleges/templates/colleges/submission_pool.html
@@ -13,7 +13,7 @@
     <h1>Submission Pool Composition</h1>
     <h2 class="text-primary">{{submission.title}}</h2>
     <h3 class="mb-3">by {{submission.author_list}}</h3>
-    {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
     <br>
 
     <h3>Pool Composition</h3>
diff --git a/colleges/templates/colleges/submission_voting_fellows.html b/colleges/templates/colleges/submission_voting_fellows.html
index bfd44e8702f682ec40da09c67c6048cbe8d8dc85..619bdde69a44ce62940bcd7a1d1713ac940c3beb 100644
--- a/colleges/templates/colleges/submission_voting_fellows.html
+++ b/colleges/templates/colleges/submission_voting_fellows.html
@@ -13,7 +13,7 @@
     <h1>Submission's Voting Fellows</h1>
     <h2 class="text-primary">{{submission.title}}</h2>
     <h3 class="mb-3">by {{submission.author_list}}</h3>
-    {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 %}
+    {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
     <br>
 
     <h3>Voting Fellows</h3>
diff --git a/colleges/tests.py b/colleges/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/colleges/tests.py
+++ b/colleges/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/colleges/urls.py b/colleges/urls.py
index 5b9f0faaa9c5b31cf18a60b7475402ba7eb1947e..fa557c7f82cb8ace50133a54aef45565e2cbdb0b 100644
--- a/colleges/urls.py
+++ b/colleges/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from submissions.constants import SUBMISSIONS_COMPLETE_REGEX
diff --git a/colleges/views.py b/colleges/views.py
index 65d9da6187b4b15ceaa218e82a4e47b6d834589c..14e4765853905caf5136d68b349e40d26eaf769b 100644
--- a/colleges/views.py
+++ b/colleges/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required, permission_required
 from django.shortcuts import get_object_or_404, render, redirect
diff --git a/commentaries/admin.py b/commentaries/admin.py
index 93aee6375bdb1b36584042765d5e5220d7d1ca0e..5529e562936a4a58479d2b6b6d6370eee1e047bc 100644
--- a/commentaries/admin.py
+++ b/commentaries/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from django import forms
@@ -29,4 +33,5 @@ class CommentaryAdmin(admin.ModelAdmin):
     date_hierarchy = 'latest_activity'
     form = CommentaryAdminForm
 
+
 admin.site.register(Commentary, CommentaryAdmin)
diff --git a/commentaries/constants.py b/commentaries/constants.py
index 5fe492bf1f29a6f2d63f6d10742f5ee9c8ba05e2..cdcef185b0b8244db3827a6cf9f183f9b1320830 100644
--- a/commentaries/constants.py
+++ b/commentaries/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 COMMENTARY_PUBLISHED = 'published'
 COMMENTARY_PREPRINT = 'preprint'
 COMMENTARY_TYPES = (
diff --git a/commentaries/factories.py b/commentaries/factories.py
index c908621441bff8715a7bbaf5cce7cd3833994445..91a7e692e75bc1f3de2785b1704c10d142543ab3 100644
--- a/commentaries/factories.py
+++ b/commentaries/factories.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 
 from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS
@@ -8,31 +12,31 @@ from common.helpers import random_arxiv_identifier_with_version_number, random_e
 from .constants import COMMENTARY_TYPES
 from .models import Commentary
 
-from faker import Faker
-
 
-class CommentaryFactory(factory.django.DjangoModelFactory):
+class BaseCommentaryFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = Commentary
+        django_get_or_create = ('pub_DOI', 'arxiv_identifier')
+        abstract = True
 
     requested_by = factory.Iterator(Contributor.objects.all())
+    vetted = True
+    vetted_by = factory.Iterator(Contributor.objects.all())
     type = factory.Iterator(COMMENTARY_TYPES, getter=lambda c: c[0])
     discipline = factory.Iterator(SCIPOST_DISCIPLINES, getter=lambda c: c[0])
     domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0])
     subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0])
-    title = factory.Faker('text')
+    title = factory.Faker('sentence')
     pub_DOI = factory.Sequence(lambda n: random_external_doi())
-    arxiv_identifier = factory.Sequence(lambda n: random_arxiv_identifier_with_version_number())
+    arxiv_identifier = factory.Sequence(lambda n: random_arxiv_identifier_with_version_number('1'))
     author_list = factory.Faker('name')
     pub_abstract = factory.Faker('text')
-    pub_date = factory.Faker('date')
-    arxiv_link = factory.Faker('uri')
-    pub_abstract = factory.lazy_attribute(lambda x: Faker().paragraph())
+    pub_date = factory.Faker('date_this_decade')
+    pub_abstract = factory.Faker('paragraph')
 
-    @factory.post_generation
-    def arxiv_link(self, create, extracted, **kwargs):
-        self.arxiv_link = 'https://arxiv.org/abs/%s' % self.arxiv_identifier
-        self.arxiv_or_DOI_string = self.arxiv_identifier
+    arxiv_link = factory.lazy_attribute(lambda o: 'https://arxiv.org/abs/%s' % o.arxiv_identifier)
+    arxiv_or_DOI_string = factory.lazy_attribute(lambda o: (
+        o.arxiv_identifier if o.arxiv_identifier else o.pub_DOI))
 
     @factory.post_generation
     def create_urls(self, create, extracted, **kwargs):
@@ -40,27 +44,45 @@ class CommentaryFactory(factory.django.DjangoModelFactory):
 
     @factory.post_generation
     def add_authors(self, create, extracted, **kwargs):
-        contributors = list(Contributor.objects.order_by('?')
-                            .exclude(pk=self.requested_by.pk).all()[:4])
+        contributors = Contributor.objects.order_by('?').exclude(pk=self.requested_by.pk)[:4]
         self.author_list = ', '.join(
-            ['%s %s' % (contrib.user.first_name,
-                        contrib.user.last_name) for contrib in contributors])
-        self.authors.add(*contributors)
+            ['%s %s' % (contrib.user.first_name, contrib.user.last_name)
+                for contrib in contributors])
 
+        if create:
+            self.authors.add(*contributors)
 
-class VettedCommentaryFactory(CommentaryFactory):
-    vetted = True
-    vetted_by = factory.Iterator(Contributor.objects.all())
+    @factory.post_generation
+    def set_journal_data(self, create, extracted, **kwargs):
+        if not self.pub_DOI:
+            return
 
+        data = self.pub_DOI.split('/')[1].split('.')
+        self.journal = data[0]
+        self.volume = data[1]
+        self.pages = data[2]
 
-class UnpublishedVettedCommentaryFactory(VettedCommentaryFactory):
-    pub_DOI = ''
+
+class CommentaryFactory(BaseCommentaryFactory):
+    pass
 
 
-class UnvettedCommentaryFactory(CommentaryFactory):
+class UnvettedCommentaryFactory(BaseCommentaryFactory):
     vetted = False
+    vetted_by = None
 
 
-class UnvettedArxivPreprintCommentaryFactory(CommentaryFactory):
-    vetted = False
+class UnpublishedCommentaryFactory(BaseCommentaryFactory):
     pub_DOI = ''
+    pub_date = None
+
+
+class UnvettedUnpublishedCommentaryFactory(UnpublishedCommentaryFactory):
+    vetted = False
+    vetted_by = None
+
+
+class PublishedCommentaryFactory(BaseCommentaryFactory):
+    arxiv_identifier = ''
+    arxiv_link = ''
+    arxiv_or_DOI_string = factory.lazy_attribute(lambda o: o.pub_DOI)
diff --git a/commentaries/forms.py b/commentaries/forms.py
index d92ccae78b24e3b2f62bda14953464a1f3f26514..6c2ada72427548fca3744eb1cbcad69edcf3dcbd 100644
--- a/commentaries/forms.py
+++ b/commentaries/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from django import forms
diff --git a/commentaries/management/__init__.py b/commentaries/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/commentaries/management/commands/__init__.py b/commentaries/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/commentaries/management/commands/create_commentaries.py b/commentaries/management/commands/create_commentaries.py
new file mode 100644
index 0000000000000000000000000000000000000000..f6df54fb280d2a29f8aba80e097bfe0748e592f9
--- /dev/null
+++ b/commentaries/management/commands/create_commentaries.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from commentaries import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Commentaries objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Commentaries to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_commentaries(kwargs['number'])
+
+    def create_commentaries(self, n):
+        factories.CommentaryFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Commentaries.'.format(n=n)))
diff --git a/commentaries/managers.py b/commentaries/managers.py
index 9a83ae43472c96d61ff16a29b1f459c3e81218fa..4c5b30b077eafc9e735f0338668d3aa6f7f2a2fb 100644
--- a/commentaries/managers.py
+++ b/commentaries/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 
diff --git a/commentaries/models.py b/commentaries/models.py
index 56e5f467efe795e6082410663202f94c427465d4..d568e1214ae191ad3d2f988eb42abceb2820074b 100644
--- a/commentaries/models.py
+++ b/commentaries/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.contrib.contenttypes.fields import GenericRelation
 from django.contrib.postgres.fields import JSONField
diff --git a/commentaries/search_indexes.py b/commentaries/search_indexes.py
index e68fc14a8d0060ba1f2d3c622a58453e8b8de6b1..e96d288c5a55e43d1369f087671a43a8c4b9b3f5 100644
--- a/commentaries/search_indexes.py
+++ b/commentaries/search_indexes.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # import datetime
 
 from haystack import indexes
diff --git a/commentaries/templates/commentaries/_commentary_card_content.html b/commentaries/templates/commentaries/_commentary_card_content.html
index 7c5954005dbba4b8a85a7312f0684392da50c232..8bb9d61f56cffda63f510a8a9f07dadb53027349 100644
--- a/commentaries/templates/commentaries/_commentary_card_content.html
+++ b/commentaries/templates/commentaries/_commentary_card_content.html
@@ -1,11 +1,11 @@
-<div class="card-body">
-    <h3 class="card-title">
-        <a href="{% url 'commentaries:commentary' commentary.arxiv_or_DOI_string %}">{{ commentary.title }}</a>
-    </h3>
-    <p class="mt-0 mb-3">
-        by {{ commentary.author_list }}{% if commentary.type == 'published' %}, {{ commentary.journal }} {{ commentary.volume }}, {{ commentary.pages }}{% elif commentary.type == 'preprint' %} &middot; <a href="{{ commentary.arxiv_link }}">{{ commentary.arxiv_link }}</a>{% endif %}
-    </p>
-    <p class="card-text text-muted">
-        {% if commentary.pub_date %}(published {{ commentary.pub_date }}) &middot; {% endif %}latest activity: {{ commentary.latest_activity }}
-    </p>
+<div class="card-body px-0">
+    <div class="li commentary">
+        <h3 class="title"><a href="{{ commentary.get_absolute_url }}">{{ commentary.title }}</a></h3>
+        <p class="authors">
+            by {{ commentary.author_list }}{% if commentary.type == 'published' %}, {{ commentary.journal }} {{ commentary.volume }}, {{ commentary.pages }}{% elif commentary.type == 'preprint' %} &middot; <a href="{{ commentary.arxiv_link }}">{{ commentary.arxiv_link }}</a>{% endif %}
+        </p>
+        <p class="meta">
+            {% if commentary.pub_date %}(published {{ commentary.pub_date }}) &middot; {% endif %}latest activity: {{ commentary.latest_activity }}
+        </p>
+    </div>
 </div>
diff --git a/commentaries/templates/commentaries/_commentary_summary.html b/commentaries/templates/commentaries/_commentary_summary.html
index 7567fea0d99cbf2d19e9d17abae4c852be517e06..8c817cca6a218f64e0473e78980e909e5a220ff0 100644
--- a/commentaries/templates/commentaries/_commentary_summary.html
+++ b/commentaries/templates/commentaries/_commentary_summary.html
@@ -46,5 +46,5 @@
 
 {% if commentary.scipost_publication %}
     <br>
-    <p class="my-0">Published in {{commentary.scipost_publication.in_issue.in_volume.in_journal.get_name_display}}: <a href="{{commentary.scipost_publication.get_absolute_url}}">{{commentary.scipost_publication.in_issue.in_volume.in_journal.get_abbreviation_citation}} <strong>{{commentary.scipost_publication.in_issue.in_volume.number}}</strong>, {{commentary.scipost_publication.get_paper_nr}} ({{commentary.scipost_publication.publication_date|date:'Y'}})</a></p>
+    <p class="my-0">Published in {{commentary.scipost_publication.in_issue.in_volume.in_journal.get_name_display}}: <a href="{{commentary.scipost_publication.get_absolute_url}}">{{commentary.scipost_publication.in_issue.in_volume.in_journal.abbreviation_citation}} <strong>{{commentary.scipost_publication.in_issue.in_volume.number}}</strong>, {{commentary.scipost_publication.get_paper_nr}} ({{commentary.scipost_publication.publication_date|date:'Y'}})</a></p>
 {% endif %}
diff --git a/commentaries/templates/commentaries/commentary_list.html b/commentaries/templates/commentaries/commentary_list.html
index 37a6123d03b8432b7871102fcc4f4ba4f70eaa91..c5fb016a6fe1fba8005fddeedf2935978c935e7e 100644
--- a/commentaries/templates/commentaries/commentary_list.html
+++ b/commentaries/templates/commentaries/commentary_list.html
@@ -26,7 +26,7 @@
                 <h2 class="card-title">Search SciPost Commentaries:</h2>
                 <form action="{% url 'commentaries:commentaries' %}" class="small" method="get">
                     {{ form|bootstrap:'4,8,sm' }}
-                <input class="btn btn-sm btn-secondary" type="submit"  value="Search"/>
+                <input class="btn btn-outline-secondary" type="submit"  value="Search"/>
                 </form>
             </div>
         </div>
diff --git a/commentaries/templates/commentaries/modify_commentary_request.html b/commentaries/templates/commentaries/modify_commentary_request.html
index c443012174802059f7e2b35f492ad33aa93dc22c..e364d6e617aa7fdc03b32fb7c84e67db395cdeb1 100644
--- a/commentaries/templates/commentaries/modify_commentary_request.html
+++ b/commentaries/templates/commentaries/modify_commentary_request.html
@@ -36,7 +36,7 @@
         <form action="{% url 'commentaries:modify_commentary_request' commentary_id=commentary.id %}" method="post">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input type="submit" class="btn btn-secondary" value="Submit and accept" />
+            <input type="submit" class="btn btn-outline-secondary" value="Submit and accept" />
         </form>
     </div>
 </div>
diff --git a/commentaries/templates/commentaries/request_arxiv_preprint.html b/commentaries/templates/commentaries/request_arxiv_preprint.html
index 5039bdb9845a13d07aca5503dba6f7a5708a7e19..2aef0a6af7905c21f74f206cedb3c5fade9a2737 100644
--- a/commentaries/templates/commentaries/request_arxiv_preprint.html
+++ b/commentaries/templates/commentaries/request_arxiv_preprint.html
@@ -22,7 +22,7 @@
         <form action="{% url 'commentaries:prefill_using_arxiv_identifier' %}" method="post">
           {% csrf_token %}
           {{ query_form|bootstrap }}
-          <input class="btn btn-secondary" type="submit" value="Query arXiv"/>
+          <input class="btn btn-outline-secondary" type="submit" value="Query arXiv"/>
         </form>
     </div>
 </div>
diff --git a/commentaries/templates/commentaries/request_published_article.html b/commentaries/templates/commentaries/request_published_article.html
index 5ae3be2a1aac95aa3b3e30d59be8f242784b348b..d630c9662faf7491da22ad36062f670482f15953 100644
--- a/commentaries/templates/commentaries/request_published_article.html
+++ b/commentaries/templates/commentaries/request_published_article.html
@@ -23,7 +23,7 @@
         <form action="{% url 'commentaries:prefill_using_DOI' %}" method="post">
           {% csrf_token %}
           {{ query_form|bootstrap }}
-          <input class="btn btn-secondary" type="submit" value="Query DOI"/>
+          <input class="btn btn-outline-secondary" type="submit" value="Query DOI"/>
         </form>
     </div>
 </div>
diff --git a/commentaries/test_forms.py b/commentaries/test_forms.py
index 35e65abb64b3b50ed5f3aca96a9a65dbefce65a5..eea11f8e0a1f149a05ee997c0f03b169603232e9 100644
--- a/commentaries/test_forms.py
+++ b/commentaries/test_forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from django.test import TestCase
@@ -5,8 +9,8 @@ from django.test import TestCase
 from common.helpers import model_form_data
 from scipost.factories import UserFactory, ContributorFactory
 
-from .factories import VettedCommentaryFactory, UnvettedCommentaryFactory,\
-                       UnvettedArxivPreprintCommentaryFactory
+from .factories import CommentaryFactory, UnvettedCommentaryFactory,\
+                       UnvettedUnpublishedCommentaryFactory
 from .forms import RequestPublishedArticleForm, VetCommentaryForm, DOIToQueryForm,\
                    ArxivQueryForm, RequestArxivPreprintForm
 from .models import Commentary
@@ -189,7 +193,7 @@ class TestRequestArxivPreprintForm(TestCase):
     def setUp(self):
         add_groups_and_permissions()
         ContributorFactory.create_batch(5)
-        factory_instance = UnvettedArxivPreprintCommentaryFactory.build()
+        factory_instance = UnvettedUnpublishedCommentaryFactory.build()
         self.user = UserFactory()
         self.valid_form_data = model_form_data(factory_instance, RequestPublishedArticleForm)
         self.valid_form_data['arxiv_identifier'] = factory_instance.arxiv_identifier
@@ -199,7 +203,7 @@ class TestRequestArxivPreprintForm(TestCase):
         self.assertTrue(form.is_valid())
 
     def test_identifier_that_already_has_commentary_page_is_invalid(self):
-        commentary = UnvettedArxivPreprintCommentaryFactory()
+        commentary = UnvettedUnpublishedCommentaryFactory()
         invalid_data = {**self.valid_form_data, **{'arxiv_identifier': commentary.arxiv_identifier}}
         form = RequestArxivPreprintForm(invalid_data)
         self.assertEqual(form.is_valid(), False)
diff --git a/commentaries/test_models.py b/commentaries/test_models.py
index 5fb96f3ef5ac04ae31bf79dd6b63da465137836e..658abf6521080efde97ff0f2746bad7028eed860 100644
--- a/commentaries/test_models.py
+++ b/commentaries/test_models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 from common.helpers.test import add_groups_and_permissions
diff --git a/commentaries/test_views.py b/commentaries/test_views.py
index 24f46518623509e53016c7939f564ceee26d53cd..33804a96808b8a1af81d11d4c11836cfc56f0d3e 100644
--- a/commentaries/test_views.py
+++ b/commentaries/test_views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.contrib.auth.models import Group
 from django.test import TestCase, Client, RequestFactory
@@ -5,8 +9,8 @@ from django.test import TestCase, Client, RequestFactory
 from scipost.models import Contributor
 from scipost.factories import ContributorFactory, UserFactory
 
-from .factories import UnvettedCommentaryFactory, VettedCommentaryFactory, UnpublishedVettedCommentaryFactory, \
-    UnvettedArxivPreprintCommentaryFactory
+from .factories import UnvettedCommentaryFactory, CommentaryFactory, UnpublishedCommentaryFactory, \
+    UnvettedUnpublishedCommentaryFactory
 from .forms import CommentarySearchForm, RequestPublishedArticleForm
 from .models import Commentary
 from .views import RequestPublishedArticle, prefill_using_DOI, RequestArxivPreprint
@@ -57,7 +61,7 @@ class RequestArxivPreprintTest(TestCase):
         add_groups_and_permissions()
         self.target = reverse('commentaries:request_arxiv_preprint')
         self.contributor = ContributorFactory()
-        self.commentary_instance = UnvettedArxivPreprintCommentaryFactory.build(requested_by=self.contributor)
+        self.commentary_instance = UnvettedUnpublishedCommentaryFactory.build(requested_by=self.contributor)
         self.valid_form_data = model_form_data(self.commentary_instance, RequestPublishedArticleForm)
         # The form field is called 'identifier', while the model field is called 'arxiv_identifier',
         # so model_form_data doesn't include it.
@@ -76,6 +80,7 @@ class RequestArxivPreprintTest(TestCase):
         self.assertEqual(commentary.arxiv_or_DOI_string, "arXiv:" + self.commentary_instance.arxiv_identifier)
         self.assertEqual(commentary.requested_by, self.contributor)
 
+
 class VetCommentaryRequestsTest(TestCase):
     """Test cases for `vet_commentary_requests` view method"""
 
@@ -119,7 +124,7 @@ class VetCommentaryRequestsTest(TestCase):
 
         # Only vetted Commentaries exist!
         # ContributorFactory.create_batch(5)
-        VettedCommentaryFactory(requested_by=ContributorFactory(), vetted_by=ContributorFactory())
+        CommentaryFactory(requested_by=ContributorFactory(), vetted_by=ContributorFactory())
         response = self.client.get(self.view_url)
         self.assertEquals(response.context['commentary_to_vet'], None)
 
@@ -134,7 +139,7 @@ class BrowseCommentariesTest(TestCase):
 
     def setUp(self):
         add_groups_and_permissions()
-        VettedCommentaryFactory(discipline='physics', requested_by=ContributorFactory())
+        CommentaryFactory(discipline='physics', requested_by=ContributorFactory())
         self.view_url = reverse('commentaries:browse', kwargs={
             'discipline': 'physics',
             'nrweeksback': '1'
@@ -155,7 +160,7 @@ class CommentaryDetailTest(TestCase):
     def setUp(self):
         add_groups_and_permissions()
         self.client = Client()
-        self.commentary = UnpublishedVettedCommentaryFactory(
+        self.commentary = UnpublishedCommentaryFactory(
             requested_by=ContributorFactory(), vetted_by=ContributorFactory())
         self.target = reverse(
             'commentaries:commentary',
diff --git a/commentaries/urls.py b/commentaries/urls.py
index 0679f78bb7523a5e6f74f514d8c560ee6c526b63..62ac5fd92e351ab93c3ac6afaa05056198379f2c 100644
--- a/commentaries/urls.py
+++ b/commentaries/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 from django.views.generic import TemplateView
 
diff --git a/commentaries/views.py b/commentaries/views.py
index 015fb814d1a87c8739186b1c1001ecdad39df58c..bcb0b607dfc5c6d2b90fee65d878e94b653a8356 100644
--- a/commentaries/views.py
+++ b/commentaries/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.shortcuts import get_object_or_404, render
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required, permission_required
@@ -233,13 +237,7 @@ def commentary_detail(request, arxiv_or_DOI_string):
                                    arxiv_or_DOI_string=arxiv_or_DOI_string)
 
     form = CommentForm()
-    try:
-        author_replies = Comment.objects.filter(
-            commentary=commentary, is_author_reply=True, status__gte=1)
-    except Comment.DoesNotExist:
-        author_replies = ()
-    context = {'commentary': commentary,
-               'author_replies': author_replies, 'form': form}
+    context = {'commentary': commentary, 'form': form}
     return render(request, 'commentaries/commentary_detail.html', context)
 
 
diff --git a/comments/admin.py b/comments/admin.py
index 930ef7ae7001cb7b43746e01d81f77d67cf54f73..5732dd9bf2bf12b75f7fff32d86f629c5b7634ce 100644
--- a/comments/admin.py
+++ b/comments/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from guardian.admin import GuardedModelAdmin
diff --git a/comments/behaviors.py b/comments/behaviors.py
index c55258d7b702a481207959dba22765630385d0b1..64667ab99fa3dd4dcf650b2c99938fa2bd6ad656 100644
--- a/comments/behaviors.py
+++ b/comments/behaviors.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf import settings
 from django.core.exceptions import ValidationError
 from django.template.defaultfilters import filesizeformat
diff --git a/comments/constants.py b/comments/constants.py
index 3b3cdcc44efc65dbf0c861ce2fb40c067464def7..3a4a26e69e27ede64830339641278fffe229b446 100644
--- a/comments/constants.py
+++ b/comments/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 EXTENTIONS_IMAGES = ['.jpg', '.png']
 EXTENTIONS_PDF = ['.pdf']
 EXTENTIONS_FILES = EXTENTIONS_PDF + EXTENTIONS_IMAGES
diff --git a/comments/factories.py b/comments/factories.py
index 1f76cf6a460001cb60077d1d5e73bdf075dd2c6a..48583c0a725ca34011687598710f709b70a87cfd 100644
--- a/comments/factories.py
+++ b/comments/factories.py
@@ -1,29 +1,41 @@
-import factory
-import pytz
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
 
-from django.utils import timezone
+import random
+import factory
 
-from commentaries.factories import VettedCommentaryFactory
+from commentaries.models import Commentary
 from scipost.models import Contributor
-from submissions.factories import EICassignedSubmissionFactory
-from theses.factories import VettedThesisLinkFactory
+from submissions.models import Submission, Report
+from theses.models import ThesisLink
 
 from .constants import STATUS_VETTED
 from .models import Comment
 
 from faker import Faker
 
-timezone.now()
-
 
 class CommentFactory(factory.django.DjangoModelFactory):
+    status = STATUS_VETTED
+    vetted_by = factory.Iterator(Contributor.objects.all())
+
     author = factory.Iterator(Contributor.objects.all())
-    comment_text = factory.lazy_attribute(lambda x: Faker().paragraph())
-    remarks_for_editors = factory.lazy_attribute(lambda x: Faker().paragraph())
+    comment_text = factory.Faker('paragraph')
+    remarks_for_editors = factory.Faker('paragraph')
     file_attachment = Faker().file_name(extension='pdf')
-    status = STATUS_VETTED  # All comments will have status vetted!
-    vetted_by = factory.Iterator(Contributor.objects.all())
-    date_submitted = Faker().date_time_between(start_date="-3y", end_date="now", tzinfo=pytz.UTC)
+    date_submitted = factory.Faker('date_this_decade')
+
+    # Categories
+    is_cor = factory.Faker('boolean', chance_of_getting_true=20)
+    is_rem = factory.Faker('boolean', chance_of_getting_true=20)
+    is_que = factory.Faker('boolean', chance_of_getting_true=20)
+    is_ans = factory.Faker('boolean', chance_of_getting_true=20)
+    is_obj = factory.Faker('boolean', chance_of_getting_true=20)
+    is_rep = factory.Faker('boolean', chance_of_getting_true=20)
+    is_val = factory.Faker('boolean', chance_of_getting_true=20)
+    is_lit = factory.Faker('boolean', chance_of_getting_true=20)
+    is_sug = factory.Faker('boolean', chance_of_getting_true=20)
 
     class Meta:
         model = Comment
@@ -31,16 +43,27 @@ class CommentFactory(factory.django.DjangoModelFactory):
 
 
 class CommentaryCommentFactory(CommentFactory):
-    content_object = factory.SubFactory(VettedCommentaryFactory)
+    content_object = factory.Iterator(Commentary.objects.all())
 
 
 class SubmissionCommentFactory(CommentFactory):
-    content_object = factory.SubFactory(EICassignedSubmissionFactory)
+    content_object = factory.Iterator(Submission.objects.all())
+
+    @factory.post_generation
+    def replies(self, create, extracted, **kwargs):
+        if create:
+            for i in range(random.randint(0, 2)):
+                ReplyCommentFactory(content_object=self)
+
+
+class ReplyCommentFactory(CommentFactory):
+    content_object = factory.SubFactory(SubmissionCommentFactory, replies=False)
+    is_author_reply = factory.Faker('boolean')
 
 
 class ThesislinkCommentFactory(CommentFactory):
-    content_object = factory.SubFactory(VettedThesisLinkFactory)
+    content_object = factory.Iterator(ThesisLink.objects.all())
 
 
-class ReplyCommentFactory(CommentFactory):
-    content_object = factory.SubFactory(SubmissionCommentFactory)
+class ReportCommentFactory(CommentFactory):
+    content_object = factory.Iterator(Report.objects.all())
diff --git a/comments/forms.py b/comments/forms.py
index ac922bb92967199688a976cdcac70dae74b08689..d813f359407dd0e05238d9effc0169e195c1e1b4 100644
--- a/comments/forms.py
+++ b/comments/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 
 from .constants import COMMENT_ACTION_CHOICES, COMMENT_REFUSAL_CHOICES
diff --git a/comments/managers.py b/comments/managers.py
index 70e6f20693fb1986569befa36a54852d8e130d1f..dc094232df4abcdc60b907f36d6fc894af72cf17 100644
--- a/comments/managers.py
+++ b/comments/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 from .constants import STATUS_PENDING
@@ -15,3 +19,6 @@ class CommentQuerySet(models.QuerySet):
 
     def author_replies(self):
         return self.filter(is_author_reply=True)
+
+    def publicly_visible(self):
+        return self.filter(anonymous=False, status__gte=1)
diff --git a/comments/migrations/0003_auto_20180314_1502.py b/comments/migrations/0003_auto_20180314_1502.py
new file mode 100644
index 0000000000000000000000000000000000000000..585e4360923d274cd2c0204c18b1c5c9c4be9552
--- /dev/null
+++ b/comments/migrations/0003_auto_20180314_1502.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-14 14:02
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('comments', '0002_auto_20171229_1435'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='comment',
+            name='commentary',
+        ),
+        migrations.RemoveField(
+            model_name='comment',
+            name='in_reply_to_comment',
+        ),
+        migrations.RemoveField(
+            model_name='comment',
+            name='in_reply_to_report',
+        ),
+        migrations.RemoveField(
+            model_name='comment',
+            name='submission',
+        ),
+        migrations.RemoveField(
+            model_name='comment',
+            name='thesislink',
+        ),
+    ]
diff --git a/comments/models.py b/comments/models.py
index e138ca39ad2b9a7fefc8d3f7606207bdfc176df5..23ceb52188aef09e7d162499b8e09e2a88786b4f 100644
--- a/comments/models.py
+++ b/comments/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
 from django.contrib.contenttypes.models import ContentType
 from django.db import models
@@ -17,20 +21,23 @@ from .constants import COMMENT_STATUS, STATUS_PENDING
 from .managers import CommentQuerySet
 
 
-WARNING_TEXT = 'Warning: Rather use/edit `content_object` instead or be 100% sure you know what you are doing!'
+WARNING_TEXT = ('Warning: Rather use/edit `content_object` instead or be 100% sure you'
+                ' know what you are doing!')
 US_NOTICE = 'Warning: This field is out of service and will be removed in the future.'
 
 
 class Comment(TimeStampedModel):
-    """ A Comment is an unsollicited note, submitted by a Contributor,
-    on a particular publication or in reply to an earlier Comment. """
+    """ A Comment is an unsollicited note, submitted by a Contributor.
+
+    A Comment is pointed to a particular publication or in reply to an earlier Comment. It
+    may be l"""
 
     status = models.SmallIntegerField(default=STATUS_PENDING, choices=COMMENT_STATUS)
     vetted_by = models.ForeignKey('scipost.Contributor', blank=True, null=True,
                                   on_delete=models.CASCADE, related_name='comment_vetted_by')
-    file_attachment = models.FileField(upload_to='uploads/comments/%Y/%m/%d/', blank=True,
-                                       validators=[validate_file_extension, validate_max_file_size]
-                                       )
+    file_attachment = models.FileField(
+        upload_to='uploads/comments/%Y/%m/%d/', blank=True,
+        validators=[validate_file_extension, validate_max_file_size])
 
     # A Comment is always related to another model
     # This construction implicitly has property: `on_delete=models.CASCADE`
@@ -40,23 +47,6 @@ class Comment(TimeStampedModel):
 
     nested_comments = GenericRelation('comments.Comment', related_query_name='comments')
 
-    # -- U/S
-    # These fields will be removed in the future.
-    # They still exists only to prevent possible data loss.
-    commentary = models.ForeignKey('commentaries.Commentary', blank=True, null=True,
-                                   on_delete=models.CASCADE, help_text=US_NOTICE)
-    submission = models.ForeignKey('submissions.Submission', blank=True, null=True,
-                                   on_delete=models.CASCADE, related_name='comments_old',
-                                   help_text=US_NOTICE)
-    thesislink = models.ForeignKey('theses.ThesisLink', blank=True, null=True,
-                                   on_delete=models.CASCADE, help_text=US_NOTICE)
-    in_reply_to_comment = models.ForeignKey('self', blank=True, null=True,
-                                            related_name="nested_comments_old",
-                                            on_delete=models.CASCADE, help_text=US_NOTICE)
-    in_reply_to_report = models.ForeignKey('submissions.Report', blank=True, null=True,
-                                           on_delete=models.CASCADE, help_text=US_NOTICE)
-    # -- End U/S
-
     # Author info
     is_author_reply = models.BooleanField(default=False)
     author = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE,
@@ -77,6 +67,7 @@ class Comment(TimeStampedModel):
     remarks_for_editors = models.TextField(blank=True,
                                            verbose_name='optional remarks for the Editors only')
     date_submitted = models.DateTimeField('date submitted', default=timezone.now)
+
     # Opinions
     nr_A = models.PositiveIntegerField(default=0)
     in_agreement = models.ManyToManyField('scipost.Contributor', related_name='in_agreement',
@@ -162,16 +153,16 @@ class Comment(TimeStampedModel):
             assign_perm('comments.can_vet_comments', to_object.editor_in_charge.user, self)
 
     def get_author(self):
-        '''Get author, if and only if comment is not anonymous!!!'''
+        """Return Contributor instance of object if not anonymous."""
         if not self.anonymous:
             return self.author
         return None
 
     def get_author_str(self):
-        '''Get author string, if and only if comment is not anonymous!!!'''
+        """Return author string if not anonymous."""
         author = self.get_author()
         if author:
-            return author.user.first_name + ' ' + author.user.last_name
+            return '{} {}'.format(author.get_title_display(), author.user.last_name)
         return 'Anonymous'
 
     def update_opinions(self, contributor_id, opinion):
diff --git a/comments/search_indexes.py b/comments/search_indexes.py
index 23575385c3b38dd73218f0abdd2015508eb1b03c..3f0ed301bf9a6d50f7134ad601018f7a0d5b9b37 100644
--- a/comments/search_indexes.py
+++ b/comments/search_indexes.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # import datetime
 
 from haystack import indexes
diff --git a/comments/templates/comments/_add_comment_form.html b/comments/templates/comments/_add_comment_form.html
index 8225e51af3c7c597a496901cf3505b347e02678c..c420875cce1cc3553c0642e742af133fb320612d 100644
--- a/comments/templates/comments/_add_comment_form.html
+++ b/comments/templates/comments/_add_comment_form.html
@@ -21,11 +21,9 @@
               {{form.comment_text|bootstrap:'12,12'}}
 
               <p>
-                  In your comment, you can use LaTeX \$...\$ for in-text equations or \ [ ... \ ] for on-line equations.
+                  In your comment, you can use $\LaTeX$ \$...\$ for in-text equations or \ [ ... \ ] for on-line equations.
               </p>
-              <p id="goodCommenter"><em>
-                  Be professional. Only serious and meaningful comments will be vetted through.
-              </em></p>
+              <p class="good_commenter">Be professional. Only serious and meaningful comments will be vetted through.</p>
           </div>
           <div class="col-md-3 radio-list">
               <label>Specify categorization(s):</label>
diff --git a/comments/templates/comments/_comment_card_content.html b/comments/templates/comments/_comment_card_content.html
index fb7dff65a51631ad07bb1211b5751b85ffdb217a..6fa4f459bd55ef6e161accab805c8689b5e973b3 100644
--- a/comments/templates/comments/_comment_card_content.html
+++ b/comments/templates/comments/_comment_card_content.html
@@ -2,10 +2,11 @@
     {% block card_block_header %}{% endblock %}
     <p class="card-text">
       {% if comment.anonymous %}
-      Anonymous:
+          Anonymous:
       {% else %}
-      <a href="{{comment.author.get_absolute_url}}">{{comment.author.user.first_name}} {{comment.author.user.last_name}}</a>:
+          <a href="{{ comment.author.get_absolute_url }}">{{ comment.get_author_str }}</a>:
       {% endif %}
+
         <a href="{{comment.get_absolute_url}}">
             "{{comment.comment_text|slice:'30'}}{% if comment.comment_text|length > 30 %}...{% endif %}"
         </a>
diff --git a/comments/templates/comments/_comment_card_extended_for_author.html b/comments/templates/comments/_comment_card_extended_for_author.html
index 51c26e39304d86a3b916dce310b43132f9792d83..5fa9fa5f645c02426aa4aecdc37530cb93c9b441 100644
--- a/comments/templates/comments/_comment_card_extended_for_author.html
+++ b/comments/templates/comments/_comment_card_extended_for_author.html
@@ -5,7 +5,11 @@
     </div>
 
     <p>"{{comment.comment_text|linebreaksbr}}"</p>
-    <p class="card-text">by <a href="{{comment.author.get_absolute_url}}">{{comment.author.user.first_name}} {{comment.author.user.last_name}}</a> in {{comment.content_type|capfirst}} on <a href="{{comment.content_object.get_absolute_url}}" class="pubtitleli">{{comment.title}}</a> {% if comment.content_object.author_list %} <span class="text-muted">by {{comment.content_object.author_list}}</span>{% endif %}</p>
+    {% if comment.anonymous %}
+        <p class="card-text">by Anonymous in {{comment.content_type|capfirst}} on <a href="{{comment.content_object.get_absolute_url}}" class="pubtitleli">{{comment.title}}</a> {% if comment.content_object.author_list %} <span class="text-muted">by {{comment.content_object.author_list}}</span>{% endif %}</p>
+    {% else %}
+        <p class="card-text">by <a href="{{comment.author.get_absolute_url}}">{{comment.author.user.first_name}} {{comment.author.user.last_name}}</a> in {{comment.content_type|capfirst}} on <a href="{{comment.content_object.get_absolute_url}}" class="pubtitleli">{{comment.title}}</a> {% if comment.content_object.author_list %} <span class="text-muted">by {{comment.content_object.author_list}}</span>{% endif %}</p>
+    {% endif %}
 
     {% comment %}
         Using 'by xxx' on non-submission comments here would be ambigious. Does the `by xxx` apply to the
diff --git a/comments/templates/comments/_comment_identifier.html b/comments/templates/comments/_comment_identifier.html
index 5eb681610a2fd2e657a5d71fcea0a9d1656e16f3..9b7ac2da98169b92f313d3ddd9fa041ce0bc3d40 100644
--- a/comments/templates/comments/_comment_identifier.html
+++ b/comments/templates/comments/_comment_identifier.html
@@ -7,9 +7,8 @@
 <div class="commentid" id="comment_id{{ comment.id }}">
     <h3>
         {% if request.user.contributor and request.user.contributor == comment.core_content_object.editor_in_charge or is_edcol_admin and request.user|is_not_author_of_submission:comment.core_content_object.arxiv_identifier_w_vn_nr %}
-            <h3>{% if comment.anonymous %}(chose public anonymity) {% endif %}<a href="{{ comment.author.get_absolute_url }}">{{ comment.author.user.first_name }} {{ comment.author.user.last_name }}</a>
+            {% if comment.anonymous %}(chose public anonymity) {% endif %}<a href="{{ comment.author.get_absolute_url }}">{{ comment.author.user.first_name }} {{ comment.author.user.last_name }}</a>
               on {{ comment.date_submitted|date:'Y-m-d' }}
-            </h3>
         {% elif comment.anonymous %}
             Anonymous on {{comment.date_submitted|date:'Y-m-d'}}
         {% else %}
@@ -17,7 +16,7 @@
             <a href="{{comment.author.get_absolute_url}}">{{comment.author.user.first_name}} {{comment.author.user.last_name}}</a>
             on {{comment.date_submitted|date:'Y-m-d'}}
         {% endif %}
-	{% if comment.doi_string %}&nbsp; <small>{{ comment|citation }}</small>{% endif %}
+    	{% if comment.doi_string %}&nbsp; <small>{{ comment|citation }}</small>{% endif %}
     </h3>
 
 
diff --git a/comments/templates/comments/_comment_tex_template.html b/comments/templates/comments/_comment_tex_template.html
index cb39aa0d3c78f50d5fe9f2d75f618abadc9ce8a5..05d5e1479ade5d44ab1b41c9d15647940f1773d3 100644
--- a/comments/templates/comments/_comment_tex_template.html
+++ b/comments/templates/comments/_comment_tex_template.html
@@ -4,8 +4,8 @@ Received {{comment.date_submitted|date:'d-m-Y'}}\ \\
 {% endspaceless %}
 
 {% for subcomment in comment.nested_comments.vetted %}
-    \addcontentsline{toc}{subsection}{\protect\numberline{}{% if subcomment.is_author_reply %}Author Reply{% else %}Comment{% endif %} {{forloop.counter}} by {{subcomment.author.user.first_name}} {{subcomment.author.user.last_name}} }
+    \addcontentsline{toc}{subsection}{\protect\numberline{}{% if subcomment.is_author_reply %}Author Reply{% else %}Comment{% endif %} {{forloop.counter}} by {% if subcomment.anonymous %}Anonymous{% else %}{{subcomment.author.user.first_name}} {{subcomment.author.user.last_name}}{% endif %} }
 
-    \subsection*{ {% if subcomment.is_author_reply %}Author Reply{% else %}Comment{% endif %} {{forloop.parentloop.counter}}.{{forloop.counter}} by {{subcomment.author.user.first_name}} {{subcomment.author.user.last_name}} }
+    \subsection*{ {% if subcomment.is_author_reply %}Author Reply{% else %}Comment{% endif %} {{forloop.parentloop.counter}}.{{forloop.counter}} by {% if subcomment.anonymous %}Anonymous{% else %}{{subcomment.author.user.first_name}} {{subcomment.author.user.last_name}}{% endif %} }
     {% include 'comments/_comment_tex_template.html' with comment=subcomment %}
 {% endfor %}
diff --git a/comments/templates/comments/_single_comment.html b/comments/templates/comments/_single_comment.html
index 665503b06852f4686845577dde1c1356898f831a..5c1137c2e4223106ef50268e61fc51e1a94b724d 100644
--- a/comments/templates/comments/_single_comment.html
+++ b/comments/templates/comments/_single_comment.html
@@ -15,24 +15,24 @@
 
     <p class="my-3 pb-2">
         {{ comment.comment_text|linebreaksbr }}
-
-        {% if comment.file_attachment %}
-            <h3>Attachment:</h3>
-            <p>
-                <a target="_blank" href="{{ comment.get_attachment_url }}">
-                    {% if comment.file_attachment|is_image %}
-                        <img class="attachment attachment-comment" src="{{ comment.get_attachment_url }}">
-                    {% else %}
-                        {{ comment.file_attachment|filename }}<br><small>{{ comment.file_attachment.size|filesizeformat }}</small>
-                    {% endif %}
-                </a>
-            </p>
-        {% endif %}
     </p>
+    {% if comment.file_attachment %}
+        <h3>Attachment:</h3>
+        <p>
+            <a target="_blank" href="{{ comment.get_attachment_url }}">
+                {% if comment.file_attachment|is_image %}
+                    <img class="attachment attachment-comment" src="{{ comment.get_attachment_url }}">
+                {% else %}
+                    {{ comment.file_attachment|filename }}
+                {% endif %}
+            </a>
+        </p>
+    {% endif %}
+
     {% if is_editorial_college or is_edcol_admin %}
         {% if comment.remarks_for_editors %}
             <h3>Remarks for editors:</h3>
-            <p>{{ comment.remarks_for_editors|linebreaks }}</p>
+            <p>{{ comment.remarks_for_editors|linebreaksbr }}</p>
         {% endif %}
     {% endif %}
 
diff --git a/comments/templates/comments/reply_to_report.html b/comments/templates/comments/reply_to_report.html
index 64f28db492efe048647f5a1f9453121ab297c793..8d9984ad077613e5a81db037921131f2107f3c53 100644
--- a/comments/templates/comments/reply_to_report.html
+++ b/comments/templates/comments/reply_to_report.html
@@ -18,12 +18,12 @@
             {% else %}
                 <h2>The Submission concerned:</h2>
 
-                {% include 'submissions/_submission_summary.html' with submission=report.submission %}
+                {% include 'partials/submissions/submission_summary.html' with submission=report.submission show_abstract=1 %}
 
             </div>
         </div>
 
-        {% include 'submissions/_single_public_report_without_comments.html' with report=report %}
+        {% include 'partials/submissions/report_public_without_comments.html' with report=report %}
 
         <div class="row">
             <div class="col-12">
diff --git a/comments/templates/partials/comments/comments_list.html b/comments/templates/partials/comments/comments_list.html
index ea3e9ac08e398d5ad273a886e34f42cd4e4f6f0d..6f35351e2a6b0e59a50c0c394113cc4040648c71 100644
--- a/comments/templates/partials/comments/comments_list.html
+++ b/comments/templates/partials/comments/comments_list.html
@@ -1,7 +1,7 @@
 {% if comments %}
     <ul class="{{ css_class|default:'' }}">
         {% for comment in comments %}
-            <li><a href="{{ comment.get_absolute_url }}"{% if target_blank %} target="_blank"{% endif %}>{% if comment.is_author_reply %}Author Reply{% else %}Comment{% endif %} by {{ comment.author.get_title_display }} {{ comment.author.user.last_name }} on {{ comment.date_submitted|date:'DATE_FORMAT' }}</a></li>
+            <li><a href="{{ comment.get_absolute_url }}"{% if target_blank %} target="_blank"{% endif %}>{% if comment.is_author_reply %}Author Reply{% else %}Comment{% endif %} by {{ comment.get_author_str }} on {{ comment.date_submitted|date:'DATE_FORMAT' }}</a></li>
             {% include 'partials/comments/comments_list.html' with comments=comment.nested_comments.vetted css_class='m-0 pl-4' %}
         {% endfor %}
     </ul>
diff --git a/comments/templatetags/comment_extras.py b/comments/templatetags/comment_extras.py
index 5ae3d8261883134688183e76825356cf8ec0d209..b6c074234d31fe85f5d8df8265307e5915aa3cac 100644
--- a/comments/templatetags/comment_extras.py
+++ b/comments/templatetags/comment_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from ..models import Comment
@@ -20,7 +24,7 @@ class CommentTemplateNode(template.Node):
     def render(self, context):
         content_object = self.content_object.resolve(context)
         if isinstance(content_object, Submission):
-            t = context.template.engine.get_template('submissions/_submission_summary_short.html')
+            t = context.template.engine.get_template('partials/submissions/submission_summary.html')
             return t.render(template.Context({'submission': content_object}))
         elif isinstance(content_object, Commentary):
             t = context.template.engine.get_template('commentaries/_commentary_summary.html')
diff --git a/comments/templatetags/file_extentions.py b/comments/templatetags/file_extentions.py
index 0f517ceb07a118bfb58bb962f72ed545790defff..11a6ac2e768801a1c3a134b6a8db57d3395e59ce 100644
--- a/comments/templatetags/file_extentions.py
+++ b/comments/templatetags/file_extentions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from ..constants import EXTENTIONS_IMAGES, EXTENTIONS_PDF
diff --git a/comments/test_views.py b/comments/test_views.py
index c16e256953ec7be3ea87ce46c9e96f16763cb15c..c875a8f706f4064b188591842387b62de0746ecc 100644
--- a/comments/test_views.py
+++ b/comments/test_views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase, RequestFactory, Client
 from django.urls import reverse
 from django.contrib.messages.storage.fallback import FallbackStorage
@@ -6,7 +10,7 @@ from django.http import Http404
 from scipost.factories import ContributorFactory
 from theses.factories import ThesisLinkFactory
 from submissions.factories import EICassignedSubmissionFactory
-from commentaries.factories import UnpublishedVettedCommentaryFactory
+from commentaries.factories import UnpublishedCommentaryFactory
 
 from .factories import CommentFactory
 from .forms import CommentForm
@@ -84,7 +88,7 @@ class TestNewComment(TestCase):
         """ Valid Comment gets saved """
 
         contributor = ContributorFactory()
-        commentary = UnpublishedVettedCommentaryFactory()
+        commentary = UnpublishedCommentaryFactory()
         valid_comment_data = model_form_data(CommentFactory, CommentForm)
         target = reverse('comments:new_comment', kwargs={'object_id': commentary.id, 'type_of_object': 'commentary'})
 
diff --git a/comments/tests.py b/comments/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/comments/tests.py
+++ b/comments/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/comments/urls.py b/comments/urls.py
index 1c7f2a46e6939064148007f742a813b023078b8f..21099ad5e6a627d6922a5452b08eaeb0cf43bbf0 100644
--- a/comments/urls.py
+++ b/comments/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/comments/utils.py b/comments/utils.py
index 9fad691fe5fa29525817682fb275218d35171b35..8737a8e0d20b60b23fc0f2d9e5efe4bb5a4f313c 100644
--- a/comments/utils.py
+++ b/comments/utils.py
@@ -1,10 +1,14 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import os
 
 from common.utils import BaseMailUtil
 
 
 def validate_file_extention(value, allowed_extentions):
-    '''Check if a filefield (value) has allowed extentions.'''
+    """Check if a filefield (value) has allowed extentions."""
     ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
     return ext.lower() in allowed_extentions
 
@@ -15,20 +19,30 @@ class CommentUtils(BaseMailUtil):
 
     @classmethod
     def email_comment_vet_accepted_to_author(cls):
-        """
-        Send mail after Comment is vetted: `Accept`
+        """Send mail after Comment is vetted: `Accept`.
 
         Requires loading:
         comment -- Comment
         """
+        from submissions.models import Submission, Report
+
+        comment = cls._context['comment']
+        send_mail = True
+        if isinstance(comment.content_object, Submission):
+            send_mail = comment.author not in comment.content_object.authors.all()
+        elif isinstance(comment.content_object, Report):
+            send_mail = comment.author not in comment.content_object.submission.authors.all()
+
+        if not send_mail:
+            return
+
         cls._send_mail(cls, 'comment_vet_accepted',
-                       [cls._context['comment'].author.user.email],
+                       [comment.author.user.email],
                        'SciPost Comment published')
 
     @classmethod
     def email_comment_vet_rejected_to_author(cls, email_response=''):
-        """
-        Send mail after Comment is vetted: `Reject`
+        """Send mail after Comment is vetted: `Reject`.
 
         Requires loading:
         comment -- Comment
diff --git a/comments/views.py b/comments/views.py
index 2de6693126a45ac20b03a1e8186879949c06609b..69f65864535d70908d3b47e16dbfd6d06b08f6c1 100644
--- a/comments/views.py
+++ b/comments/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.decorators import permission_required, login_required
 from django.contrib import messages
 from django.core.urlresolvers import reverse
@@ -72,10 +76,6 @@ def vet_submitted_comment(request, comment_id):
             comment.vetted_by = request.user.contributor
             comment.save()
 
-            # Send emails
-            CommentUtils.load({'comment': comment})
-            CommentUtils.email_comment_vet_accepted_to_author()
-
             # Update `latest_activity` fields
             content_object = comment.content_object
             content_object.latest_activity = timezone.now()
@@ -96,6 +96,10 @@ def vet_submitted_comment(request, comment_id):
                     SubmissionUtils.load({'submission': content_object.submission})
                     SubmissionUtils.send_author_comment_received_email()
 
+            # Send emails
+            CommentUtils.load({'comment': comment})
+            CommentUtils.email_comment_vet_accepted_to_author()
+
         elif form.cleaned_data['action_option'] == '2':
             # The comment request is simply rejected
             comment.status = int(form.cleaned_data['refusal_reason'])
diff --git a/common/forms.py b/common/forms.py
index 09f23821399b74f4432f76de009ab0a67f9ee104..3f1b8651d2b2c3d30e5389ec3d478f3f5a156df0 100644
--- a/common/forms.py
+++ b/common/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import calendar
 import datetime
 import re
diff --git a/common/helpers/__init__.py b/common/helpers/__init__.py
index abe97df91f6222671cdcf4338f5ac1a39d0073ba..997f36d73f6d9e3badedecf8df6db2dfe2b7de73 100644
--- a/common/helpers/__init__.py
+++ b/common/helpers/__init__.py
@@ -1,3 +1,8 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import hashlib
 import random
 import string
 
@@ -32,8 +37,8 @@ def model_form_data(model, form_class, form_kwargs={}):
     return filter_keys(model_data, form_fields)
 
 
-def random_arxiv_identifier_with_version_number():
-    return random_arxiv_identifier_without_version_number() + "v0"
+def random_arxiv_identifier_with_version_number(version_nr='0'):
+    return random_arxiv_identifier_without_version_number() + 'v' + str(version_nr)
 
 
 def random_arxiv_identifier_without_version_number():
@@ -44,15 +49,25 @@ def random_scipost_journal():
     return random.choice(SCIPOST_JOURNALS_SUBMIT)[0]
 
 
-def random_external_journal():
+def random_external_journal_abbrev():
     return random.choice((
-        'PhysRevA.',
-        'PhysRevB.',
-        'PhysRevC.',
-        'nature.'
-        'S0550-3213(01)',
-        '1742-5468/',
-        '0550-3213(96)'
+        'Ann. Phys.',
+        'Phys. Rev. A',
+        'Phys. Rev. B',
+        'Phys. Rev. C',
+        'Phys. Rev. Lett.',
+        'Europhys. Lett.',
+        'J. Math. Anal. Appl.',
+        'Nat. Phys.'
+        'J. Phys. A',
+        'J. Stat. Phys.',
+        'J. Stat. Mech.',
+        'J. Math. Phys.',
+        'Lett. Math. Phys.',
+        'Sov. Phys. JETP',
+        'Sov. Phys. JETP',
+        'Nucl. Phys. B',
+        'Adv. Phys.'
     ))
 
 
@@ -64,14 +79,48 @@ def random_scipost_doi():
     return '10.21468/%s.%s' % (random_scipost_journal(), random_pub_number())
 
 
+def random_scipost_report_doi_label():
+    return 'SciPost.Report.%s' % random_digits(4)
+
+
 def random_external_doi():
-    return '10.%s/%s%s' % (random_digits(5), random_external_journal(), random_pub_number())
+    """
+    Return a fake/random doi as if all journal abbrev and pub_number are separated by `.`, which
+    can be helpfull for testing purposes.
+    """
+    journal = random.choice((
+        'PhysRevA',
+        'PhysRevB',
+        'PhysRevC',
+        'PhysRevLett',
+        'nature'
+        'S0550-3213(01)',
+        '1742-5468',
+        '0550-3213(96)'
+    ))
+    return '10.%s/%s.%s' % (random_digits(5), journal, random_pub_number())
 
 
 def random_digits(n):
     return "".join(random.choice(string.digits) for _ in range(n))
 
 
+def generate_orcid():
+    return '{}-{}-{}-{}'.format(
+        random_digits(4),
+        random_digits(4),
+        random_digits(4),
+        random_digits(4),
+    )
+
+
 def filter_keys(dictionary, keys_to_keep):
     # Field is empty if not on model.
     return {key: dictionary.get(key, "") for key in keys_to_keep}
+
+def get_new_secrets_key(salt='', salt2=''):
+    key = salt or generate_orcid()
+    for i in range(5):
+        key += random.choice(string.ascii_letters)
+    key = key.encode('utf8')
+    return hashlib.sha1(key + salt2.encode('utf8')).hexdigest()
diff --git a/common/helpers/factories.py b/common/helpers/factories.py
index b033a898be81b691d884566550a661480c663611..124380e24aedbc676f47dc02756d2f300cf6dbde 100644
--- a/common/helpers/factories.py
+++ b/common/helpers/factories.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 
 
diff --git a/common/helpers/test.py b/common/helpers/test.py
index e7ed63a924a7a08acbaaba035fd49e9e394d1d3e..0cf11df60dd02884bd9ae00ff10837c5be982a22 100644
--- a/common/helpers/test.py
+++ b/common/helpers/test.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import scipost.management.commands.add_groups_and_permissions
 
 
diff --git a/common/utils.py b/common/utils.py
index 82910acd041f94b9b59977ef1b237e3ba661512b..fa53a639c137198147399ac3bf7ac6be751a2063 100644
--- a/common/utils.py
+++ b/common/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.mail import EmailMultiAlternatives
 from django.template import loader
 
diff --git a/common/widgets.py b/common/widgets.py
index faa904bb9279dc95b3b5e9f1cfd8f0a85b51a28f..b3b3dfb3ab5a3a0ad3c52406f45fb1b47d26d3dc 100644
--- a/common/widgets.py
+++ b/common/widgets.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # import calendar
 import datetime
 import re
diff --git a/cronjob_production.sh b/cronjob_production.sh
deleted file mode 100644
index 645a7b10bfa68bb34363053f06cfe09634a47839..0000000000000000000000000000000000000000
--- a/cronjob_production.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-cd /home/jscaux/webapps/scipost/SciPost_v1/
-export DJANGO_SETTINGS_MODULE='SciPost_v1.settings.production'
-
-/usr/local/bin/python3.5 manage.py remind_fellows_to_submit_report
diff --git a/cronjob_production_daily.sh b/cronjob_production_daily.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7de15c4334a73f60e128fb7181c970ba595ccb8b
--- /dev/null
+++ b/cronjob_production_daily.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Daily cronjobs for production area
+
+cd /home/scipost/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+python3 manage.py remind_fellows_to_submit_report
diff --git a/cronjob_production_eachminute.sh b/cronjob_production_eachminute.sh
new file mode 100644
index 0000000000000000000000000000000000000000..a7db7bdec723b442396b161efe1fa25e40c4b06d
--- /dev/null
+++ b/cronjob_production_eachminute.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# Per minute cronjobs for production area
+
+cd /home/scipost/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+# Mails waiting in the database
+python3 manage.py send_mails
diff --git a/cronjob_production_weekly.sh b/cronjob_production_weekly.sh
new file mode 100644
index 0000000000000000000000000000000000000000..861ffa3c13bd51158ae0e873d90b16dd1ed565ee
--- /dev/null
+++ b/cronjob_production_weekly.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Weekly cronjobs for production area
+
+cd /home/scipost/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+python3 manage.py email_fellows_tasklist
diff --git a/cronjob_staging.sh b/cronjob_staging.sh
deleted file mode 100644
index 98bfc21a2764d8c2803e8b0738b20b880b5f18af..0000000000000000000000000000000000000000
--- a/cronjob_staging.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/bash
-
-cd /home/jdewit/webapps/scipost/SciPost_v1/
-export DJANGO_SETTINGS_MODULE='SciPost_v1.settings.staging_release'
-
-/usr/local/bin/python3.5 manage.py remind_fellows_to_submit_report
diff --git a/cronjob_staging_daily.sh b/cronjob_staging_daily.sh
new file mode 100644
index 0000000000000000000000000000000000000000..62e19754071d8b67e4e1d323b6fce68d65b363ef
--- /dev/null
+++ b/cronjob_staging_daily.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Daily cronjobs for staging area
+
+cd /home/scipoststg/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+python manage.py remind_fellows_to_submit_report
diff --git a/cronjob_staging_eachminute.sh b/cronjob_staging_eachminute.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9d6adb8b811bec7f27f41b8599b40f8c8bf49861
--- /dev/null
+++ b/cronjob_staging_eachminute.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# Per minute cronjobs for staging area
+
+cd /home/scipoststg/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+# Mails waiting in the database
+python manage.py send_mails
diff --git a/cronjob_staging_weekly.sh b/cronjob_staging_weekly.sh
new file mode 100644
index 0000000000000000000000000000000000000000..98e7324d01c19f4e0a7876457461b3278642bc5e
--- /dev/null
+++ b/cronjob_staging_weekly.sh
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+# Weekly cronjobs for staging area
+
+cd /home/scipoststg/webapps/scipost/scipost_v1
+source venv/bin/activate
+
+python manage.py email_fellows_tasklist
diff --git a/docs/Makefile b/docs/admin/Makefile
similarity index 100%
rename from docs/Makefile
rename to docs/admin/Makefile
diff --git a/docs/admin/_build/doctrees/environment.pickle b/docs/admin/_build/doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..0c9b67dc6ce5bd09cda83e241c52c78098064d3e
Binary files /dev/null and b/docs/admin/_build/doctrees/environment.pickle differ
diff --git a/docs/admin/_build/doctrees/foundation.doctree b/docs/admin/_build/doctrees/foundation.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..fbe819e078adfbfe7d20a5c0d93d8c18778f4a8c
Binary files /dev/null and b/docs/admin/_build/doctrees/foundation.doctree differ
diff --git a/docs/admin/_build/doctrees/index.doctree b/docs/admin/_build/doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..dbde81f4d441e28b4c7fb5bdf66692f86f6563cc
Binary files /dev/null and b/docs/admin/_build/doctrees/index.doctree differ
diff --git a/docs/admin/_build/json/.buildinfo b/docs/admin/_build/json/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..d142458ff8b8295b327d0472a9bf472022ded4ae
--- /dev/null
+++ b/docs/admin/_build/json/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 4186a3ad9a6e6874e48739a86663d4c1
+tags: 6a38a8737c5234d37ffb85aa5f52e244
diff --git a/docs/admin/_build/json/_sources/foundation.txt b/docs/admin/_build/json/_sources/foundation.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6289d007259f7e90c20cc8d53ebd76f3d66a7aed
--- /dev/null
+++ b/docs/admin/_build/json/_sources/foundation.txt
@@ -0,0 +1,6 @@
+Stichting SciPost
+=================
+
+
+History
+-------
diff --git a/docs/admin/_build/json/_sources/index.txt b/docs/admin/_build/json/_sources/index.txt
new file mode 100644
index 0000000000000000000000000000000000000000..5eff852ba767415d0c0685f4613629ba5a39ad52
--- /dev/null
+++ b/docs/admin/_build/json/_sources/index.txt
@@ -0,0 +1,9 @@
+SciPost Admin documentation
+===========================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   foundation
diff --git a/docs/admin/_build/json/_static/pygments.css b/docs/admin/_build/json/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..20c4814dcf0d3f437ee9a46f5957e3165aa5fb17
--- /dev/null
+++ b/docs/admin/_build/json/_static/pygments.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #eeffcc; }
+.highlight .c { color: #408090; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #333333 } /* Generic.Output */
+.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #007020 } /* Keyword.Pseudo */
+.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #902000 } /* Keyword.Type */
+.highlight .m { color: #208050 } /* Literal.Number */
+.highlight .s { color: #4070a0 } /* Literal.String */
+.highlight .na { color: #4070a0 } /* Name.Attribute */
+.highlight .nb { color: #007020 } /* Name.Builtin */
+.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.highlight .no { color: #60add5 } /* Name.Constant */
+.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #007020 } /* Name.Exception */
+.highlight .nf { color: #06287e } /* Name.Function */
+.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #bb60d5 } /* Name.Variable */
+.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #208050 } /* Literal.Number.Bin */
+.highlight .mf { color: #208050 } /* Literal.Number.Float */
+.highlight .mh { color: #208050 } /* Literal.Number.Hex */
+.highlight .mi { color: #208050 } /* Literal.Number.Integer */
+.highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
+.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
+.highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
+.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
+.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { color: #c65d09 } /* Literal.String.Other */
+.highlight .sr { color: #235388 } /* Literal.String.Regex */
+.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
+.highlight .ss { color: #517918 } /* Literal.String.Symbol */
+.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287e } /* Name.Function.Magic */
+.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
+.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
+.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
+.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/admin/_build/json/environment.pickle b/docs/admin/_build/json/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..0c9b67dc6ce5bd09cda83e241c52c78098064d3e
Binary files /dev/null and b/docs/admin/_build/json/environment.pickle differ
diff --git a/docs/admin/_build/json/foundation.fjson b/docs/admin/_build/json/foundation.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..b37300c1693f6c6f8bff12b424cb8ff17d17e68a
--- /dev/null
+++ b/docs/admin/_build/json/foundation.fjson
@@ -0,0 +1 @@
+{"meta": {}, "parents": [], "sourcename": "foundation.txt", "display_toc": true, "body": "<div class=\"section\" id=\"stichting-scipost\">\n<h1>Stichting SciPost<a class=\"headerlink\" href=\"#stichting-scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"history\">\n<h2>History<a class=\"headerlink\" href=\"#history\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "next": null, "current_page_name": "foundation", "title": "Stichting SciPost", "sidebars": null, "metatags": "", "customsidebar": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Stichting SciPost</a><ul>\n<li><a class=\"reference internal\" href=\"#history\">History</a></li>\n</ul>\n</li>\n</ul>\n", "alabaster_version": "0.7.10", "prev": {"title": "SciPost Admin documentation", "link": "../"}, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["index", "SciPost Admin documentation", "P", "previous"]]}
\ No newline at end of file
diff --git a/docs/admin/_build/json/genindex.fjson b/docs/admin/_build/json/genindex.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..7747de9c037143813efc1c5fd5533df696fdda0a
--- /dev/null
+++ b/docs/admin/_build/json/genindex.fjson
@@ -0,0 +1 @@
+{"genindexentries": [], "sidebars": null, "split_index": false, "genindexcounts": [], "current_page_name": "genindex", "customsidebar": null, "alabaster_version": "0.7.10"}
\ No newline at end of file
diff --git a/docs/admin/_build/json/index.fjson b/docs/admin/_build/json/index.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..a061b3fd5b141dbdf9d8b724414bea08a5252269
--- /dev/null
+++ b/docs/admin/_build/json/index.fjson
@@ -0,0 +1 @@
+{"meta": {}, "parents": [], "sourcename": "index.txt", "display_toc": false, "body": "<div class=\"section\" id=\"scipost-admin-documentation\">\n<h1>SciPost Admin documentation<a class=\"headerlink\" href=\"#scipost-admin-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"foundation/\">Stichting SciPost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"foundation/#history\">History</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "next": {"title": "Stichting SciPost", "link": "foundation/"}, "current_page_name": "index", "title": "SciPost Admin documentation", "sidebars": null, "metatags": "", "customsidebar": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">SciPost Admin documentation</a></li>\n</ul>\n", "alabaster_version": "0.7.10", "prev": null, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["foundation", "Stichting SciPost", "N", "next"]]}
\ No newline at end of file
diff --git a/docs/admin/_build/json/last_build b/docs/admin/_build/json/last_build
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/docs/admin/_build/json/objects.inv b/docs/admin/_build/json/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..7ae8a803bc5dc25b62cdada72cde6a6da1a407a9
--- /dev/null
+++ b/docs/admin/_build/json/objects.inv
@@ -0,0 +1,7 @@
+# Sphinx inventory version 2
+# Project: SciPost
+# Version: 1.0
+# The remainder of this file is compressed using zlib.
+xÚmŽK
+1†÷=E.0·î\ºæµÉt
+m"6½ý<«®ßÿÈ?Jet…¡(žQ<t'?Ô ÑO9Ààc/EM ŽŒôÚÉÝ)­™F-\×c¾–£´åá‚92,´fbÝÞ˜,ø§óñîš`á&Xí…ÜÓO¿î-‹w­wÌ	N‰
\ No newline at end of file
diff --git a/docs/admin/_build/json/search.fjson b/docs/admin/_build/json/search.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..18633afd7d7e9ba67f56977e85f55f626c1440f0
--- /dev/null
+++ b/docs/admin/_build/json/search.fjson
@@ -0,0 +1 @@
+{"sidebars": null, "alabaster_version": "0.7.10", "current_page_name": "search", "customsidebar": null}
\ No newline at end of file
diff --git a/docs/conf.py b/docs/admin/conf.py
similarity index 96%
rename from docs/conf.py
rename to docs/admin/conf.py
index e504443637f1e3f1027b3f8b89b69c106ff24243..461731e1fa84d8811ca44afc27290eb83058ad22 100644
--- a/docs/conf.py
+++ b/docs/admin/conf.py
@@ -19,7 +19,7 @@ import shlex
 import django
 from django.conf import settings
 
-sys.path.insert(0, os.path.abspath('..'))
+sys.path.insert(0, os.path.abspath('../..'))
 
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings")
 
@@ -155,7 +155,7 @@ html_theme = 'sphinx_rtd_theme'
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-html_static_path = ['_static']
+html_static_path = ['../_static']
 
 # Add any extra paths that contain custom files (such as robots.txt or
 # .htaccess) here, relative to this directory. These files are copied
@@ -218,7 +218,7 @@ html_static_path = ['_static']
 #html_search_scorer = 'scorer.js'
 
 # Output file base name for HTML help builder.
-htmlhelp_basename = 'SciPostdoc'
+htmlhelp_basename = 'SciPostAdmindoc'
 
 # -- Options for LaTeX output ---------------------------------------------
 
@@ -240,7 +240,7 @@ latex_elements = {
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-  (master_doc, 'SciPost.tex', 'SciPost Documentation',
+  (master_doc, 'SciPost_Admin.tex', 'SciPost Admin Documentation',
    'Jean-Sébastien Caux', 'manual'),
 ]
 
@@ -270,7 +270,7 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    (master_doc, 'scipost', 'SciPost Documentation',
+    (master_doc, 'scipost admin', 'SciPost Admin Documentation',
      [author], 1)
 ]
 
@@ -284,7 +284,7 @@ man_pages = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-  (master_doc, 'SciPost', 'SciPost Documentation',
+  (master_doc, 'SciPost admin', 'SciPost Admin Documentation',
    author, 'SciPost', 'One line description of project.',
    'Miscellaneous'),
 ]
diff --git a/docs/admin/foundation.rst b/docs/admin/foundation.rst
new file mode 100644
index 0000000000000000000000000000000000000000..6289d007259f7e90c20cc8d53ebd76f3d66a7aed
--- /dev/null
+++ b/docs/admin/foundation.rst
@@ -0,0 +1,6 @@
+Stichting SciPost
+=================
+
+
+History
+-------
diff --git a/docs/admin/index.rst b/docs/admin/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..5eff852ba767415d0c0685f4613629ba5a39ad52
--- /dev/null
+++ b/docs/admin/index.rst
@@ -0,0 +1,9 @@
+SciPost Admin documentation
+===========================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   foundation
diff --git a/docs/codebase/Makefile b/docs/codebase/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..766d9a8bc3fc53a651b7c9618affa897bd2475c3
--- /dev/null
+++ b/docs/codebase/Makefile
@@ -0,0 +1,192 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  applehelp  to make an Apple Help Book"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  xml        to make Docutils-native XML files"
+	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+	@echo "  coverage   to run coverage check of the documentation (if enabled)"
+
+clean:
+	rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SciPost.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SciPost.qhc"
+
+applehelp:
+	$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
+	@echo
+	@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
+	@echo "N.B. You won't be able to view it unless you put it in" \
+	      "~/Library/Documentation/Help or install it in your application" \
+	      "bundle."
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/SciPost"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SciPost"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+latexpdfja:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through platex and dvipdfmx..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
+
+coverage:
+	$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
+	@echo "Testing of coverage in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/coverage/python.txt."
+
+xml:
+	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+	@echo
+	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+pseudoxml:
+	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+	@echo
+	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/codebase/_build/doctrees/apps.doctree b/docs/codebase/_build/doctrees/apps.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..ff317aedfd2b7d0cee0b2195ef2b20d53c733826
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/commentaries.doctree b/docs/codebase/_build/doctrees/apps/commentaries.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..129bbdf8522b837ea2f9de115a5032b31a3cd577
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/commentaries.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/comments.doctree b/docs/codebase/_build/doctrees/apps/comments.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..39c8390f328671647f126c2e8ccb6f93de5a8dfd
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/comments.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/journals.doctree b/docs/codebase/_build/doctrees/apps/journals.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..8ec2843e8d981d4215f6526f83af586384afa81c
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/journals.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/scipost.doctree b/docs/codebase/_build/doctrees/apps/scipost.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..93cb8cb7206043d27908d64a136dfe766419c113
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/scipost.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/submissions.doctree b/docs/codebase/_build/doctrees/apps/submissions.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..e4c1a6e6b8cdecf784f880b24e189c2a295dbc47
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/submissions.doctree differ
diff --git a/docs/codebase/_build/doctrees/apps/theses.doctree b/docs/codebase/_build/doctrees/apps/theses.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..6df0f6e7d48550603bba6aa4689f441f66ccb0f4
Binary files /dev/null and b/docs/codebase/_build/doctrees/apps/theses.doctree differ
diff --git a/docs/codebase/_build/doctrees/codebase.doctree b/docs/codebase/_build/doctrees/codebase.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..5dd116079a23482e9b18a9085e4b4c0191c7be70
Binary files /dev/null and b/docs/codebase/_build/doctrees/codebase.doctree differ
diff --git a/docs/codebase/_build/doctrees/environment.pickle b/docs/codebase/_build/doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..3a216e7c1e34f45e2b7de010516855ce8377ea65
Binary files /dev/null and b/docs/codebase/_build/doctrees/environment.pickle differ
diff --git a/docs/codebase/_build/doctrees/index.doctree b/docs/codebase/_build/doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..13c3b6d910f597e8a6159e8634f92a5ea48aa034
Binary files /dev/null and b/docs/codebase/_build/doctrees/index.doctree differ
diff --git a/docs/codebase/_build/doctrees/maintenance.doctree b/docs/codebase/_build/doctrees/maintenance.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..6aa9fc131d130af86238a004064416773dbfee8c
Binary files /dev/null and b/docs/codebase/_build/doctrees/maintenance.doctree differ
diff --git a/docs/codebase/_build/doctrees/maintenance/docs.doctree b/docs/codebase/_build/doctrees/maintenance/docs.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..d8da40f9db880c02c1a506d332d0f017dc86718d
Binary files /dev/null and b/docs/codebase/_build/doctrees/maintenance/docs.doctree differ
diff --git a/docs/codebase/_build/doctrees/modules/models.doctree b/docs/codebase/_build/doctrees/modules/models.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..99a5cc260ba1834a7022eb96c2635d4edfe0be0f
Binary files /dev/null and b/docs/codebase/_build/doctrees/modules/models.doctree differ
diff --git a/docs/codebase/_build/doctrees/modules/views.doctree b/docs/codebase/_build/doctrees/modules/views.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..6d91e3495e21e3a065d8583aef0cc8b049f86de3
Binary files /dev/null and b/docs/codebase/_build/doctrees/modules/views.doctree differ
diff --git a/docs/codebase/_build/html/.buildinfo b/docs/codebase/_build/html/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..ad14d56bcd5b22450a5b41ed68d2c16f25937de5
--- /dev/null
+++ b/docs/codebase/_build/html/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 4186a3ad9a6e6874e48739a86663d4c1
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/codebase/_build/html/_modules/commentaries/models.html b/docs/codebase/_build/html/_modules/commentaries/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..e5d0b410eada7a0dcbce67c19214f90549681689
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/commentaries/models.html
@@ -0,0 +1,283 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>commentaries.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>commentaries.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for commentaries.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.fields</span> <span class="k">import</span> <span class="n">GenericRelation</span>
+<span class="kn">from</span> <span class="nn">django.contrib.postgres.fields</span> <span class="k">import</span> <span class="n">JSONField</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span>
+
+<span class="kn">from</span> <span class="nn">journals.constants</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span>
+<span class="kn">from</span> <span class="nn">scipost.behaviors</span> <span class="k">import</span> <span class="n">TimeStampedModel</span>
+<span class="kn">from</span> <span class="nn">scipost.constants</span> <span class="k">import</span> <span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">DISCIPLINE_PHYSICS</span><span class="p">,</span> <span class="n">SCIPOST_SUBJECT_AREAS</span>
+
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">COMMENTARY_TYPES</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">CommentaryManager</span>
+
+
+<div class="viewcode-block" id="Commentary"><a class="viewcode-back" href="../../apps/commentaries.html#commentaries.models.Commentary">[docs]</a><span class="k">class</span> <span class="nc">Commentary</span><span class="p">(</span><span class="n">TimeStampedModel</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A Commentary contains all the contents of a SciPost Commentary page for a given publication.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">requested_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                     <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                     <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;requested_commentaries&#39;</span><span class="p">)</span>
+    <span class="n">vetted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                  <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="nb">type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">9</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">COMMENTARY_TYPES</span><span class="p">)</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
+                                  <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DISCIPLINE_PHYSICS</span><span class="p">)</span>
+    <span class="n">domain</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">)</span>
+    <span class="n">subject_area</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span>
+                                    <span class="n">default</span><span class="o">=</span><span class="s1">&#39;Phys:QP&#39;</span><span class="p">)</span>
+    <span class="n">open_for_commenting</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Article/publication data</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
+    <span class="n">arxiv_identifier</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                        <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;arXiv identifier (including version nr)&quot;</span><span class="p">)</span>
+    <span class="n">arxiv_link</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;arXiv link (including version nr)&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">pub_DOI</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;DOI of the original publication&#39;</span><span class="p">,</span>
+                               <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">pub_DOI_link</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span>
+        <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;DOI link to the original publication&#39;</span><span class="p">,</span>
+        <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">metadata</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">{},</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">arxiv_or_DOI_string</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
+                                           <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;string form of arxiv nr or&#39;</span>
+                                                        <span class="s1">&#39; DOI for commentary url&#39;</span><span class="p">)</span>
+    <span class="n">scipost_publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">OneToOneField</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                               <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;commentary&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Authors which have been mapped to contributors:</span>
+    <span class="n">author_list</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
+    <span class="n">authors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                     <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;commentaries&#39;</span><span class="p">)</span>
+    <span class="n">authors_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;claimed_commentaries&#39;</span><span class="p">)</span>
+    <span class="n">authors_false_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                  <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;false_claimed_commentaries&#39;</span><span class="p">)</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">volume</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">pages</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">50</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">pub_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;date of original publication&#39;</span><span class="p">,</span>
+                                <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">pub_abstract</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;abstract&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Comments can be added to a Commentary</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;comments.Comment&#39;</span><span class="p">,</span> <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;commentaries&#39;</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">CommentaryManager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s1">&#39;Commentaries&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;commentaries:commentary&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span><span class="p">,))</span>
+
+<div class="viewcode-block" id="Commentary.parse_links_into_urls"><a class="viewcode-back" href="../../apps/commentaries.html#commentaries.models.Commentary.parse_links_into_urls">[docs]</a>    <span class="k">def</span> <span class="nf">parse_links_into_urls</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">commit</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Takes the arXiv nr or DOI and turns it into the urls &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI_link</span> <span class="o">=</span> <span class="s1">&#39;http://dx.doi.org/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">pub_DOI</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_or_DOI_string</span> <span class="o">=</span> <span class="s1">&#39;arXiv:&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_link</span> <span class="o">=</span> <span class="s1">&#39;http://arxiv.org/abs/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier</span>
+
+        <span class="k">if</span> <span class="n">commit</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span></div></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/commentaries/views.html b/docs/codebase/_build/html/_modules/commentaries/views.html
new file mode 100644
index 0000000000000000000000000000000000000000..358a539e07e64cecfa65a766c8e8e980bf1ee65f
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/commentaries/views.html
@@ -0,0 +1,461 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>commentaries.views &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>commentaries.views</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for commentaries.views</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span><span class="p">,</span> <span class="n">render</span>
+<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">messages</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.decorators</span> <span class="k">import</span> <span class="n">login_required</span><span class="p">,</span> <span class="n">permission_required</span>
+<span class="kn">from</span> <span class="nn">django.core.mail</span> <span class="k">import</span> <span class="n">EmailMessage</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span><span class="p">,</span> <span class="n">reverse_lazy</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">transaction</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">redirect</span>
+<span class="kn">from</span> <span class="nn">django.template.loader</span> <span class="k">import</span> <span class="n">render_to_string</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.edit</span> <span class="k">import</span> <span class="n">CreateView</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.list</span> <span class="k">import</span> <span class="n">ListView</span>
+<span class="kn">from</span> <span class="nn">django.utils.decorators</span> <span class="k">import</span> <span class="n">method_decorator</span>
+<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">Http404</span>
+
+<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="n">Commentary</span>
+<span class="kn">from</span> <span class="nn">.forms</span> <span class="k">import</span> <span class="n">DOIToQueryForm</span><span class="p">,</span> <span class="n">ArxivQueryForm</span><span class="p">,</span> <span class="n">VetCommentaryForm</span><span class="p">,</span> <span class="n">RequestCommentaryForm</span><span class="p">,</span>\
+                   <span class="n">CommentarySearchForm</span><span class="p">,</span> <span class="n">RequestPublishedArticleForm</span><span class="p">,</span> <span class="n">RequestArxivPreprintForm</span><span class="p">,</span>\
+                   <span class="n">CommentSciPostPublication</span>
+
+<span class="kn">from</span> <span class="nn">comments.models</span> <span class="k">import</span> <span class="n">Comment</span>
+<span class="kn">from</span> <span class="nn">comments.forms</span> <span class="k">import</span> <span class="n">CommentForm</span>
+<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">Publication</span>
+<span class="kn">from</span> <span class="nn">scipost.mixins</span> <span class="k">import</span> <span class="n">PaginationMixin</span>
+
+<span class="kn">import</span> <span class="nn">strings</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_request_commentary_pages&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">request_commentary</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/request_commentary.html&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@method_decorator</span><span class="p">(</span><span class="n">login_required</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;dispatch&#39;</span><span class="p">)</span>
+<span class="nd">@method_decorator</span><span class="p">(</span><span class="n">permission_required</span><span class="p">(</span>
+    <span class="s1">&#39;scipost.can_request_commentary_pages&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;dispatch&#39;</span><span class="p">)</span>
+<span class="k">class</span> <span class="nc">RequestCommentary</span><span class="p">(</span><span class="n">CreateView</span><span class="p">):</span>
+    <span class="n">success_url</span> <span class="o">=</span> <span class="n">reverse_lazy</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_form_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_form_kwargs</span><span class="p">()</span>
+        <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;requested_by&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+        <span class="k">return</span> <span class="n">kwargs</span>
+
+    <span class="k">def</span> <span class="nf">form_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">):</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_request_commentary</span><span class="p">,</span> <span class="n">fail_silently</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">form_valid</span><span class="p">(</span><span class="n">form</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">RequestPublishedArticle</span><span class="p">(</span><span class="n">RequestCommentary</span><span class="p">):</span>
+    <span class="n">form_class</span> <span class="o">=</span> <span class="n">RequestPublishedArticleForm</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;commentaries/request_published_article.html&#39;</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;query_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">context</span>
+
+
+<span class="k">class</span> <span class="nc">RequestArxivPreprint</span><span class="p">(</span><span class="n">RequestCommentary</span><span class="p">):</span>
+    <span class="n">form_class</span> <span class="o">=</span> <span class="n">RequestArxivPreprintForm</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;commentaries/request_arxiv_preprint.html&#39;</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;query_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ArxivQueryForm</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">context</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_request_commentary_pages&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">prefill_using_DOI</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s2">&quot;POST&quot;</span><span class="p">:</span>
+        <span class="n">query_form</span> <span class="o">=</span> <span class="n">DOIToQueryForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
+        <span class="c1"># The form checks if doi is valid and commentary doesn&#39;t already exist.</span>
+        <span class="k">if</span> <span class="n">query_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+            <span class="n">prefill_data</span> <span class="o">=</span> <span class="n">query_form</span><span class="o">.</span><span class="n">request_published_article_form_prefill_data</span><span class="p">()</span>
+            <span class="n">form</span> <span class="o">=</span> <span class="n">RequestPublishedArticleForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">prefill_data</span><span class="p">)</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_doi_query</span><span class="p">,</span> <span class="n">fail_silently</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">form</span> <span class="o">=</span> <span class="n">RequestPublishedArticleForm</span><span class="p">()</span>
+
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+            <span class="s1">&#39;query_form&#39;</span><span class="p">:</span> <span class="n">query_form</span><span class="p">,</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/request_published_article.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_request_commentary_pages&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">prefill_using_arxiv_identifier</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s2">&quot;POST&quot;</span><span class="p">:</span>
+        <span class="n">query_form</span> <span class="o">=</span> <span class="n">ArxivQueryForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">query_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+            <span class="n">prefill_data</span> <span class="o">=</span> <span class="n">query_form</span><span class="o">.</span><span class="n">request_arxiv_preprint_form_prefill_data</span><span class="p">()</span>
+            <span class="n">form</span> <span class="o">=</span> <span class="n">RequestArxivPreprintForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">prefill_data</span><span class="p">)</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_arxiv_query</span><span class="p">,</span> <span class="n">fail_silently</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">form</span> <span class="o">=</span> <span class="n">RequestArxivPreprintForm</span><span class="p">()</span>
+
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+            <span class="s1">&#39;query_form&#39;</span><span class="p">:</span> <span class="n">query_form</span><span class="p">,</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/request_arxiv_preprint.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_commentary_requests&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="vet_commentary_requests"><a class="viewcode-back" href="../../apps/commentaries.html#commentaries.views.vet_commentary_requests">[docs]</a><span class="k">def</span> <span class="nf">vet_commentary_requests</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">commentary_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Show the first commentary thats awaiting vetting&quot;&quot;&quot;</span>
+    <span class="n">queryset</span> <span class="o">=</span> <span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">requested_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">commentary_id</span><span class="p">:</span>
+        <span class="c1"># Security fix: Smart asses can vet their own commentary without this line.</span>
+        <span class="n">commentary_to_vet</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">queryset</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">commentary_id</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">commentary_to_vet</span> <span class="o">=</span> <span class="n">queryset</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetCommentaryForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="n">commentary_id</span><span class="o">=</span><span class="n">commentary_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="c1"># Get commentary</span>
+        <span class="n">commentary</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get_commentary</span><span class="p">()</span>
+        <span class="n">email_context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;commentary&#39;</span><span class="p">:</span> <span class="n">commentary</span>
+        <span class="p">}</span>
+
+        <span class="c1"># Retrieve email_template for action</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">commentary_is_accepted</span><span class="p">():</span>
+            <span class="n">email_template</span> <span class="o">=</span> <span class="s1">&#39;commentaries/vet_commentary_email_accepted.html&#39;</span>
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">commentary_is_refused</span><span class="p">():</span>
+            <span class="n">email_template</span> <span class="o">=</span> <span class="s1">&#39;commentaries/vet_commentary_email_rejected.html&#39;</span>
+            <span class="n">email_context</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get_refusal_reason</span><span class="p">()</span>
+            <span class="n">email_context</span><span class="p">[</span><span class="s1">&#39;further_explanation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_response_field&#39;</span><span class="p">]</span>
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">commentary_is_modified</span><span class="p">():</span>
+            <span class="c1"># For a modified commentary, redirect to request_commentary_form</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;commentaries:modify_commentary_request&#39;</span><span class="p">,</span>
+                                    <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">commentary</span><span class="o">.</span><span class="n">id</span><span class="p">,)))</span>
+
+        <span class="c1"># Send email and process form</span>
+        <span class="n">email_text</span> <span class="o">=</span> <span class="n">render_to_string</span><span class="p">(</span><span class="n">email_template</span><span class="p">,</span> <span class="n">email_context</span><span class="p">)</span>
+        <span class="n">email_args</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="s1">&#39;SciPost Commentary Page activated&#39;</span><span class="p">,</span>
+            <span class="n">email_text</span><span class="p">,</span>
+            <span class="n">commentary</span><span class="o">.</span><span class="n">requested_by</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span>
+            <span class="p">[</span><span class="s1">&#39;commentaries@scipost.org&#39;</span><span class="p">]</span>
+        <span class="p">)</span>
+        <span class="n">emailmessage</span> <span class="o">=</span> <span class="n">EmailMessage</span><span class="p">(</span><span class="o">*</span><span class="n">email_args</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;commentaries@scipost.org&#39;</span><span class="p">])</span>
+        <span class="n">emailmessage</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">fail_silently</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">commentary</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">process_commentary</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;SciPost Commentary request vetted.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;commentaries:vet_commentary_requests&#39;</span><span class="p">))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;commentary_to_vet&#39;</span><span class="p">:</span> <span class="n">commentary_to_vet</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/vet_commentary_requests.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_commentary_requests&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="modify_commentary_request"><a class="viewcode-back" href="../../apps/commentaries.html#commentaries.views.modify_commentary_request">[docs]</a><span class="k">def</span> <span class="nf">modify_commentary_request</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">commentary_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;Modify a commentary request after vetting with status &#39;modified&#39;.&quot;&quot;&quot;</span>
+    <span class="n">commentary</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">((</span><span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span>
+                                    <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">requested_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)),</span>
+                                    <span class="nb">id</span><span class="o">=</span><span class="n">commentary_id</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">RequestCommentaryForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">commentary</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="c1"># Process commentary data</span>
+        <span class="n">commentary</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">commentary</span><span class="o">.</span><span class="n">vetted</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="n">commentary</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Send email and process form</span>
+        <span class="n">email_template</span> <span class="o">=</span> <span class="s1">&#39;commentaries/vet_commentary_email_modified.html&#39;</span>
+        <span class="n">email_text</span> <span class="o">=</span> <span class="n">render_to_string</span><span class="p">(</span><span class="n">email_template</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;commentary&#39;</span><span class="p">:</span> <span class="n">commentary</span><span class="p">})</span>
+        <span class="n">email_args</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="s1">&#39;SciPost Commentary Page activated&#39;</span><span class="p">,</span>
+            <span class="n">email_text</span><span class="p">,</span>
+            <span class="n">commentary</span><span class="o">.</span><span class="n">requested_by</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span>
+            <span class="p">[</span><span class="s1">&#39;commentaries@scipost.org&#39;</span><span class="p">]</span>
+        <span class="p">)</span>
+        <span class="n">emailmessage</span> <span class="o">=</span> <span class="n">EmailMessage</span><span class="p">(</span><span class="o">*</span><span class="n">email_args</span><span class="p">,</span> <span class="n">reply_to</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;commentaries@scipost.org&#39;</span><span class="p">])</span>
+        <span class="n">emailmessage</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">fail_silently</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;SciPost Commentary request modified and vetted.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;commentaries:vet_commentary_requests&#39;</span><span class="p">))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;commentary&#39;</span><span class="p">:</span> <span class="n">commentary</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/modify_commentary_request.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="k">class</span> <span class="nc">CommentaryListView</span><span class="p">(</span><span class="n">PaginationMixin</span><span class="p">,</span> <span class="n">ListView</span><span class="p">):</span>
+    <span class="n">model</span> <span class="o">=</span> <span class="n">Commentary</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentarySearchForm</span>
+    <span class="n">paginate_by</span> <span class="o">=</span> <span class="mi">10</span>
+    <span class="n">context_object_name</span> <span class="o">=</span> <span class="s1">&#39;commentary_list&#39;</span>
+
+    <span class="k">def</span> <span class="nf">get_queryset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&#39;&#39;&#39;Perform search form here already to get the right pagination numbers.&#39;&#39;&#39;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">form</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">has_changed</span><span class="p">():</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">search_results</span><span class="p">()</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-latest_activity&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="c1"># Call the base implementation first to get a context</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="c1"># Get newest comments</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;comment_list&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">)[:</span><span class="mi">10</span><span class="p">]</span>
+
+        <span class="c1"># Form into the context!</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span>
+
+        <span class="c1"># To customize display in the template</span>
+        <span class="k">if</span> <span class="s1">&#39;discipline&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">:</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;discipline&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;discipline&#39;</span><span class="p">]</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nrweeksback&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;nrweeksback&#39;</span><span class="p">]</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;browse&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="k">elif</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">[</span><span class="n">field</span><span class="p">]</span> <span class="k">for</span> <span class="n">field</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">):</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;recent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+
+        <span class="k">return</span> <span class="n">context</span>
+
+
+<span class="k">def</span> <span class="nf">commentary_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_or_DOI_string</span><span class="p">):</span>
+    <span class="n">commentary</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">(),</span>
+                                   <span class="n">arxiv_or_DOI_string</span><span class="o">=</span><span class="n">arxiv_or_DOI_string</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">()</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">author_replies</span> <span class="o">=</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">commentary</span><span class="o">=</span><span class="n">commentary</span><span class="p">,</span> <span class="n">is_author_reply</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">status__gte</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
+    <span class="k">except</span> <span class="n">Comment</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+        <span class="n">author_replies</span> <span class="o">=</span> <span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;commentary&#39;</span><span class="p">:</span> <span class="n">commentary</span><span class="p">,</span>
+               <span class="s1">&#39;author_replies&#39;</span><span class="p">:</span> <span class="n">author_replies</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/commentary_detail.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="comment_on_publication"><a class="viewcode-back" href="../../apps/commentaries.html#commentaries.views.comment_on_publication">[docs]</a><span class="k">def</span> <span class="nf">comment_on_publication</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This will let authors of an SciPost publication comment on their Publication by</span>
+<span class="sd">    automatically creating a Commentary page if not exist already.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(),</span>
+                                    <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">,</span> <span class="n">authors</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentSciPostPublication</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
+                                     <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span> <span class="n">current_user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">comment</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_request_commentary</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;commentaries/comment_on_publication.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/comments/models.html b/docs/codebase/_build/html/_modules/comments/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..488fcc69288cebd73924c9316be44d6739ecceac
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/comments/models.html
@@ -0,0 +1,447 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>comments.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>comments.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for comments.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.contrib.contenttypes.fields</span> <span class="k">import</span> <span class="n">GenericForeignKey</span><span class="p">,</span> <span class="n">GenericRelation</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.models</span> <span class="k">import</span> <span class="n">ContentType</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.utils.functional</span> <span class="k">import</span> <span class="n">cached_property</span>
+<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">reverse</span>
+
+<span class="kn">from</span> <span class="nn">guardian.shortcuts</span> <span class="k">import</span> <span class="n">assign_perm</span>
+
+<span class="kn">from</span> <span class="nn">scipost.behaviors</span> <span class="k">import</span> <span class="n">TimeStampedModel</span>
+<span class="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="n">Contributor</span>
+<span class="kn">from</span> <span class="nn">commentaries.constants</span> <span class="k">import</span> <span class="n">COMMENTARY_PUBLISHED</span>
+
+<span class="kn">from</span> <span class="nn">.behaviors</span> <span class="k">import</span> <span class="n">validate_file_extension</span><span class="p">,</span> <span class="n">validate_max_file_size</span>
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">COMMENT_STATUS</span><span class="p">,</span> <span class="n">STATUS_PENDING</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">CommentQuerySet</span>
+
+
+<span class="n">WARNING_TEXT</span> <span class="o">=</span> <span class="s1">&#39;Warning: Rather use/edit `content_object` instead or be 100</span><span class="si">% s</span><span class="s1">ure you know what you are doing!&#39;</span>
+<span class="n">US_NOTICE</span> <span class="o">=</span> <span class="s1">&#39;Warning: This field is out of service and will be removed in the future.&#39;</span>
+
+
+<div class="viewcode-block" id="Comment"><a class="viewcode-back" href="../../apps/comments.html#comments.models.Comment">[docs]</a><span class="k">class</span> <span class="nc">Comment</span><span class="p">(</span><span class="n">TimeStampedModel</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; A Comment is an unsollicited note, submitted by a Contributor,</span>
+<span class="sd">    on a particular publication or in reply to an earlier Comment. &quot;&quot;&quot;</span>
+
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">STATUS_PENDING</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">COMMENT_STATUS</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                  <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;comment_vetted_by&#39;</span><span class="p">)</span>
+    <span class="n">file_attachment</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">upload_to</span><span class="o">=</span><span class="s1">&#39;uploads/comments/%Y/%m/</span><span class="si">%d</span><span class="s1">/&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                       <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">validate_file_extension</span><span class="p">,</span> <span class="n">validate_max_file_size</span><span class="p">]</span>
+                                       <span class="p">)</span>
+
+    <span class="c1"># A Comment is always related to another model</span>
+    <span class="c1"># This construction implicitly has property: `on_delete=models.CASCADE`</span>
+    <span class="n">content_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">ContentType</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">WARNING_TEXT</span><span class="p">)</span>
+    <span class="n">object_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveIntegerField</span><span class="p">(</span><span class="n">help_text</span><span class="o">=</span><span class="n">WARNING_TEXT</span><span class="p">)</span>
+    <span class="n">content_object</span> <span class="o">=</span> <span class="n">GenericForeignKey</span><span class="p">()</span>
+
+    <span class="n">nested_comments</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;comments.Comment&#39;</span><span class="p">,</span> <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;comments&#39;</span><span class="p">)</span>
+
+    <span class="c1"># -- U/S</span>
+    <span class="c1"># These fields will be removed in the future.</span>
+    <span class="c1"># They still exists only to prevent possible data loss.</span>
+    <span class="n">commentary</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;commentaries.Commentary&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">US_NOTICE</span><span class="p">)</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;comments_old&#39;</span><span class="p">,</span>
+                                   <span class="n">help_text</span><span class="o">=</span><span class="n">US_NOTICE</span><span class="p">)</span>
+    <span class="n">thesislink</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;theses.ThesisLink&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">US_NOTICE</span><span class="p">)</span>
+    <span class="n">in_reply_to_comment</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;nested_comments_old&quot;</span><span class="p">,</span>
+                                            <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">US_NOTICE</span><span class="p">)</span>
+    <span class="n">in_reply_to_report</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Report&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                           <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="n">US_NOTICE</span><span class="p">)</span>
+    <span class="c1"># -- End U/S</span>
+
+    <span class="c1"># Author info</span>
+    <span class="n">is_author_reply</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">author</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                               <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;comments&#39;</span><span class="p">)</span>
+    <span class="n">anonymous</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;Publish anonymously&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Categories:</span>
+    <span class="n">is_cor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;correction/erratum&#39;</span><span class="p">)</span>
+    <span class="n">is_rem</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;remark&#39;</span><span class="p">)</span>
+    <span class="n">is_que</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;question&#39;</span><span class="p">)</span>
+    <span class="n">is_ans</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;answer to question&#39;</span><span class="p">)</span>
+    <span class="n">is_obj</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;objection&#39;</span><span class="p">)</span>
+    <span class="n">is_rep</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;reply to objection&#39;</span><span class="p">)</span>
+    <span class="n">is_val</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;validation or rederivation&#39;</span><span class="p">)</span>
+    <span class="n">is_lit</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;pointer to related literature&#39;</span><span class="p">)</span>
+    <span class="n">is_sug</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;suggestion for further work&#39;</span><span class="p">)</span>
+    <span class="n">comment_text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+    <span class="n">remarks_for_editors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                           <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;optional remarks for the Editors only&#39;</span><span class="p">)</span>
+    <span class="n">date_submitted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="s1">&#39;date submitted&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="c1"># Opinions</span>
+    <span class="n">nr_A</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">in_agreement</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;in_agreement&#39;</span><span class="p">,</span>
+                                          <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">nr_N</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">in_notsure</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;in_notsure&#39;</span><span class="p">,</span>
+                                        <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">nr_D</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">in_disagreement</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;in_disagreement&#39;</span><span class="p">,</span>
+                                             <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">needs_doi</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+    <span class="n">doideposit_needs_updating</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">genericdoideposit</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;journals.GenericDOIDeposit&#39;</span><span class="p">,</span>
+                                        <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;genericdoideposit&#39;</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">CommentQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">permissions</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="p">(</span><span class="s1">&#39;can_vet_comments&#39;</span><span class="p">,</span> <span class="s1">&#39;Can vet submitted Comments&#39;</span><span class="p">),</span>
+        <span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="s1">&#39;by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span>
+                <span class="s1">&#39; on &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">comment_text</span><span class="p">[:</span><span class="mi">30</span><span class="p">])</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">title</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        This property is (mainly) used to let Comments get the title of the Submission without</span>
+<span class="sd">        annoying logic.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">title</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_type</span>
+
+    <span class="nd">@cached_property</span>
+    <span class="k">def</span> <span class="nf">core_content_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c1"># Import here due to circular import errors</span>
+        <span class="kn">from</span> <span class="nn">commentaries.models</span> <span class="k">import</span> <span class="n">Commentary</span>
+        <span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span><span class="p">,</span> <span class="n">Report</span>
+        <span class="kn">from</span> <span class="nn">theses.models</span> <span class="k">import</span> <span class="n">ThesisLink</span>
+
+        <span class="n">to_object</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_object</span>
+        <span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
+            <span class="k">if</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Commentary</span><span class="p">)</span> <span class="ow">or</span>
+               <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">ThesisLink</span><span class="p">)):</span>
+                <span class="k">return</span> <span class="n">to_object</span>
+            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Report</span><span class="p">):</span>
+                <span class="k">return</span> <span class="n">to_object</span><span class="o">.</span><span class="n">submission</span>
+            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Comment</span><span class="p">):</span>
+                <span class="c1"># Nested Comment.</span>
+                <span class="n">to_object</span> <span class="o">=</span> <span class="n">to_object</span><span class="o">.</span><span class="n">content_object</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">raise</span> <span class="ne">Exception</span>
+
+    <span class="k">def</span> <span class="nf">create_doi_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span> <span class="o">=</span> <span class="s1">&#39;SciPost.Comment.&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span><span class="p">:</span>
+            <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">()</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;#&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;#comment_id&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_attachment_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;comments:attachment&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,))</span>
+
+    <span class="k">def</span> <span class="nf">grant_permissions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c1"># Import here due to circular import errors</span>
+        <span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span>
+
+        <span class="n">to_object</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">core_content_object</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">):</span>
+            <span class="c1"># Add permissions for EIC only, the Vetting-group already has it!</span>
+            <span class="n">assign_perm</span><span class="p">(</span><span class="s1">&#39;comments.can_vet_comments&#39;</span><span class="p">,</span> <span class="n">to_object</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
+
+<div class="viewcode-block" id="Comment.get_author"><a class="viewcode-back" href="../../apps/comments.html#comments.models.Comment.get_author">[docs]</a>    <span class="k">def</span> <span class="nf">get_author</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&#39;&#39;&#39;Get author, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymous</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span>
+        <span class="k">return</span> <span class="kc">None</span></div>
+
+<div class="viewcode-block" id="Comment.get_author_str"><a class="viewcode-back" href="../../apps/comments.html#comments.models.Comment.get_author_str">[docs]</a>    <span class="k">def</span> <span class="nf">get_author_str</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&#39;&#39;&#39;Get author string, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>
+        <span class="n">author</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_author</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">author</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span>
+        <span class="k">return</span> <span class="s1">&#39;Anonymous&#39;</span></div>
+
+    <span class="k">def</span> <span class="nf">update_opinions</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">,</span> <span class="n">opinion</span><span class="p">):</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">in_agreement</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">in_notsure</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">in_disagreement</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">opinion</span> <span class="o">==</span> <span class="s1">&#39;A&#39;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">in_agreement</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">opinion</span> <span class="o">==</span> <span class="s1">&#39;N&#39;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">in_notsure</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">opinion</span> <span class="o">==</span> <span class="s1">&#39;D&#39;</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">in_disagreement</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">nr_A</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_agreement</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">nr_N</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_notsure</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">nr_D</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">in_disagreement</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">relation_to_published</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if the Comment relates to a SciPost-published object.</span>
+<span class="sd">        If it is, return a dict with info on relation to the published object,</span>
+<span class="sd">        based on Crossref&#39;s peer review content type.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="c1"># Import here due to circular import errors</span>
+        <span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span>
+        <span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">Publication</span>
+        <span class="kn">from</span> <span class="nn">commentaries.models</span> <span class="k">import</span> <span class="n">Commentary</span>
+
+        <span class="n">to_object</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">core_content_object</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">):</span>
+            <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="n">to_object</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">publication</span><span class="p">:</span>
+                <span class="n">relation</span> <span class="o">=</span> <span class="p">{</span>
+                    <span class="s1">&#39;isReviewOfDOI&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span>
+                    <span class="s1">&#39;stage&#39;</span><span class="p">:</span> <span class="s1">&#39;pre-publication&#39;</span><span class="p">,</span>
+                    <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="s1">&#39;Comment on &#39;</span> <span class="o">+</span> <span class="n">to_object</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span>
+                <span class="p">}</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_author_reply</span><span class="p">:</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;author-comment&#39;</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;community-comment&#39;</span>
+                <span class="k">return</span> <span class="n">relation</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">to_object</span><span class="p">,</span> <span class="n">Commentary</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">to_object</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">COMMENTARY_PUBLISHED</span><span class="p">:</span>
+                <span class="n">relation</span> <span class="o">=</span> <span class="p">{</span>
+                    <span class="s1">&#39;isReviewOfDOI&#39;</span><span class="p">:</span> <span class="n">to_object</span><span class="o">.</span><span class="n">pub_doi</span><span class="p">,</span>
+                    <span class="s1">&#39;stage&#39;</span><span class="p">:</span> <span class="s1">&#39;post-publication&#39;</span><span class="p">,</span>
+                    <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="s1">&#39;Comment on &#39;</span> <span class="o">+</span> <span class="n">to_object</span><span class="o">.</span><span class="n">pub_doi</span><span class="p">,</span>
+                <span class="p">}</span>
+                <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_author_reply</span><span class="p">:</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;author-comment&#39;</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;contributor_role&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;author&#39;</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;community-comment&#39;</span>
+                    <span class="n">relation</span><span class="p">[</span><span class="s1">&#39;contributor_role&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;reviewer-external&#39;</span>
+                <span class="k">return</span> <span class="n">relation</span>
+
+        <span class="k">return</span> <span class="kc">None</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">citation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">citation</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_string</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymous</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;Anonymous, &#39;</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">, &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_author_reply</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;SciPost Author Replies, &#39;</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;SciPost Comments, &#39;</span>
+            <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;Delivered </span><span class="si">%s</span><span class="s1">, &#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;doi: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_string</span>
+        <span class="k">return</span> <span class="n">citation</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/comments/views.html b/docs/codebase/_build/html/_modules/comments/views.html
new file mode 100644
index 0000000000000000000000000000000000000000..bf7cd98b4c907be2e14b888e7641cb98774e4f92
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/comments/views.html
@@ -0,0 +1,419 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>comments.views &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>comments.views</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for comments.views</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.contrib.auth.decorators</span> <span class="k">import</span> <span class="n">permission_required</span><span class="p">,</span> <span class="n">login_required</span>
+<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">messages</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">transaction</span>
+<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">HttpResponse</span><span class="p">,</span> <span class="n">Http404</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span><span class="p">,</span> <span class="n">render</span><span class="p">,</span> <span class="n">redirect</span>
+
+<span class="kn">from</span> <span class="nn">guardian.shortcuts</span> <span class="k">import</span> <span class="n">get_objects_for_user</span>
+<span class="kn">import</span> <span class="nn">strings</span>
+
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">EXTENTIONS_IMAGES</span><span class="p">,</span> <span class="n">EXTENTIONS_PDF</span>
+<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="n">Comment</span>
+<span class="kn">from</span> <span class="nn">.forms</span> <span class="k">import</span> <span class="n">CommentForm</span><span class="p">,</span> <span class="n">VetCommentForm</span>
+<span class="kn">from</span> <span class="nn">.utils</span> <span class="k">import</span> <span class="n">CommentUtils</span><span class="p">,</span> <span class="n">validate_file_extention</span>
+
+<span class="kn">from</span> <span class="nn">theses.models</span> <span class="k">import</span> <span class="n">ThesisLink</span>
+<span class="kn">from</span> <span class="nn">submissions.utils</span> <span class="k">import</span> <span class="n">SubmissionUtils</span>
+<span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span><span class="p">,</span> <span class="n">Report</span>
+<span class="kn">from</span> <span class="nn">commentaries.models</span> <span class="k">import</span> <span class="n">Commentary</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">new_comment</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">object_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;object_id&quot;</span><span class="p">])</span>
+        <span class="n">type_of_object</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;type_of_object&quot;</span><span class="p">]</span>
+
+        <span class="k">if</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s2">&quot;thesislink&quot;</span><span class="p">:</span>
+            <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">ThesisLink</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open_for_commenting</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s2">&quot;submission&quot;</span><span class="p">:</span>
+            <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open_for_commenting</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+            <span class="n">_object</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;A new comment has been added.&#39;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s2">&quot;commentary&quot;</span><span class="p">:</span>
+            <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open_for_commenting</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+
+        <span class="n">new_comment</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">new_comment</span><span class="o">.</span><span class="n">author</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+        <span class="n">new_comment</span><span class="o">.</span><span class="n">content_object</span> <span class="o">=</span> <span class="n">_object</span>
+        <span class="n">new_comment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">new_comment</span><span class="o">.</span><span class="n">grant_permissions</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_submit_comment</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span><span class="p">(</span><span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;comments/add_comment.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">vet_submitted_comments_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">comments_to_vet</span> <span class="o">=</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;date_submitted&#39;</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetCommentForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;comments_to_vet&#39;</span><span class="p">:</span> <span class="n">comments_to_vet</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span><span class="p">(</span><span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;comments/vet_submitted_comments.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">))</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<span class="k">def</span> <span class="nf">vet_submitted_comment</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">comment_id</span><span class="p">):</span>
+    <span class="c1"># Method `get_objects_for_user` gets all Comments that are assigned to the user</span>
+    <span class="c1"># or *all* comments if user has the `scipost.can_vet_comments` permission.</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">((</span><span class="n">get_objects_for_user</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="s1">&#39;comments.can_vet_comments&#39;</span><span class="p">)</span>
+                                 <span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()),</span>
+                                <span class="nb">id</span><span class="o">=</span><span class="n">comment_id</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetCommentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;action_option&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+            <span class="c1"># Accept the comment as is</span>
+            <span class="n">comment</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="mi">1</span>
+            <span class="n">comment</span><span class="o">.</span><span class="n">vetted_by</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+            <span class="n">comment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+            <span class="c1"># Send emails</span>
+            <span class="n">CommentUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;comment&#39;</span><span class="p">:</span> <span class="n">comment</span><span class="p">})</span>
+            <span class="n">CommentUtils</span><span class="o">.</span><span class="n">email_comment_vet_accepted_to_author</span><span class="p">()</span>
+
+            <span class="c1"># Update `latest_activity` fields</span>
+            <span class="n">content_object</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span>
+            <span class="n">content_object</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+            <span class="n">content_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">):</span>
+                <span class="c1"># Add events to Submission and send mail to author of the Submission</span>
+                <span class="n">content_object</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;A Comment has been accepted.&#39;</span><span class="p">)</span>
+                <span class="n">content_object</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A new Comment has been added.&#39;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">comment</span><span class="o">.</span><span class="n">is_author_reply</span><span class="p">:</span>
+                    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">content_object</span><span class="p">})</span>
+                    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_comment_received_email</span><span class="p">()</span>
+            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Report</span><span class="p">):</span>
+                <span class="c1"># Add events to related Submission and send mail to author of the Submission</span>
+                <span class="n">content_object</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;A Comment has been accepted.&#39;</span><span class="p">)</span>
+                <span class="n">content_object</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A new Comment has been added.&#39;</span><span class="p">)</span>
+                <span class="k">if</span> <span class="ow">not</span> <span class="n">comment</span><span class="o">.</span><span class="n">is_author_reply</span><span class="p">:</span>
+                    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">content_object</span><span class="o">.</span><span class="n">submission</span><span class="p">})</span>
+                    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_comment_received_email</span><span class="p">()</span>
+
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;action_option&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;2&#39;</span><span class="p">:</span>
+            <span class="c1"># The comment request is simply rejected</span>
+            <span class="n">comment</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">])</span>
+            <span class="k">if</span> <span class="n">comment</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
+                <span class="n">comment</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>  <span class="c1"># Why&#39;s this here??</span>
+            <span class="n">comment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+            <span class="c1"># Send emails</span>
+            <span class="n">CommentUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;comment&#39;</span><span class="p">:</span> <span class="n">comment</span><span class="p">})</span>
+            <span class="n">CommentUtils</span><span class="o">.</span><span class="n">email_comment_vet_rejected_to_author</span><span class="p">(</span>
+                <span class="n">email_response</span><span class="o">=</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_response_field&#39;</span><span class="p">])</span>
+
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">):</span>
+                <span class="c1"># Add event if commented to Submission</span>
+                <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;A Comment has been rejected.&#39;</span><span class="p">)</span>
+            <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Report</span><span class="p">):</span>
+                <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;A Comment has been rejected.&#39;</span><span class="p">)</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Submitted Comment vetted.&#39;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">):</span>
+            <span class="n">submission</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span>
+            <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">==</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+                <span class="c1"># Redirect a EIC back to the Editorial Page!</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                        <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,)))</span>
+        <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="p">,</span> <span class="n">Report</span><span class="p">):</span>
+            <span class="n">submission</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">submission</span>
+            <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">==</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+                <span class="c1"># Redirect a EIC back to the Editorial Page!</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                        <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,)))</span>
+        <span class="k">elif</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">has_perm</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_comments&#39;</span><span class="p">):</span>
+            <span class="c1"># Redirect vetters back to check for other unvetted comments!</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;comments:vet_submitted_comments_list&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;comment&#39;</span><span class="p">:</span> <span class="n">comment</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span><span class="p">(</span><span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;comments/vet_submitted_comment.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">reply_to_comment</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">comment_id</span><span class="p">):</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">comment_id</span><span class="p">)</span>
+
+    <span class="c1"># Verify if this is from an author:</span>
+    <span class="n">related_object</span> <span class="o">=</span> <span class="n">comment</span><span class="o">.</span><span class="n">content_object</span>
+    <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">related_object</span><span class="p">,</span> <span class="n">Submission</span><span class="p">)</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">related_object</span><span class="p">,</span> <span class="n">Commentary</span><span class="p">):</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="n">related_object</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">id</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+    <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">related_object</span><span class="p">,</span> <span class="n">Report</span><span class="p">):</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="n">related_object</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="nb">id</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">id</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+    <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">related_object</span><span class="p">,</span> <span class="n">ThesisLink</span><span class="p">):</span>
+        <span class="c1"># ThesisLink</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="n">related_object</span><span class="o">.</span><span class="n">author</span> <span class="o">==</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># No idea what this could be, but just to be sure</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="n">related_object</span><span class="o">.</span><span class="n">author</span> <span class="o">==</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">newcomment</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">content_object</span> <span class="o">=</span> <span class="n">comment</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">is_author_reply</span> <span class="o">=</span> <span class="n">is_author</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">author</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">grant_permissions</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>
+                                  <span class="s1">&#39;It will soon be vetted by an Editor.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">newcomment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;comment&#39;</span><span class="p">:</span> <span class="n">comment</span><span class="p">,</span> <span class="s1">&#39;is_author&#39;</span><span class="p">:</span> <span class="n">is_author</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;comments/reply_to_comment.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">reply_to_report</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">report_id</span><span class="p">):</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">report_id</span><span class="p">)</span>
+
+    <span class="c1"># Verify if this is from an author:</span>
+    <span class="n">is_author</span> <span class="o">=</span> <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">is_report_comment</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">newcomment</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">content_object</span> <span class="o">=</span> <span class="n">report</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">is_author_reply</span> <span class="o">=</span> <span class="n">is_author</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">author</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">newcomment</span><span class="o">.</span><span class="n">grant_permissions</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>
+                                  <span class="s1">&#39;It will soon be vetted by an Editor.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">newcomment</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span> <span class="s1">&#39;is_author&#39;</span><span class="p">:</span> <span class="n">is_author</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;comments/reply_to_report.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_express_opinion_on_comments&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">express_opinion</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">comment_id</span><span class="p">,</span> <span class="n">opinion</span><span class="p">):</span>
+    <span class="c1"># A contributor has expressed an opinion on a comment</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">comment_id</span><span class="p">)</span>
+    <span class="n">comment</span><span class="o">.</span><span class="n">update_opinions</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">opinion</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+
+<div class="viewcode-block" id="attachment"><a class="viewcode-back" href="../../apps/comments.html#comments.views.attachment">[docs]</a><span class="k">def</span> <span class="nf">attachment</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">comment_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Open/read attachment of Comment if available.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">file_attachment</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">),</span> <span class="n">pk</span><span class="o">=</span><span class="n">comment_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">validate_file_extention</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">file_attachment</span><span class="p">,</span> <span class="n">EXTENTIONS_IMAGES</span><span class="p">):</span>
+        <span class="n">content_type</span> <span class="o">=</span> <span class="s1">&#39;image/jpeg&#39;</span>
+    <span class="k">elif</span> <span class="n">validate_file_extention</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">file_attachment</span><span class="p">,</span> <span class="n">EXTENTIONS_PDF</span><span class="p">):</span>
+        <span class="n">content_type</span> <span class="o">=</span> <span class="s1">&#39;application/pdf&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="n">response</span> <span class="o">=</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">file_attachment</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">content_type</span><span class="o">=</span><span class="n">content_type</span><span class="p">)</span>
+    <span class="n">filename</span> <span class="o">=</span> <span class="s1">&#39;comment-attachment-</span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="n">comment</span><span class="o">.</span><span class="n">file_attachment</span><span class="o">.</span><span class="n">name</span>
+    <span class="n">response</span><span class="p">[</span><span class="s1">&#39;Content-Disposition&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;filename=&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">response</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/django/utils/functional.html b/docs/codebase/_build/html/_modules/django/utils/functional.html
new file mode 100644
index 0000000000000000000000000000000000000000..c4fdf9f2815928ed6ad78853daecb36e24c0edbf
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/django/utils/functional.html
@@ -0,0 +1,622 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>django.utils.functional &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../../genindex.html"/>
+        <link rel="search" title="Search" href="../../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../../index.html"/>
+        <link rel="up" title="Module code" href="../../index.html"/> 
+
+  
+  <script src="../../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../../index.html">Module code</a> &raquo;</li>
+      
+    <li>django.utils.functional</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for django.utils.functional</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">copy</span>
+<span class="kn">import</span> <span class="nn">operator</span>
+<span class="kn">import</span> <span class="nn">warnings</span>
+<span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">total_ordering</span><span class="p">,</span> <span class="n">wraps</span>
+
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">six</span>
+<span class="kn">from</span> <span class="nn">django.utils.deprecation</span> <span class="k">import</span> <span class="n">RemovedInDjango20Warning</span>
+
+
+<span class="c1"># You can&#39;t trivially replace this with `functools.partial` because this binds</span>
+<span class="c1"># to classes and returns bound instances, whereas functools.partial (on</span>
+<span class="c1"># CPython) is a type and its instances don&#39;t bind.</span>
+<span class="k">def</span> <span class="nf">curry</span><span class="p">(</span><span class="n">_curried_func</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">_curried</span><span class="p">(</span><span class="o">*</span><span class="n">moreargs</span><span class="p">,</span> <span class="o">**</span><span class="n">morekwargs</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">_curried_func</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">args</span> <span class="o">+</span> <span class="n">moreargs</span><span class="p">),</span> <span class="o">**</span><span class="nb">dict</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="o">**</span><span class="n">morekwargs</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">_curried</span>
+
+
+<span class="k">class</span> <span class="nc">cached_property</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Decorator that converts a method with a single self argument into a</span>
+<span class="sd">    property cached on the instance.</span>
+
+<span class="sd">    Optional ``name`` argument allows you to make cached properties of other</span>
+<span class="sd">    methods. (e.g.  url = cached_property(get_absolute_url, name=&#39;url&#39;) )</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">func</span> <span class="o">=</span> <span class="n">func</span>
+        <span class="bp">self</span><span class="o">.</span><span class="vm">__doc__</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="s1">&#39;__doc__&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">name</span> <span class="ow">or</span> <span class="n">func</span><span class="o">.</span><span class="vm">__name__</span>
+
+    <span class="k">def</span> <span class="nf">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="bp">cls</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">instance</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span>
+        <span class="n">res</span> <span class="o">=</span> <span class="n">instance</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">func</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">res</span>
+
+
+<span class="k">class</span> <span class="nc">Promise</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This is just a base class for the proxy class created in</span>
+<span class="sd">    the closure of the lazy function. It can be used to recognize</span>
+<span class="sd">    promises in code.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">pass</span>
+
+
+<span class="k">def</span> <span class="nf">lazy</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">resultclasses</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Turns any callable into a lazy evaluated callable. You need to give result</span>
+<span class="sd">    classes or types -- at least one is needed so that the automatic forcing of</span>
+<span class="sd">    the lazy evaluation code is triggered. Results are not memoized; the</span>
+<span class="sd">    function is evaluated on every access.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="nd">@total_ordering</span>
+    <span class="k">class</span> <span class="nc">__proxy__</span><span class="p">(</span><span class="n">Promise</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Encapsulate a function call and act as a proxy for methods that are</span>
+<span class="sd">        called on the result of that function. The function is not evaluated</span>
+<span class="sd">        until one of the methods on the result is called.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">__prepared</span> <span class="o">=</span> <span class="kc">False</span>
+
+        <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kw</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">__args</span> <span class="o">=</span> <span class="n">args</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">__kw</span> <span class="o">=</span> <span class="n">kw</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">__prepared</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">__prepare_class__</span><span class="p">()</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">__prepared</span> <span class="o">=</span> <span class="kc">True</span>
+
+        <span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="p">(</span>
+                <span class="n">_lazy_proxy_unpickle</span><span class="p">,</span>
+                <span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">)</span> <span class="o">+</span> <span class="n">resultclasses</span>
+            <span class="p">)</span>
+
+        <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">())</span>
+
+        <span class="nd">@classmethod</span>
+        <span class="k">def</span> <span class="nf">__prepare_class__</span><span class="p">(</span><span class="bp">cls</span><span class="p">):</span>
+            <span class="k">for</span> <span class="n">resultclass</span> <span class="ow">in</span> <span class="n">resultclasses</span><span class="p">:</span>
+                <span class="k">for</span> <span class="n">type_</span> <span class="ow">in</span> <span class="n">resultclass</span><span class="o">.</span><span class="n">mro</span><span class="p">():</span>
+                    <span class="k">for</span> <span class="n">method_name</span> <span class="ow">in</span> <span class="n">type_</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+                        <span class="c1"># All __promise__ return the same wrapper method, they</span>
+                        <span class="c1"># look up the correct implementation when called.</span>
+                        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">method_name</span><span class="p">):</span>
+                            <span class="k">continue</span>
+                        <span class="n">meth</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__promise__</span><span class="p">(</span><span class="n">method_name</span><span class="p">)</span>
+                        <span class="nb">setattr</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">method_name</span><span class="p">,</span> <span class="n">meth</span><span class="p">)</span>
+            <span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_bytes</span> <span class="o">=</span> <span class="nb">bytes</span> <span class="ow">in</span> <span class="n">resultclasses</span>
+            <span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_text</span> <span class="o">=</span> <span class="n">six</span><span class="o">.</span><span class="n">text_type</span> <span class="ow">in</span> <span class="n">resultclasses</span>
+            <span class="k">assert</span> <span class="ow">not</span> <span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_bytes</span> <span class="ow">and</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_text</span><span class="p">),</span> <span class="p">(</span>
+                <span class="s2">&quot;Cannot call lazy() with both bytes and text return types.&quot;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_text</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">six</span><span class="o">.</span><span class="n">PY3</span><span class="p">:</span>
+                    <span class="bp">cls</span><span class="o">.</span><span class="fm">__str__</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__text_cast</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="bp">cls</span><span class="o">.</span><span class="n">__unicode__</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__text_cast</span>
+                    <span class="bp">cls</span><span class="o">.</span><span class="fm">__str__</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__bytes_cast_encoded</span>
+            <span class="k">elif</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_delegate_bytes</span><span class="p">:</span>
+                <span class="k">if</span> <span class="n">six</span><span class="o">.</span><span class="n">PY3</span><span class="p">:</span>
+                    <span class="bp">cls</span><span class="o">.</span><span class="fm">__bytes__</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__bytes_cast</span>
+                <span class="k">else</span><span class="p">:</span>
+                    <span class="bp">cls</span><span class="o">.</span><span class="fm">__str__</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">__bytes_cast</span>
+
+        <span class="nd">@classmethod</span>
+        <span class="k">def</span> <span class="nf">__promise__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">method_name</span><span class="p">):</span>
+            <span class="c1"># Builds a wrapper around some magic method</span>
+            <span class="k">def</span> <span class="nf">__wrapper__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+                <span class="c1"># Automatically triggers the evaluation of a lazy value and</span>
+                <span class="c1"># applies the given magic method of the result type.</span>
+                <span class="n">res</span> <span class="o">=</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">)</span>
+                <span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="n">method_name</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">__wrapper__</span>
+
+        <span class="k">def</span> <span class="nf">__text_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">)</span>
+
+        <span class="k">def</span> <span class="nf">__bytes_cast</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">))</span>
+
+        <span class="k">def</span> <span class="nf">__bytes_cast_encoded</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
+
+        <span class="k">def</span> <span class="nf">__cast</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delegate_bytes</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__bytes_cast</span><span class="p">()</span>
+            <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delegate_text</span><span class="p">:</span>
+                <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__text_cast</span><span class="p">()</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">__args</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">__kw</span><span class="p">)</span>
+
+        <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="c1"># object defines __str__(), so __prepare_class__() won&#39;t overload</span>
+            <span class="c1"># a __str__() method from the proxied class.</span>
+            <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">())</span>
+
+        <span class="k">def</span> <span class="nf">__ne__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Promise</span><span class="p">):</span>
+                <span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span> <span class="o">!=</span> <span class="n">other</span>
+
+        <span class="k">def</span> <span class="nf">__eq__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Promise</span><span class="p">):</span>
+                <span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span> <span class="o">==</span> <span class="n">other</span>
+
+        <span class="k">def</span> <span class="nf">__lt__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
+            <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="n">Promise</span><span class="p">):</span>
+                <span class="n">other</span> <span class="o">=</span> <span class="n">other</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span> <span class="o">&lt;</span> <span class="n">other</span>
+
+        <span class="k">def</span> <span class="nf">__hash__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+            <span class="k">return</span> <span class="nb">hash</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">())</span>
+
+        <span class="k">def</span> <span class="nf">__mod__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rhs</span><span class="p">):</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delegate_bytes</span> <span class="ow">and</span> <span class="n">six</span><span class="o">.</span><span class="n">PY2</span><span class="p">:</span>
+                <span class="k">return</span> <span class="nb">bytes</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">%</span> <span class="n">rhs</span>
+            <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_delegate_text</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">%</span> <span class="n">rhs</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">__cast</span><span class="p">()</span> <span class="o">%</span> <span class="n">rhs</span>
+
+        <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span>
+            <span class="c1"># Instances of this class are effectively immutable. It&#39;s just a</span>
+            <span class="c1"># collection of functions. So we don&#39;t need to do anything</span>
+            <span class="c1"># complicated for copying.</span>
+            <span class="n">memo</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)]</span> <span class="o">=</span> <span class="bp">self</span>
+            <span class="k">return</span> <span class="bp">self</span>
+
+    <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+    <span class="k">def</span> <span class="nf">__wrapper__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
+        <span class="c1"># Creates the proxy object, instead of the actual value.</span>
+        <span class="k">return</span> <span class="n">__proxy__</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">kw</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">__wrapper__</span>
+
+
+<span class="k">def</span> <span class="nf">_lazy_proxy_unpickle</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">,</span> <span class="o">*</span><span class="n">resultclasses</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">lazy</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">resultclasses</span><span class="p">)(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">lazystr</span><span class="p">(</span><span class="n">text</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Shortcut for the common case of a lazy callable that returns str.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="kn">from</span> <span class="nn">django.utils.encoding</span> <span class="k">import</span> <span class="n">force_text</span>  <span class="c1"># Avoid circular import</span>
+    <span class="k">return</span> <span class="n">lazy</span><span class="p">(</span><span class="n">force_text</span><span class="p">,</span> <span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">)(</span><span class="n">text</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">allow_lazy</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">resultclasses</span><span class="p">):</span>
+    <span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
+        <span class="s2">&quot;django.utils.functional.allow_lazy() is deprecated in favor of &quot;</span>
+        <span class="s2">&quot;django.utils.functional.keep_lazy()&quot;</span><span class="p">,</span>
+        <span class="n">RemovedInDjango20Warning</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">keep_lazy</span><span class="p">(</span><span class="o">*</span><span class="n">resultclasses</span><span class="p">)(</span><span class="n">func</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">keep_lazy</span><span class="p">(</span><span class="o">*</span><span class="n">resultclasses</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A decorator that allows a function to be called with one or more lazy</span>
+<span class="sd">    arguments. If none of the args are lazy, the function is evaluated</span>
+<span class="sd">    immediately, otherwise a __proxy__ is returned that will evaluate the</span>
+<span class="sd">    function when needed.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">resultclasses</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;You must pass at least one argument to keep_lazy().&quot;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
+        <span class="n">lazy_func</span> <span class="o">=</span> <span class="n">lazy</span><span class="p">(</span><span class="n">func</span><span class="p">,</span> <span class="o">*</span><span class="n">resultclasses</span><span class="p">)</span>
+
+        <span class="nd">@wraps</span><span class="p">(</span><span class="n">func</span><span class="p">)</span>
+        <span class="k">def</span> <span class="nf">wrapper</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+            <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="nb">list</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">+</span> <span class="nb">list</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">itervalues</span><span class="p">(</span><span class="n">kwargs</span><span class="p">)):</span>
+                <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">arg</span><span class="p">,</span> <span class="n">Promise</span><span class="p">):</span>
+                    <span class="k">break</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">lazy_func</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">wrapper</span>
+    <span class="k">return</span> <span class="n">decorator</span>
+
+
+<span class="k">def</span> <span class="nf">keep_lazy_text</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A decorator for functions that accept lazy arguments and return text.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">keep_lazy</span><span class="p">(</span><span class="n">six</span><span class="o">.</span><span class="n">text_type</span><span class="p">)(</span><span class="n">func</span><span class="p">)</span>
+
+
+<span class="n">empty</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
+
+
+<span class="k">def</span> <span class="nf">new_method_proxy</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
+    <span class="k">def</span> <span class="nf">inner</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">func</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">inner</span>
+
+
+<span class="k">class</span> <span class="nc">LazyObject</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A wrapper for another class that can be used to delay instantiation of the</span>
+<span class="sd">    wrapped class.</span>
+
+<span class="sd">    By subclassing, you have the opportunity to intercept and alter the</span>
+<span class="sd">    instantiation. If you don&#39;t need to do that, use SimpleLazyObject.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+
+    <span class="c1"># Avoid infinite recursion when tracing __init__ (#19456).</span>
+    <span class="n">_wrapped</span> <span class="o">=</span> <span class="kc">None</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c1"># Note: if a subclass overrides __init__(), it will likely need to</span>
+        <span class="c1"># override __copy__() and __deepcopy__() as well.</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="o">=</span> <span class="n">empty</span>
+
+    <span class="fm">__getattr__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">getattr</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__setattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;_wrapped&quot;</span><span class="p">:</span>
+            <span class="c1"># Assign to __dict__ to avoid infinite __setattr__ loops.</span>
+            <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s2">&quot;_wrapped&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">()</span>
+            <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__delattr__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
+        <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">&quot;_wrapped&quot;</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="ne">TypeError</span><span class="p">(</span><span class="s2">&quot;can&#39;t delete _wrapped.&quot;</span><span class="p">)</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">()</span>
+        <span class="nb">delattr</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,</span> <span class="n">name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Must be implemented by subclasses to initialize the wrapped object.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">raise</span> <span class="ne">NotImplementedError</span><span class="p">(</span><span class="s1">&#39;subclasses of LazyObject must provide a _setup() method&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Because we have messed with __class__ below, we confuse pickle as to what</span>
+    <span class="c1"># class we are pickling. We&#39;re going to have to initialize the wrapped</span>
+    <span class="c1"># object to successfully pickle it, so we might as well just pickle the</span>
+    <span class="c1"># wrapped object since they&#39;re supposed to act the same way.</span>
+    <span class="c1">#</span>
+    <span class="c1"># Unfortunately, if we try to simply act like the wrapped object, the ruse</span>
+    <span class="c1"># will break down when pickle gets our id(). Thus we end up with pickle</span>
+    <span class="c1"># thinking, in effect, that we are a distinct object from the wrapped</span>
+    <span class="c1"># object, but with the same __dict__. This can cause problems (see #25389).</span>
+    <span class="c1">#</span>
+    <span class="c1"># So instead, we define our own __reduce__ method and custom unpickler. We</span>
+    <span class="c1"># pickle the wrapped object as the unpickler&#39;s argument, so that pickle</span>
+    <span class="c1"># will pickle it normally, and then the unpickler simply returns its</span>
+    <span class="c1"># argument.</span>
+    <span class="k">def</span> <span class="nf">__reduce__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">()</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">unpickle_lazyobject</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,))</span>
+
+    <span class="c1"># Overriding __class__ stops __reduce__ from being called on Python 2.</span>
+    <span class="c1"># So, define __getstate__ in a way that cooperates with the way that</span>
+    <span class="c1"># pickle interprets this class. This fails when the wrapped class is a</span>
+    <span class="c1"># builtin, but it&#39;s better than nothing.</span>
+    <span class="k">def</span> <span class="nf">__getstate__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">_setup</span><span class="p">()</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="o">.</span><span class="vm">__dict__</span>
+
+    <span class="k">def</span> <span class="nf">__copy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="c1"># If uninitialized, copy the wrapper. Use type(self), not</span>
+            <span class="c1"># self.__class__, because the latter is proxied.</span>
+            <span class="k">return</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c1"># If initialized, return a copy of the wrapped object.</span>
+            <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="c1"># We have to use type(self), not self.__class__, because the</span>
+            <span class="c1"># latter is proxied.</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)()</span>
+            <span class="n">memo</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)]</span> <span class="o">=</span> <span class="n">result</span>
+            <span class="k">return</span> <span class="n">result</span>
+        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">six</span><span class="o">.</span><span class="n">PY3</span><span class="p">:</span>
+        <span class="fm">__bytes__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">bytes</span><span class="p">)</span>
+        <span class="fm">__str__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
+        <span class="fm">__bool__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">bool</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="fm">__str__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">str</span><span class="p">)</span>
+        <span class="n">__unicode__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">unicode</span><span class="p">)</span>  <span class="c1"># NOQA: unicode undefined on PY3</span>
+        <span class="n">__nonzero__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">bool</span><span class="p">)</span>
+
+    <span class="c1"># Introspection support</span>
+    <span class="fm">__dir__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">dir</span><span class="p">)</span>
+
+    <span class="c1"># Need to pretend to be the wrapped class, for the sake of objects that</span>
+    <span class="c1"># care about this (especially in equality tests)</span>
+    <span class="vm">__class__</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">attrgetter</span><span class="p">(</span><span class="s2">&quot;__class__&quot;</span><span class="p">)))</span>
+    <span class="fm">__eq__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">eq</span><span class="p">)</span>
+    <span class="fm">__ne__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">ne</span><span class="p">)</span>
+    <span class="fm">__hash__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">hash</span><span class="p">)</span>
+
+    <span class="c1"># List/Tuple/Dictionary methods support</span>
+    <span class="fm">__getitem__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">getitem</span><span class="p">)</span>
+    <span class="fm">__setitem__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">setitem</span><span class="p">)</span>
+    <span class="fm">__delitem__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">delitem</span><span class="p">)</span>
+    <span class="fm">__iter__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">iter</span><span class="p">)</span>
+    <span class="fm">__len__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="nb">len</span><span class="p">)</span>
+    <span class="fm">__contains__</span> <span class="o">=</span> <span class="n">new_method_proxy</span><span class="p">(</span><span class="n">operator</span><span class="o">.</span><span class="n">contains</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">unpickle_lazyobject</span><span class="p">(</span><span class="n">wrapped</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Used to unpickle lazy objects. Just return its argument, which will be the</span>
+<span class="sd">    wrapped object.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">wrapped</span>
+
+
+<span class="k">class</span> <span class="nc">SimpleLazyObject</span><span class="p">(</span><span class="n">LazyObject</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A lazy object initialized from any function.</span>
+
+<span class="sd">    Designed for compound objects of unknown type. For builtins or objects of</span>
+<span class="sd">    known type, use django.utils.functional.lazy.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Pass in a callable that returns the object to be wrapped.</span>
+
+<span class="sd">        If copies are made of the resulting SimpleLazyObject, which can happen</span>
+<span class="sd">        in various circumstances within Django, then you must ensure that the</span>
+<span class="sd">        callable can be safely run more than once and will return the same</span>
+<span class="sd">        value.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">[</span><span class="s1">&#39;_setupfunc&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">func</span>
+        <span class="nb">super</span><span class="p">(</span><span class="n">SimpleLazyObject</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setupfunc</span><span class="p">()</span>
+
+    <span class="c1"># Return a meaningful representation of the lazy object for debugging</span>
+    <span class="c1"># without evaluating the wrapped object.</span>
+    <span class="k">def</span> <span class="nf">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="n">repr_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_setupfunc</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">repr_attr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span>
+        <span class="k">return</span> <span class="s1">&#39;&lt;</span><span class="si">%s</span><span class="s1">: </span><span class="si">%r</span><span class="s1">&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="p">,</span> <span class="n">repr_attr</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__copy__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="c1"># If uninitialized, copy the wrapper. Use SimpleLazyObject, not</span>
+            <span class="c1"># self.__class__, because the latter is proxied.</span>
+            <span class="k">return</span> <span class="n">SimpleLazyObject</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_setupfunc</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c1"># If initialized, return a copy of the wrapped object.</span>
+            <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">copy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__deepcopy__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">memo</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span> <span class="ow">is</span> <span class="n">empty</span><span class="p">:</span>
+            <span class="c1"># We have to use SimpleLazyObject, not self.__class__, because the</span>
+            <span class="c1"># latter is proxied.</span>
+            <span class="n">result</span> <span class="o">=</span> <span class="n">SimpleLazyObject</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_setupfunc</span><span class="p">)</span>
+            <span class="n">memo</span><span class="p">[</span><span class="nb">id</span><span class="p">(</span><span class="bp">self</span><span class="p">)]</span> <span class="o">=</span> <span class="n">result</span>
+            <span class="k">return</span> <span class="n">result</span>
+        <span class="k">return</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_wrapped</span><span class="p">,</span> <span class="n">memo</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">partition</span><span class="p">(</span><span class="n">predicate</span><span class="p">,</span> <span class="n">values</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Splits the values into two sets, based on the return value of the function</span>
+<span class="sd">    (True/False). e.g.:</span>
+
+<span class="sd">        &gt;&gt;&gt; partition(lambda x: x &gt; 3, range(5))</span>
+<span class="sd">        [0, 1, 2, 3], [4]</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">results</span> <span class="o">=</span> <span class="p">([],</span> <span class="p">[])</span>
+    <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">values</span><span class="p">:</span>
+        <span class="n">results</span><span class="p">[</span><span class="n">predicate</span><span class="p">(</span><span class="n">item</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">results</span>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/index.html b/docs/codebase/_build/html/_modules/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..a41b0583751fd94925708534449a84a31076498a
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/index.html
@@ -0,0 +1,204 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Overview: module code &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+    <li>Overview: module code</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>All modules for which code is available</h1>
+<ul><li><a href="commentaries/models.html">commentaries.models</a></li>
+<li><a href="commentaries/views.html">commentaries.views</a></li>
+<li><a href="comments/models.html">comments.models</a></li>
+<li><a href="comments/views.html">comments.views</a></li>
+<li><a href="django/utils/functional.html">django.utils.functional</a></li>
+<li><a href="journals/models.html">journals.models</a></li>
+<li><a href="journals/views.html">journals.views</a></li>
+<li><a href="scipost/models.html">scipost.models</a></li>
+<li><a href="scipost/views.html">scipost.views</a></li>
+<li><a href="submissions/models.html">submissions.models</a></li>
+<li><a href="submissions/views.html">submissions.views</a></li>
+<li><a href="theses/models.html">theses.models</a></li>
+</ul>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/journals/models.html b/docs/codebase/_build/html/_modules/journals/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..74fe480496ac9bbfdd32f5abe760e5af234f8689
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/journals/models.html
@@ -0,0 +1,647 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>journals.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>journals.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for journals.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.contrib.contenttypes.fields</span> <span class="k">import</span> <span class="n">GenericForeignKey</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.models</span> <span class="k">import</span> <span class="n">ContentType</span>
+<span class="kn">from</span> <span class="nn">django.contrib.postgres.fields</span> <span class="k">import</span> <span class="n">JSONField</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="k">import</span> <span class="n">Avg</span><span class="p">,</span> <span class="n">F</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">reverse</span>
+
+<span class="kn">from</span> <span class="nn">.behaviors</span> <span class="k">import</span> <span class="n">doi_journal_validator</span><span class="p">,</span> <span class="n">doi_volume_validator</span><span class="p">,</span>\
+                       <span class="n">doi_issue_validator</span><span class="p">,</span> <span class="n">doi_publication_validator</span>
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS</span><span class="p">,</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">,</span>\
+                       <span class="n">STATUS_DRAFT</span><span class="p">,</span> <span class="n">STATUS_PUBLISHED</span><span class="p">,</span> <span class="n">ISSUE_STATUSES</span><span class="p">,</span>\
+                       <span class="n">CCBY4</span><span class="p">,</span> <span class="n">CC_LICENSES</span><span class="p">,</span> <span class="n">CC_LICENSES_URI</span>
+<span class="kn">from</span> <span class="nn">.helpers</span> <span class="k">import</span> <span class="n">paper_nr_string</span><span class="p">,</span> <span class="n">journal_name_abbrev_citation</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">IssueManager</span><span class="p">,</span> <span class="n">PublicationQuerySet</span><span class="p">,</span> <span class="n">JournalManager</span>
+
+<span class="kn">from</span> <span class="nn">scipost.constants</span> <span class="k">import</span> <span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">SCIPOST_SUBJECT_AREAS</span>
+<span class="kn">from</span> <span class="nn">scipost.fields</span> <span class="k">import</span> <span class="n">ChoiceArrayField</span>
+
+
+<span class="c1">################</span>
+<span class="c1"># Journals etc #</span>
+<span class="c1">################</span>
+
+<div class="viewcode-block" id="UnregisteredAuthor"><a class="viewcode-back" href="../../apps/journals.html#journals.models.UnregisteredAuthor">[docs]</a><span class="k">class</span> <span class="nc">UnregisteredAuthor</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">first_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
+    <span class="n">last_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_name</span></div>
+
+
+<div class="viewcode-block" id="PublicationAuthorsTable"><a class="viewcode-back" href="../../apps/journals.html#journals.models.PublicationAuthorsTable">[docs]</a><span class="k">class</span> <span class="nc">PublicationAuthorsTable</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;authors&#39;</span><span class="p">)</span>
+    <span class="n">unregistered_author</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.UnregisteredAuthor&#39;</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;+&#39;</span><span class="p">)</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;+&#39;</span><span class="p">)</span>
+    <span class="n">order</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;order&#39;</span><span class="p">,)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">order</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">order</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">is_registered</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">first_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="o">.</span><span class="n">first_name</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">last_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="p">:</span>
+            <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unregistered_author</span><span class="o">.</span><span class="n">last_name</span></div>
+
+
+<div class="viewcode-block" id="Journal"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Journal">[docs]</a><span class="k">class</span> <span class="nc">Journal</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                 <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">doi_journal_validator</span><span class="p">])</span>
+    <span class="n">issn</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">16</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;2542-4653&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">active</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">JournalManager</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_name_display</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:landing_page&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span><span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">get_abbreviation_citation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">journal_name_abbrev_citation</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">nr_publications</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__in_volume__in_journal</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">publications</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">avg_processing_duration</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">duration</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">in_issue__in_volume__in_journal</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">aggregate</span><span class="p">(</span>
+                <span class="n">avg</span><span class="o">=</span><span class="n">Avg</span><span class="p">(</span><span class="n">F</span><span class="p">(</span><span class="s1">&#39;publication_date&#39;</span><span class="p">)</span> <span class="o">-</span> <span class="n">F</span><span class="p">(</span><span class="s1">&#39;submission_date&#39;</span><span class="p">)))[</span><span class="s1">&#39;avg&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">duration</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">duration</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span> <span class="o">/</span> <span class="mi">86400</span>
+        <span class="k">return</span> <span class="mi">0</span>
+
+<div class="viewcode-block" id="Journal.citation_rate"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Journal.citation_rate">[docs]</a>    <span class="k">def</span> <span class="nf">citation_rate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns the citation rate in units of nr citations per article per year.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__in_volume__in_journal</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="n">ncites</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">deltat</span> <span class="o">=</span> <span class="mi">1</span>  <span class="c1"># to avoid division by zero</span>
+        <span class="k">for</span> <span class="n">pub</span> <span class="ow">in</span> <span class="n">publications</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">pub</span><span class="o">.</span><span class="n">citedby</span> <span class="ow">and</span> <span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="p">:</span>
+                <span class="n">ncites</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">citedby</span><span class="p">)</span>
+                <span class="n">deltat</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">pub</span><span class="o">.</span><span class="n">publication_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">ncites</span> <span class="o">*</span> <span class="mf">365.25</span><span class="o">/</span><span class="n">deltat</span><span class="p">)</span></div></div>
+
+
+<div class="viewcode-block" id="Volume"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Volume">[docs]</a><span class="k">class</span> <span class="nc">Volume</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">in_journal</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Journal&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">number</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">()</span>
+    <span class="n">start_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">until_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                 <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">doi_volume_validator</span><span class="p">])</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;number&#39;</span><span class="p">,</span> <span class="s1">&#39;in_journal&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_journal</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39; Vol. &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+
+    <span class="k">def</span> <span class="nf">nr_publications</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__in_volume</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">publications</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">avg_processing_duration</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">duration</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">in_issue__in_volume</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">aggregate</span><span class="p">(</span>
+                <span class="n">avg</span><span class="o">=</span><span class="n">Avg</span><span class="p">(</span><span class="n">F</span><span class="p">(</span><span class="s1">&#39;publication_date&#39;</span><span class="p">)</span> <span class="o">-</span> <span class="n">F</span><span class="p">(</span><span class="s1">&#39;submission_date&#39;</span><span class="p">)))[</span><span class="s1">&#39;avg&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">duration</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">duration</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span> <span class="o">/</span> <span class="mi">86400</span>
+        <span class="k">return</span> <span class="mi">0</span>
+
+<div class="viewcode-block" id="Volume.citation_rate"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Volume.citation_rate">[docs]</a>    <span class="k">def</span> <span class="nf">citation_rate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns the citation rate in units of nr citations per article per year.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__in_volume</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="n">ncites</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">deltat</span> <span class="o">=</span> <span class="mi">1</span>  <span class="c1"># to avoid division by zero</span>
+        <span class="k">for</span> <span class="n">pub</span> <span class="ow">in</span> <span class="n">publications</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">pub</span><span class="o">.</span><span class="n">citedby</span> <span class="ow">and</span> <span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="p">:</span>
+                <span class="n">ncites</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">citedby</span><span class="p">)</span>
+                <span class="n">deltat</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">pub</span><span class="o">.</span><span class="n">publication_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">ncites</span> <span class="o">*</span> <span class="mf">365.25</span> <span class="o">/</span> <span class="n">deltat</span><span class="p">)</span></div></div>
+
+
+<div class="viewcode-block" id="Issue"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Issue">[docs]</a><span class="k">class</span> <span class="nc">Issue</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">in_volume</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Volume&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">number</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">()</span>
+    <span class="n">start_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">until_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">ISSUE_STATUSES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">STATUS_PUBLISHED</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                 <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">doi_issue_validator</span><span class="p">])</span>
+    <span class="c1"># absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/</span>
+    <span class="n">path</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">IssueManager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;number&#39;</span><span class="p">,</span> <span class="s1">&#39;in_volume&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">issue_number</span>
+        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;proceedings&#39;</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">text</span>
+        <span class="n">text</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">period_as_string</span><span class="p">()</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">STATUS_DRAFT</span><span class="p">:</span>
+            <span class="n">text</span> <span class="o">+=</span> <span class="s1">&#39; (In draft)&#39;</span>
+        <span class="k">return</span> <span class="n">text</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:issue_detail&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span><span class="p">])</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">issue_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> issue </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_volume</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">short_str</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;Vol. </span><span class="si">%s</span><span class="s1"> issue </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">number</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">number</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">period_as_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="o">.</span><span class="n">month</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">month</span><span class="p">:</span>
+            <span class="k">return</span> <span class="s1">&#39; (</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%B&#39;</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="p">(</span><span class="s1">&#39; (&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%B&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;-&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%B&#39;</span><span class="p">)</span> <span class="o">+</span>
+                    <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">is_current</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> <span class="o">&lt;=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="ow">and</span>\
+               <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span> <span class="o">&gt;=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">date</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">nr_publications</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">publications</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">avg_processing_duration</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">duration</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">in_issue</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">aggregate</span><span class="p">(</span>
+                <span class="n">avg</span><span class="o">=</span><span class="n">Avg</span><span class="p">(</span><span class="n">F</span><span class="p">(</span><span class="s1">&#39;publication_date&#39;</span><span class="p">)</span> <span class="o">-</span> <span class="n">F</span><span class="p">(</span><span class="s1">&#39;submission_date&#39;</span><span class="p">)))[</span><span class="s1">&#39;avg&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">duration</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">duration</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span> <span class="o">/</span> <span class="mi">86400</span>
+        <span class="k">return</span> <span class="mi">0</span>
+
+<div class="viewcode-block" id="Issue.citation_rate"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Issue.citation_rate">[docs]</a>    <span class="k">def</span> <span class="nf">citation_rate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">tier</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns the citation rate in units of nr citations per article per year.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">tier</span><span class="p">:</span>
+            <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">accepted_submission__eicrecommendations__recommendation</span><span class="o">=</span><span class="n">tier</span><span class="p">)</span>
+        <span class="n">ncites</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="n">deltat</span> <span class="o">=</span> <span class="mi">1</span>  <span class="c1"># to avoid division by zero</span>
+        <span class="k">for</span> <span class="n">pub</span> <span class="ow">in</span> <span class="n">publications</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">pub</span><span class="o">.</span><span class="n">citedby</span> <span class="ow">and</span> <span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="p">:</span>
+                <span class="n">ncites</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">citedby</span><span class="p">)</span>
+                <span class="n">deltat</span> <span class="o">+=</span> <span class="p">(</span><span class="n">pub</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="n">pub</span><span class="o">.</span><span class="n">publication_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span>
+        <span class="k">return</span> <span class="p">(</span><span class="n">ncites</span> <span class="o">*</span> <span class="mf">365.25</span><span class="o">/</span><span class="n">deltat</span><span class="p">)</span></div></div>
+
+
+<div class="viewcode-block" id="Publication"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Publication">[docs]</a><span class="k">class</span> <span class="nc">Publication</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A Publication is an object directly related to an accepted Submission. It contains metadata,</span>
+<span class="sd">    the actual publication file, author data, etc. etc.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c1"># Publication data</span>
+    <span class="n">accepted_submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">OneToOneField</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                               <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;publication&#39;</span><span class="p">)</span>
+    <span class="n">in_issue</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Issue&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">paper_nr</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">()</span>
+
+    <span class="c1"># Core fields</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
+    <span class="n">author_list</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;author list&quot;</span><span class="p">)</span>
+    <span class="n">abstract</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+    <span class="n">pdf_file</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">upload_to</span><span class="o">=</span><span class="s1">&#39;UPLOADS/PUBLICATIONS/%Y/%m/&#39;</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">)</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;physics&#39;</span><span class="p">)</span>
+    <span class="n">domain</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">)</span>
+    <span class="n">subject_area</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span>
+                                    <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;Primary subject area&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;Phys:QP&#39;</span><span class="p">)</span>
+    <span class="n">secondary_areas</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span>
+        <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">),</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Authors</span>
+    <span class="n">authors_registered</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                <span class="n">through</span><span class="o">=</span><span class="s1">&#39;PublicationAuthorsTable&#39;</span><span class="p">,</span>
+                                                <span class="n">through_fields</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;publication&#39;</span><span class="p">,</span> <span class="s1">&#39;contributor&#39;</span><span class="p">),</span>
+                                                <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;publications&#39;</span><span class="p">)</span>
+    <span class="n">authors_unregistered</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;journals.UnregisteredAuthor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                  <span class="n">through</span><span class="o">=</span><span class="s1">&#39;PublicationAuthorsTable&#39;</span><span class="p">,</span>
+                                                  <span class="n">through_fields</span><span class="o">=</span><span class="p">(</span>
+                                                    <span class="s1">&#39;publication&#39;</span><span class="p">,</span>
+                                                    <span class="s1">&#39;unregistered_author&#39;</span><span class="p">),</span>
+                                                  <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;publications&#39;</span><span class="p">)</span>
+    <span class="n">authors_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;claimed_publications&#39;</span><span class="p">)</span>
+    <span class="n">authors_false_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                  <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;false_claimed_publications&#39;</span><span class="p">)</span>
+
+    <span class="n">cc_license</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">CC_LICENSES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">CCBY4</span><span class="p">)</span>
+
+    <span class="c1"># Funders</span>
+    <span class="n">grants</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;funders.Grant&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;publications&quot;</span><span class="p">)</span>
+    <span class="n">funders_generic</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
+        <span class="s1">&#39;funders.Funder&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;publications&quot;</span><span class="p">)</span>  <span class="c1"># not linked to a grant</span>
+    <span class="n">institutions</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;affiliations.Institution&#39;</span><span class="p">,</span>
+                                          <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;publications&quot;</span><span class="p">)</span>
+
+    <span class="c1"># Metadata</span>
+    <span class="n">metadata</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">{},</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">metadata_xml</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>  <span class="c1"># for Crossref deposit</span>
+    <span class="n">metadata_DOAJ</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">{},</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                 <span class="n">validators</span><span class="o">=</span><span class="p">[</span><span class="n">doi_publication_validator</span><span class="p">])</span>
+    <span class="n">BiBTeX_entry</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">doideposit_needs_updating</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">citedby</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">{},</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Date fields</span>
+    <span class="n">submission_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;submission date&#39;</span><span class="p">)</span>
+    <span class="n">acceptance_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;acceptance date&#39;</span><span class="p">)</span>
+    <span class="n">publication_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;publication date&#39;</span><span class="p">)</span>
+    <span class="n">latest_citedby_update</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">latest_metadata_update</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">latest_activity</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">PublicationQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">header</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">citation</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span>
+                  <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span>
+                  <span class="o">+</span> <span class="s1">&#39;, published &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">header</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:publication_detail&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span><span class="p">])</span>
+
+    <span class="k">def</span> <span class="nf">get_cc_license_URI</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">for</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span> <span class="ow">in</span> <span class="n">CC_LICENSES_URI</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">key</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">cc_license</span><span class="p">:</span>
+                <span class="k">return</span> <span class="n">val</span>
+        <span class="k">raise</span> <span class="ne">KeyError</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+
+    <span class="k">def</span> <span class="nf">get_paper_nr</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">paper_nr_string</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">paper_nr</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">citation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">get_abbreviation_citation</span><span class="p">()</span>
+                <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">number</span><span class="p">)</span>
+                <span class="o">+</span> <span class="s1">&#39;, &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">()</span>
+                <span class="o">+</span> <span class="s1">&#39; (&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span><span class="p">)</span>
+
+<div class="viewcode-block" id="Publication.citation_rate"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Publication.citation_rate">[docs]</a>    <span class="k">def</span> <span class="nf">citation_rate</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Returns the citation rate in units of nr citations per article per year.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">citedby</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="p">:</span>
+            <span class="n">ncites</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">citedby</span><span class="p">)</span>
+            <span class="n">deltat</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">latest_citedby_update</span><span class="o">.</span><span class="n">date</span><span class="p">()</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication_date</span><span class="p">)</span><span class="o">.</span><span class="n">days</span>
+            <span class="k">return</span> <span class="p">(</span><span class="n">ncites</span> <span class="o">*</span> <span class="mf">365.25</span><span class="o">/</span><span class="n">deltat</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="k">return</span> <span class="mi">0</span></div></div>
+
+
+<div class="viewcode-block" id="Reference"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Reference">[docs]</a><span class="k">class</span> <span class="nc">Reference</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A Refence is a reference used in a specific Publication.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">reference_number</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">()</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+
+    <span class="n">authors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1028</span><span class="p">)</span>
+    <span class="n">citation</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1028</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">identifier</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">128</span><span class="p">)</span>
+    <span class="n">link</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;reference_number&#39;</span><span class="p">,</span> <span class="s1">&#39;publication&#39;</span><span class="p">)</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;reference_number&#39;</span><span class="p">]</span>
+        <span class="n">default_related_name</span> <span class="o">=</span> <span class="s1">&#39;references&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;[</span><span class="si">{}</span><span class="s1">] </span><span class="si">{}</span><span class="s1">, </span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">reference_number</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">authors</span><span class="p">[:</span><span class="mi">30</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">citation</span><span class="p">[:</span><span class="mi">30</span><span class="p">])</span></div>
+
+
+<div class="viewcode-block" id="Deposit"><a class="viewcode-back" href="../../apps/journals.html#journals.models.Deposit">[docs]</a><span class="k">class</span> <span class="nc">Deposit</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Each time a Crossref deposit is made for a Publication,</span>
+<span class="sd">    a Deposit object instance is created containing the Publication&#39;s</span>
+<span class="sd">    current version of the metadata_xml field.</span>
+<span class="sd">    All deposit history is thus contained here.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">)</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">)</span>
+    <span class="n">metadata_xml</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">metadata_xml_file</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">512</span><span class="p">)</span>
+    <span class="n">deposition_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">response_text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">deposit_successful</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-timestamp&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">_str</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">deposition_date</span><span class="p">:</span>
+            <span class="n">_str</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> for &#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">deposition_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-%D&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">_str</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span></div>
+
+
+<div class="viewcode-block" id="DOAJDeposit"><a class="viewcode-back" href="../../apps/journals.html#journals.models.DOAJDeposit">[docs]</a><span class="k">class</span> <span class="nc">DOAJDeposit</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    For the Directory of Open Access Journals.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">)</span>
+    <span class="n">metadata_DOAJ</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">()</span>
+    <span class="n">metadata_DOAJ_file</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">512</span><span class="p">)</span>
+    <span class="n">deposition_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">response_text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">deposit_successful</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">verbose_name</span> <span class="o">=</span> <span class="s1">&#39;DOAJ deposit&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="s1">&#39;DOAJ deposit for &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="GenericDOIDeposit"><a class="viewcode-back" href="../../apps/journals.html#journals.models.GenericDOIDeposit">[docs]</a><span class="k">class</span> <span class="nc">GenericDOIDeposit</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Instances of this class represent Crossref deposits for non-publication</span>
+<span class="sd">    objects such as Reports, Comments etc.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">content_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">ContentType</span><span class="p">)</span>
+    <span class="n">object_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveIntegerField</span><span class="p">()</span>
+    <span class="n">content_object</span> <span class="o">=</span> <span class="n">GenericForeignKey</span><span class="p">()</span>
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span>
+    <span class="n">metadata_xml</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">deposition_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">response</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">deposit_successful</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-timestamp&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;GenericDOIDeposit for </span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">content_type</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">content_object</span><span class="p">))</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/journals/views.html b/docs/codebase/_build/html/_modules/journals/views.html
new file mode 100644
index 0000000000000000000000000000000000000000..ad32dae584e4e031dec136530d7831f48ddbd413
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/journals/views.html
@@ -0,0 +1,1541 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>journals.views &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>journals.views</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for journals.views</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">json</span>
+<span class="kn">import</span> <span class="nn">os</span>
+<span class="kn">import</span> <span class="nn">random</span>
+<span class="kn">import</span> <span class="nn">requests</span>
+<span class="kn">import</span> <span class="nn">shutil</span>
+<span class="kn">import</span> <span class="nn">string</span>
+<span class="kn">import</span> <span class="nn">xml.etree.ElementTree</span> <span class="k">as</span> <span class="nn">ET</span>
+
+
+<span class="kn">from</span> <span class="nn">django.contrib.auth.decorators</span> <span class="k">import</span> <span class="n">login_required</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.models</span> <span class="k">import</span> <span class="n">ContentType</span>
+<span class="kn">from</span> <span class="nn">django.core.paginator</span> <span class="k">import</span> <span class="n">Paginator</span><span class="p">,</span> <span class="n">EmptyPage</span><span class="p">,</span> <span class="n">PageNotAnInteger</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
+<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">messages</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">transaction</span>
+<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">Http404</span><span class="p">,</span> <span class="n">HttpResponse</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span><span class="p">,</span> <span class="n">render</span><span class="p">,</span> <span class="n">redirect</span>
+
+<span class="kn">from</span> <span class="nn">.exceptions</span> <span class="k">import</span> <span class="n">PaperNumberingError</span>
+<span class="kn">from</span> <span class="nn">.helpers</span> <span class="k">import</span> <span class="n">paper_nr_string</span><span class="p">,</span> <span class="n">issue_doi_label_from_doi_label</span>
+<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="n">Journal</span><span class="p">,</span> <span class="n">Issue</span><span class="p">,</span> <span class="n">Publication</span><span class="p">,</span> <span class="n">Deposit</span><span class="p">,</span> <span class="n">DOAJDeposit</span><span class="p">,</span>\
+                    <span class="n">GenericDOIDeposit</span><span class="p">,</span> <span class="n">PublicationAuthorsTable</span>
+<span class="kn">from</span> <span class="nn">.forms</span> <span class="k">import</span> <span class="n">FundingInfoForm</span><span class="p">,</span> <span class="n">InitiatePublicationForm</span><span class="p">,</span> <span class="n">ValidatePublicationForm</span><span class="p">,</span>\
+                   <span class="n">UnregisteredAuthorForm</span><span class="p">,</span> <span class="n">CreateMetadataXMLForm</span><span class="p">,</span> <span class="n">CitationListBibitemsForm</span><span class="p">,</span>\
+                   <span class="n">ReferenceFormSet</span><span class="p">,</span> <span class="n">CreateMetadataDOAJForm</span>
+<span class="kn">from</span> <span class="nn">.utils</span> <span class="k">import</span> <span class="n">JournalUtils</span>
+
+<span class="kn">from</span> <span class="nn">comments.models</span> <span class="k">import</span> <span class="n">Comment</span>
+<span class="kn">from</span> <span class="nn">funders.models</span> <span class="k">import</span> <span class="n">Funder</span>
+<span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span><span class="p">,</span> <span class="n">Report</span>
+<span class="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="n">Contributor</span>
+<span class="kn">from</span> <span class="nn">production.constants</span> <span class="k">import</span> <span class="n">PROOFS_PUBLISHED</span>
+<span class="kn">from</span> <span class="nn">production.models</span> <span class="k">import</span> <span class="n">ProductionEvent</span>
+<span class="kn">from</span> <span class="nn">production.signals</span> <span class="k">import</span> <span class="n">notify_stream_status_change</span>
+
+<span class="kn">from</span> <span class="nn">funders.forms</span> <span class="k">import</span> <span class="n">FunderSelectForm</span><span class="p">,</span> <span class="n">GrantSelectForm</span>
+<span class="kn">from</span> <span class="nn">scipost.forms</span> <span class="k">import</span> <span class="n">ConfirmationForm</span>
+
+<span class="kn">from</span> <span class="nn">guardian.decorators</span> <span class="k">import</span> <span class="n">permission_required</span>
+
+
+<span class="c1">############</span>
+<span class="c1"># Journals</span>
+<span class="c1">############</span>
+
+<div class="viewcode-block" id="journals"><a class="viewcode-back" href="../../apps/journals.html#journals.views.journals">[docs]</a><span class="k">def</span> <span class="nf">journals</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;Main landing page for Journals application.&#39;&#39;&#39;</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;journals&#39;</span><span class="p">:</span> <span class="n">Journal</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">)}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journals.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="k">def</span> <span class="nf">landing_page</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="n">current_issue</span> <span class="o">=</span> <span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span>
+        <span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">,</span>
+        <span class="n">start_date__lte</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+        <span class="n">until_date__gte</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">())</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-until_date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+    <span class="n">latest_issue</span> <span class="o">=</span> <span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span>
+        <span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">,</span>
+        <span class="n">until_date__lte</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">())</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-until_date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+
+    <span class="n">prev_issue</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">current_issue</span><span class="p">:</span>
+        <span class="n">prev_issue</span> <span class="o">=</span> <span class="p">(</span><span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span><span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">,</span>
+                                              <span class="n">start_date__lt</span><span class="o">=</span><span class="n">current_issue</span><span class="o">.</span><span class="n">start_date</span><span class="p">)</span>
+                                   <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;start_date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">last</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;current_issue&#39;</span><span class="p">:</span> <span class="n">current_issue</span><span class="p">,</span>
+        <span class="s1">&#39;latest_issue&#39;</span><span class="p">:</span> <span class="n">latest_issue</span><span class="p">,</span>
+        <span class="s1">&#39;prev_issue&#39;</span><span class="p">:</span> <span class="n">prev_issue</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journal_landing_page.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">issues</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="n">issues</span> <span class="o">=</span> <span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span><span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-until_date&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;issues&#39;</span><span class="p">:</span> <span class="n">issues</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journal_issues.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="recent"><a class="viewcode-back" href="../../apps/journals.html#journals.views.recent">[docs]</a><span class="k">def</span> <span class="nf">recent</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Display page for the most recent 20 publications in SciPost Physics.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">recent_papers</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span>
+        <span class="n">in_issue__in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">,</span>
+                                                          <span class="s1">&#39;-paper_nr&#39;</span><span class="p">)[:</span><span class="mi">20</span><span class="p">]</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;recent_papers&#39;</span><span class="p">:</span> <span class="n">recent_papers</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journal_recent.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="accepted"><a class="viewcode-back" href="../../apps/journals.html#journals.views.accepted">[docs]</a><span class="k">def</span> <span class="nf">accepted</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Display page for submissions to SciPost Physics which</span>
+<span class="sd">    have been accepted but are not yet published.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">accepted_SP_submissions</span> <span class="o">=</span> <span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span>
+                               <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submitted_to_journal</span><span class="o">=</span><span class="n">journal</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
+                               <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-latest_activity&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;accepted_SP_submissions&#39;</span><span class="p">:</span> <span class="n">accepted_SP_submissions</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journal_accepted.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="k">def</span> <span class="nf">info_for_authors</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/</span><span class="si">%s</span><span class="s1">_info_for_authors.html&#39;</span> <span class="o">%</span> <span class="n">doi_label</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">about</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/</span><span class="si">%s</span><span class="s1">_about.html&#39;</span> <span class="o">%</span> <span class="n">doi_label</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">issue_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">issue</span> <span class="o">=</span> <span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_published</span><span class="p">(</span><span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span>
+
+    <span class="n">papers</span> <span class="o">=</span> <span class="n">issue</span><span class="o">.</span><span class="n">publication_set</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;paper_nr&#39;</span><span class="p">)</span>
+    <span class="n">next_issue</span> <span class="o">=</span> <span class="p">(</span><span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span><span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">,</span>
+                                          <span class="n">start_date__gt</span><span class="o">=</span><span class="n">issue</span><span class="o">.</span><span class="n">start_date</span><span class="p">)</span>
+                               <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;start_date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">())</span>
+    <span class="n">prev_issue</span> <span class="o">=</span> <span class="p">(</span><span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">(</span><span class="n">in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">,</span>
+                                          <span class="n">start_date__lt</span><span class="o">=</span><span class="n">issue</span><span class="o">.</span><span class="n">start_date</span><span class="p">)</span>
+                               <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;start_date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">last</span><span class="p">())</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;issue&#39;</span><span class="p">:</span> <span class="n">issue</span><span class="p">,</span>
+        <span class="s1">&#39;prev_issue&#39;</span><span class="p">:</span> <span class="n">prev_issue</span><span class="p">,</span>
+        <span class="s1">&#39;next_issue&#39;</span><span class="p">:</span> <span class="n">next_issue</span><span class="p">,</span>
+        <span class="s1">&#39;papers&#39;</span><span class="p">:</span> <span class="n">papers</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/journal_issue_detail.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="c1">#######################</span>
+<span class="c1"># Publication process #</span>
+<span class="c1">#######################</span>
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="initiate_publication"><a class="viewcode-back" href="../../apps/journals.html#journals.views.initiate_publication">[docs]</a><span class="k">def</span> <span class="nf">initiate_publication</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+<span class="sd">    Publish the manuscript after proofs have been accepted.</span>
+<span class="sd">    This method prefills a ValidatePublicationForm for further</span>
+<span class="sd">    processing (verification in validate_publication method).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">initiate_publication_form</span> <span class="o">=</span> <span class="n">InitiatePublicationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">initiate_publication_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="n">initiate_publication_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;accepted_submission&#39;</span><span class="p">]</span>
+        <span class="n">current_issue</span> <span class="o">=</span> <span class="n">initiate_publication_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;to_be_issued_in&#39;</span><span class="p">]</span>
+
+        <span class="c1"># Determine next available paper number:</span>
+        <span class="n">paper_nr</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__in_volume</span><span class="o">=</span><span class="n">current_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">paper_nr</span> <span class="o">+=</span> <span class="mi">1</span>
+        <span class="k">if</span> <span class="n">paper_nr</span> <span class="o">&gt;</span> <span class="mi">999</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">PaperNumberingError</span><span class="p">(</span><span class="n">paper_nr</span><span class="p">)</span>
+
+        <span class="c1"># Build form data</span>
+        <span class="n">doi_label</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="n">current_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">name</span>
+            <span class="o">+</span> <span class="s1">&#39;.&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">current_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">number</span><span class="p">)</span>
+            <span class="o">+</span> <span class="s1">&#39;.&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">current_issue</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;.&#39;</span> <span class="o">+</span> <span class="n">paper_nr_string</span><span class="p">(</span><span class="n">paper_nr</span><span class="p">)</span>
+        <span class="p">)</span>
+        <span class="n">doi_string</span> <span class="o">=</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="n">doi_label</span>
+        <span class="n">BiBTeX_entry</span> <span class="o">=</span> <span class="p">(</span>
+            <span class="s1">&#39;@Article{&#39;</span> <span class="o">+</span> <span class="n">doi_label</span> <span class="o">+</span> <span class="s1">&#39;,</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">title={{&#39;</span> <span class="o">+</span> <span class="n">submission</span><span class="o">.</span><span class="n">title</span> <span class="o">+</span> <span class="s1">&#39;}},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">author={&#39;</span> <span class="o">+</span> <span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;,&#39;</span><span class="p">,</span> <span class="s1">&#39; and&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">journal={&#39;</span>
+            <span class="o">+</span> <span class="n">current_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">get_abbreviation_citation</span><span class="p">()</span>
+            <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">volume={&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">current_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">issue={&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">current_issue</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">pages={&#39;</span> <span class="o">+</span> <span class="n">paper_nr_string</span><span class="p">(</span><span class="n">paper_nr</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">year={&#39;</span> <span class="o">+</span> <span class="n">current_issue</span><span class="o">.</span><span class="n">until_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">publisher=</span><span class="si">{SciPost}</span><span class="s1">,</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">doi={&#39;</span> <span class="o">+</span> <span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;</span><span class="se">\t</span><span class="s1">url={https://scipost.org/&#39;</span> <span class="o">+</span> <span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;},</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;}</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="p">)</span>
+        <span class="n">initial</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;accepted_submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+            <span class="s1">&#39;in_issue&#39;</span><span class="p">:</span> <span class="n">current_issue</span><span class="p">,</span>
+            <span class="s1">&#39;paper_nr&#39;</span><span class="p">:</span> <span class="n">paper_nr</span><span class="p">,</span>
+            <span class="s1">&#39;discipline&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">discipline</span><span class="p">,</span>
+            <span class="s1">&#39;domain&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">domain</span><span class="p">,</span>
+            <span class="s1">&#39;subject_area&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">subject_area</span><span class="p">,</span>
+            <span class="s1">&#39;secondary_areas&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">secondary_areas</span><span class="p">,</span>
+            <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">,</span>
+            <span class="s1">&#39;author_list&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">,</span>
+            <span class="s1">&#39;abstract&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">abstract</span><span class="p">,</span>
+            <span class="s1">&#39;BiBTeX_entry&#39;</span><span class="p">:</span> <span class="n">BiBTeX_entry</span><span class="p">,</span>
+            <span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">doi_label</span><span class="p">,</span>
+            <span class="s1">&#39;acceptance_date&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">acceptance_date</span><span class="p">,</span>
+            <span class="s1">&#39;submission_date&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="o">.</span><span class="n">submission_date</span><span class="p">,</span>
+            <span class="s1">&#39;publication_date&#39;</span><span class="p">:</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+        <span class="p">}</span>
+        <span class="n">validate_publication_form</span> <span class="o">=</span> <span class="n">ValidatePublicationForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">)</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;validate_publication_form&#39;</span><span class="p">:</span> <span class="n">validate_publication_form</span><span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/validate_publication.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;initiate_publication_form&#39;</span><span class="p">:</span> <span class="n">initiate_publication_form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/initiate_publication.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="validate_publication"><a class="viewcode-back" href="../../apps/journals.html#journals.views.validate_publication">[docs]</a><span class="k">def</span> <span class="nf">validate_publication</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This creates a Publication instance from the ValidatePublicationForm,</span>
+<span class="sd">    pre-filled by the initiate_publication method above.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c1"># TODO: move from uploads to Journal folder</span>
+    <span class="c1"># TODO: create metadata</span>
+    <span class="c1"># TODO: set DOI, register with Crossref</span>
+    <span class="c1"># TODO: add funding info</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="n">validate_publication_form</span> <span class="o">=</span> <span class="n">ValidatePublicationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
+                                                        <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">validate_publication_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">publication</span> <span class="o">=</span> <span class="n">validate_publication_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Fill remaining data</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">accepted_submission</span>
+
+        <span class="k">for</span> <span class="n">submission_author</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+            <span class="n">PublicationAuthorsTable</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
+                <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span> <span class="n">contributor</span><span class="o">=</span><span class="n">submission_author</span><span class="p">)</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="o">*</span><span class="n">submission</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="o">*</span><span class="n">submission</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+
+        <span class="c1"># Add Institutions to the publication</span>
+        <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">publication</span><span class="o">.</span><span class="n">authors_registered</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+            <span class="k">for</span> <span class="n">current_affiliation</span> <span class="ow">in</span> <span class="n">author</span><span class="o">.</span><span class="n">affiliations</span><span class="o">.</span><span class="n">active</span><span class="p">():</span>
+                <span class="n">publication</span><span class="o">.</span><span class="n">institutions</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">current_affiliation</span><span class="o">.</span><span class="n">institution</span><span class="p">)</span>
+
+        <span class="c1"># Save the beast</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Move file to final location</span>
+        <span class="n">initial_path</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">pdf_file</span><span class="o">.</span><span class="n">path</span>
+        <span class="n">new_dir</span> <span class="o">=</span> <span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span>
+                   <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">())</span>
+        <span class="n">new_path</span> <span class="o">=</span> <span class="n">new_dir</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;.pdf&#39;</span>
+        <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">new_dir</span><span class="p">)</span>
+        <span class="n">os</span><span class="o">.</span><span class="n">rename</span><span class="p">(</span><span class="n">initial_path</span><span class="p">,</span> <span class="n">new_path</span><span class="p">)</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">pdf_file</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">new_path</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Mark the submission as having been published:</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">published_as</span> <span class="o">=</span> <span class="n">publication</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;published&#39;</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Update ProductionStream</span>
+        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">submission</span><span class="p">,</span> <span class="s1">&#39;production_stream&#39;</span><span class="p">):</span>
+            <span class="n">stream</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">production_stream</span>
+            <span class="n">stream</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">PROOFS_PUBLISHED</span>
+            <span class="n">stream</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">production_user</span><span class="p">:</span>
+                <span class="n">prodevent</span> <span class="o">=</span> <span class="n">ProductionEvent</span><span class="p">(</span>
+                    <span class="n">stream</span><span class="o">=</span><span class="n">stream</span><span class="p">,</span>
+                    <span class="n">event</span><span class="o">=</span><span class="s1">&#39;status&#39;</span><span class="p">,</span>
+                    <span class="n">comments</span><span class="o">=</span><span class="s1">&#39; published the manuscript.&#39;</span><span class="p">,</span>
+                    <span class="n">noted_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">production_user</span>
+                <span class="p">)</span>
+                <span class="n">prodevent</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">notify_stream_status_change</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="n">stream</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
+
+        <span class="c1"># TODO: Create a Commentary Page</span>
+        <span class="c1"># Email authors</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">})</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">send_authors_paper_published_email</span><span class="p">()</span>
+
+        <span class="c1"># Add SubmissionEvents</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;The Submission has been published as </span><span class="si">%s</span><span class="s1">.&#39;</span>
+                                     <span class="o">%</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;The publication has been validated.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;errormessage&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;The form was invalid.&#39;</span>
+
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;validate_publication_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">validate_publication_form</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/validate_publication.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">manage_metadata</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">issue_doi_label</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="n">issues</span> <span class="o">=</span> <span class="n">Issue</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-until_date&#39;</span><span class="p">)</span>
+    <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+    <span class="k">if</span> <span class="n">doi_label</span><span class="p">:</span>
+        <span class="n">issue_doi_label</span> <span class="o">=</span> <span class="n">issue_doi_label_from_doi_label</span><span class="p">(</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">issue_doi_label</span><span class="p">:</span>
+        <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">in_issue__doi_label</span><span class="o">=</span><span class="n">issue_doi_label</span><span class="p">)</span>
+    <span class="n">publications</span> <span class="o">=</span> <span class="n">publications</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">,</span> <span class="s1">&#39;-paper_nr&#39;</span><span class="p">)</span>
+    <span class="n">associate_grant_form</span> <span class="o">=</span> <span class="n">GrantSelectForm</span><span class="p">()</span>
+    <span class="n">associate_generic_funder_form</span> <span class="o">=</span> <span class="n">FunderSelectForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;issues&#39;</span><span class="p">:</span> <span class="n">issues</span><span class="p">,</span>
+        <span class="s1">&#39;issue_doi_label&#39;</span><span class="p">:</span> <span class="n">issue_doi_label</span><span class="p">,</span>
+        <span class="s1">&#39;publications&#39;</span><span class="p">:</span> <span class="n">publications</span><span class="p">,</span>
+        <span class="s1">&#39;associate_grant_form&#39;</span><span class="p">:</span> <span class="n">associate_grant_form</span><span class="p">,</span>
+        <span class="s1">&#39;associate_generic_funder_form&#39;</span><span class="p">:</span> <span class="n">associate_generic_funder_form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/manage_metadata.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_first_author</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">publication_id</span><span class="p">,</span> <span class="n">author_object_id</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">publication_id</span><span class="p">)</span>
+    <span class="n">author_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">authors</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">author_object_id</span><span class="p">)</span>
+
+    <span class="c1"># Redo ordering</span>
+    <span class="n">author_object</span><span class="o">.</span><span class="n">order</span> <span class="o">=</span> <span class="mi">1</span>
+    <span class="n">author_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">author_objects</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">author_object</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+    <span class="n">count</span> <span class="o">=</span> <span class="mi">2</span>
+    <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">author_objects</span><span class="p">:</span>
+        <span class="n">author</span><span class="o">.</span><span class="n">order</span> <span class="o">=</span> <span class="n">count</span>
+        <span class="n">author</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">count</span> <span class="o">+=</span> <span class="mi">1</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Marked </span><span class="si">{}</span><span class="s1"> first author&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">author_object</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="add_author"><a class="viewcode-back" href="../../apps/journals.html#journals.views.add_author">[docs]</a><span class="k">def</span> <span class="nf">add_author</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">,</span> <span class="n">contributor_id</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">unregistered_author_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    If not all authors are registered Contributors or if they have not</span>
+<span class="sd">    all claimed authorship, this method allows editorial administrators</span>
+<span class="sd">    to associated them to the publication.</span>
+<span class="sd">    This is important for the Crossref metadata, in which all authors must appear.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">contributor_id</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+        <span class="n">PublicationAuthorsTable</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">contributor</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">)</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Added </span><span class="si">{}</span><span class="s1"> as an author.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">contributor</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+    <span class="n">contributors_found</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">UnregisteredAuthorForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">and</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">unregistered_author</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">PublicationAuthorsTable</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
+            <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span>
+            <span class="n">unregistered_author</span><span class="o">=</span><span class="n">unregistered_author</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Added </span><span class="si">{}</span><span class="s1"> as an unregistered author.&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+            <span class="n">unregistered_author</span>
+        <span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+    <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">contributors_found</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">user__last_name__icontains</span><span class="o">=</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">])</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;contributors_found&#39;</span><span class="p">:</span> <span class="n">contributors_found</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/add_author.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="create_citation_list_metadata"><a class="viewcode-back" href="../../apps/journals.html#journals.views.create_citation_list_metadata">[docs]</a><span class="k">def</span> <span class="nf">create_citation_list_metadata</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+<span class="sd">    This populates the citation_list dictionary entry</span>
+<span class="sd">    in the metadata field in a Publication instance.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">bibitems_form</span> <span class="o">=</span> <span class="n">CitationListBibitemsForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">bibitems_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;citation_list&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">bibitems_form</span><span class="o">.</span><span class="n">extract_dois</span><span class="p">()</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Updated citation list&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:create_citation_list_metadata&#39;</span><span class="p">,</span>
+                        <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;bibitems_form&#39;</span><span class="p">:</span> <span class="n">bibitems_form</span><span class="p">,</span>
+        <span class="s1">&#39;citation_list&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;citation_list&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/create_citation_list_metadata.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="update_references"><a class="viewcode-back" href="../../apps/journals.html#journals.views.update_references">[docs]</a><span class="k">def</span> <span class="nf">update_references</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Update the References for a certain Publication.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">references</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">references</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+
+    <span class="n">formset</span> <span class="o">=</span> <span class="n">ReferenceFormSet</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">queryset</span><span class="o">=</span><span class="n">references</span><span class="p">,</span> <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span>
+                               <span class="n">extra</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;extra&#39;</span><span class="p">))</span>
+
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prefill&#39;</span><span class="p">):</span>
+        <span class="n">formset</span><span class="o">.</span><span class="n">prefill</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="n">formset</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">formset</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;References saved&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;formset&#39;</span><span class="p">:</span> <span class="n">formset</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/update_references.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="create_funding_info_metadata"><a class="viewcode-back" href="../../apps/journals.html#journals.views.create_funding_info_metadata">[docs]</a><span class="k">def</span> <span class="nf">create_funding_info_metadata</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+<span class="sd">    This populates the funding_info dictionary entry</span>
+<span class="sd">    in the metadata field in a Publication instance.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="n">funding_statement</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;funding_statement&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
+    <span class="n">initial</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;funding_statement&#39;</span><span class="p">:</span> <span class="n">funding_statement</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">FundingInfoForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Updated funding info&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:create_funding_info_metadata&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;funding_info_form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+        <span class="s1">&#39;funding_statement&#39;</span><span class="p">:</span> <span class="n">funding_statement</span><span class="p">,</span>
+    <span class="p">}</span>
+
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/create_funding_info_metadata.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="add_associated_grant"><a class="viewcode-back" href="../../apps/journals.html#journals.views.add_associated_grant">[docs]</a><span class="k">def</span> <span class="nf">add_associated_grant</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+<span class="sd">    This associates a grant from the database to this publication.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">grant_select_form</span> <span class="o">=</span> <span class="n">GrantSelectForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">grant_select_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">grants</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">grant_select_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;grant&#39;</span><span class="p">])</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Grant added to publication </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">publication</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="add_generic_funder"><a class="viewcode-back" href="../../apps/journals.html#journals.views.add_generic_funder">[docs]</a><span class="k">def</span> <span class="nf">add_generic_funder</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+<span class="sd">    This associates a funder (generic, not via grant) from the database to this publication.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">funder_select_form</span> <span class="o">=</span> <span class="n">FunderSelectForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">funder_select_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">funders_generic</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">funder_select_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;funder&#39;</span><span class="p">])</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Generic funder added to publication </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">publication</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">doi_label</span><span class="p">}))</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="create_metadata_xml"><a class="viewcode-back" href="../../apps/journals.html#journals.views.create_metadata_xml">[docs]</a><span class="k">def</span> <span class="nf">create_metadata_xml</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    To be called by an EdAdmin after the citation_list,</span>
+<span class="sd">    funding_info entries have been filled.</span>
+<span class="sd">    Populates the metadata_xml field of a Publication instance.</span>
+<span class="sd">    The contents can then be sent to Crossref for registration.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="c1"># create a doi_batch_id</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
+        <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span><span class="p">)</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">10</span><span class="p">]</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="n">idsalt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">salt</span><span class="o">+</span><span class="n">idsalt</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+
+    <span class="n">initial</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">:</span> <span class="s1">&#39;&#39;</span><span class="p">}</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_batch version=&quot;4.4.0&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.0&quot; &#39;</span>
+        <span class="s1">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>
+        <span class="s1">&#39;xmlns:fr=&quot;http://www.crossref.org/fundref.xsd&quot; &#39;</span>
+        <span class="s1">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.0 &#39;</span>
+        <span class="s1">&#39;http://www.crossref.org/shema/deposit/crossref4.4.0.xsd&quot; &#39;</span>
+        <span class="s1">&#39;xmlns:ai=&quot;http://www.crossref.org/AccessIndicators.xsd&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;head&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">doi_batch_id</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi_batch_id&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;timestamp&gt;&#39;</span> <span class="o">+</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">%H%M%S&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/timestamp&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;depositor&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;email_address&gt;&#39;</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_DEPOSIT_EMAIL</span> <span class="o">+</span> <span class="s1">&#39;&lt;/email_address&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/depositor&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/head&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;body&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;journal&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;journal_metadata&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;full_title&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">get_name_display</span><span class="p">()</span>
+        <span class="o">+</span> <span class="s1">&#39;&lt;/full_title&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;abbrev_title&gt;&#39;</span>
+        <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">get_abbreviation_citation</span><span class="p">()</span> <span class="o">+</span>
+        <span class="s1">&#39;&lt;/abbrev_title&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;issn media_type=</span><span class="se">\&#39;</span><span class="s1">electronic</span><span class="se">\&#39;</span><span class="s1">&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">issn</span>
+        <span class="o">+</span> <span class="s1">&#39;&lt;/issn&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>
+        <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/resource&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/journal_metadata&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;journal_issue&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;publication_date media_type=</span><span class="se">\&#39;</span><span class="s1">online</span><span class="se">\&#39;</span><span class="s1">&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;year&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/year&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/publication_date&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;journal_volume&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;volume&gt;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/volume&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/journal_volume&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;issue&gt;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">number</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/issue&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/journal_issue&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;journal_article publication_type=</span><span class="se">\&#39;</span><span class="s1">full_text</span><span class="se">\&#39;</span><span class="s1">&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">title</span> <span class="o">+</span> <span class="s1">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="p">)</span>
+
+    <span class="c1"># Precondition: all authors MUST be listed in authors field of publication instance,</span>
+    <span class="c1"># this to be checked by EdAdmin before publishing.</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;contributors&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="k">for</span> <span class="n">author_object</span> <span class="ow">in</span> <span class="n">publication</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">author_object</span><span class="o">.</span><span class="n">order</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
+            <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;person_name sequence=</span><span class="se">\&#39;</span><span class="s1">first</span><span class="se">\&#39;</span><span class="s1"> contributor_role=</span><span class="se">\&#39;</span><span class="s1">author</span><span class="se">\&#39;</span><span class="s1">&gt; &#39;</span>
+                <span class="s1">&#39;&lt;given_name&gt;&#39;</span> <span class="o">+</span> <span class="n">author_object</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/given_name&gt; &#39;</span>
+                <span class="s1">&#39;&lt;surname&gt;&#39;</span> <span class="o">+</span> <span class="n">author_object</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/surname&gt; &#39;</span>
+            <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;person_name sequence=</span><span class="se">\&#39;</span><span class="s1">additional</span><span class="se">\&#39;</span><span class="s1"> contributor_role=</span><span class="se">\&#39;</span><span class="s1">author</span><span class="se">\&#39;</span><span class="s1">&gt; &#39;</span>
+                <span class="s1">&#39;&lt;given_name&gt;&#39;</span> <span class="o">+</span> <span class="n">author_object</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/given_name&gt; &#39;</span>
+                <span class="s1">&#39;&lt;surname&gt;&#39;</span> <span class="o">+</span> <span class="n">author_object</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/surname&gt; &#39;</span>
+            <span class="p">)</span>
+        <span class="k">if</span> <span class="n">author_object</span><span class="o">.</span><span class="n">contributor</span> <span class="ow">and</span> <span class="n">author_object</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">orcid_id</span><span class="p">:</span>
+            <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;ORCID&gt;http://orcid.org/&#39;</span> <span class="o">+</span> <span class="n">author_object</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">orcid_id</span> <span class="o">+</span> <span class="s1">&#39;&lt;/ORCID&gt;&#39;</span>
+            <span class="p">)</span>
+        <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/person_name&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/contributors&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;publication_date media_type=</span><span class="se">\&#39;</span><span class="s1">online</span><span class="se">\&#39;</span><span class="s1">&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;month&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%m&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/month&gt;&#39;</span>
+        <span class="s1">&#39;&lt;day&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/day&gt;&#39;</span>
+        <span class="s1">&#39;&lt;year&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/year&gt;&#39;</span>
+        <span class="s1">&#39;&lt;/publication_date&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;publisher_item&gt;&lt;item_number item_number_type=&quot;article_number&quot;&gt;&#39;</span>
+        <span class="o">+</span> <span class="n">paper_nr_string</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">paper_nr</span><span class="p">)</span> <span class="o">+</span>
+        <span class="s1">&#39;&lt;/item_number&gt;&lt;/publisher_item&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;crossmark&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;crossmark_policy&gt;10.21468/SciPost.CrossmarkPolicy&lt;/crossmark_policy&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;crossmark_domains&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;crossmark_domain&gt;&lt;domain&gt;scipost.org&lt;/domain&gt;&lt;/crossmark_domain&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/crossmark_domains&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;crossmark_domain_exclusive&gt;false&lt;/crossmark_domain_exclusive&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="p">)</span>
+    <span class="n">funders</span> <span class="o">=</span> <span class="p">(</span><span class="n">Funder</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">grant__in</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">grants</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
+               <span class="o">|</span> <span class="n">publication</span><span class="o">.</span><span class="n">funders_generic</span><span class="o">.</span><span class="n">all</span><span class="p">())</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
+    <span class="n">nr_funders</span> <span class="o">=</span> <span class="n">funders</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;custom_metadata&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="k">if</span> <span class="n">nr_funders</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
+        <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;fr:program name=&quot;fundref&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="k">for</span> <span class="n">funder</span> <span class="ow">in</span> <span class="n">funders</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">nr_funders</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+                <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;fr:assertion name=&quot;fundgroup&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;fr:assertion name=&quot;funder_name&quot;&gt;&#39;</span> <span class="o">+</span> <span class="n">funder</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                <span class="s1">&#39;&lt;fr:assertion name=&quot;funder_identifier&quot;&gt;&#39;</span>
+                <span class="o">+</span> <span class="n">funder</span><span class="o">.</span><span class="n">identifier</span> <span class="o">+</span> <span class="s1">&#39;&lt;/fr:assertion&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                <span class="s1">&#39;&lt;/fr:assertion&gt;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="k">for</span> <span class="n">grant</span> <span class="ow">in</span> <span class="n">publication</span><span class="o">.</span><span class="n">grants</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+                <span class="k">if</span> <span class="n">grant</span><span class="o">.</span><span class="n">funder</span> <span class="o">==</span> <span class="n">funder</span><span class="p">:</span>
+                    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                        <span class="s1">&#39;&lt;fr:assertion name=&quot;award_number&quot;&gt;&#39;</span>
+                        <span class="o">+</span> <span class="n">grant</span><span class="o">.</span><span class="n">number</span> <span class="o">+</span> <span class="s1">&#39;&lt;/fr:assertion&gt;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">nr_funders</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
+                <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/fr:assertion&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/fr:program&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;ai:program name=&quot;AccessIndicators&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;ai:license_ref&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">get_cc_license_URI</span><span class="p">()</span> <span class="o">+</span>
+        <span class="s1">&#39;&lt;/ai:license_ref&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/ai:program&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="p">)</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/custom_metadata&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;/crossmark&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;archive_locations&gt;&lt;archive name=&quot;CLOCKSS&quot;&gt;&lt;/archive&gt;&lt;/archive_locations&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;resource&gt;https://scipost.org/&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/resource&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;collection property=&quot;crawler-based&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;item crawler=&quot;iParadigms&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>
+        <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;/pdf&lt;/resource&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/item&gt;&lt;/collection&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;collection property=&quot;text-mining&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;item&gt;&lt;resource mime_type=&quot;application/pdf&quot;&gt;&#39;</span>
+        <span class="s1">&#39;https://scipost.org/&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;/pdf&lt;/resource&gt;&lt;/item&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/collection&gt;&#39;</span>
+        <span class="s1">&#39;&lt;/doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="p">)</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;citation_list&#39;</span><span class="p">]:</span>
+            <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;citation_list&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="k">for</span> <span class="n">ref</span> <span class="ow">in</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;citation_list&#39;</span><span class="p">]:</span>
+                <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+                    <span class="s1">&#39;&lt;citation key=&quot;&#39;</span> <span class="o">+</span> <span class="n">ref</span><span class="p">[</span><span class="s1">&#39;key&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&quot;&gt;&#39;</span>
+                    <span class="s1">&#39;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">ref</span><span class="p">[</span><span class="s1">&#39;doi&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;&#39;</span>
+                    <span class="s1">&#39;&lt;/citation&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+                <span class="p">)</span>
+        <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/citation_list&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
+        <span class="k">pass</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;/journal_article&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/journal&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="p">)</span>
+    <span class="n">initial</span><span class="p">[</span><span class="s1">&#39;metadata_xml&#39;</span><span class="p">]</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/body&gt;</span><span class="se">\n</span><span class="s1">&lt;/doi_batch&gt;&#39;</span>
+
+    <span class="n">create_metadata_xml_form</span> <span class="o">=</span> <span class="n">CreateMetadataXMLForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
+                                                     <span class="n">instance</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span>
+                                                     <span class="n">initial</span><span class="o">=</span><span class="n">initial</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">create_metadata_xml_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">create_metadata_xml_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Metadata XML saved&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">doi_label</span><span class="p">}))</span>
+
+    <span class="n">publication</span><span class="o">.</span><span class="n">latest_metadata_update</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;create_metadata_xml_form&#39;</span><span class="p">:</span> <span class="n">create_metadata_xml_form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/create_metadata_xml.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="metadata_xml_deposit"><a class="viewcode-back" href="../../apps/journals.html#journals.views.metadata_xml_deposit">[docs]</a><span class="k">def</span> <span class="nf">metadata_xml_deposit</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">,</span> <span class="n">option</span><span class="o">=</span><span class="s1">&#39;test&#39;</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Crossref metadata deposit.</span>
+<span class="sd">    If test==True, test the metadata_xml using the Crossref test server.</span>
+<span class="sd">    Makes use of the python requests module.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span>
+            <span class="n">request</span><span class="p">,</span>
+            <span class="s1">&#39;This publication has no metadata. Produce it first before saving it.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:create_metadata_xml&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span>
+        <span class="s1">&#39;&lt;timestamp&gt;&#39;</span><span class="p">))[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;&lt;/timestamp&gt;&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span>
+        <span class="s1">&#39;&lt;doi_batch_id&gt;&#39;</span><span class="p">))[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;&lt;/doi_batch_id&gt;&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">path</span> <span class="o">=</span> <span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span>
+            <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span>
+            <span class="o">+</span> <span class="s1">&#39;_Crossref_&#39;</span> <span class="o">+</span> <span class="n">timestamp</span> <span class="o">+</span> <span class="s1">&#39;.xml&#39;</span><span class="p">)</span>
+
+    <span class="n">valid</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">response_headers</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="n">response_text</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+        <span class="c1"># Deposit already done before.</span>
+        <span class="n">valid</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># New deposit, go for it.</span>
+        <span class="k">if</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;deposit&#39;</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">DEBUG</span><span class="p">:</span>
+            <span class="c1"># CAUTION: Real deposit only on production (non-debug-mode)</span>
+            <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://test.crossref.org/servlet/deposit&#39;</span>
+
+        <span class="c1"># First perform the actual deposit to Crossref</span>
+        <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;operation&#39;</span><span class="p">:</span> <span class="s1">&#39;doMDUpload&#39;</span><span class="p">,</span>
+            <span class="s1">&#39;login_id&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_ID</span><span class="p">,</span>
+            <span class="s1">&#39;login_passwd&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_PASSWORD</span><span class="p">,</span>
+            <span class="p">}</span>
+        <span class="n">files</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;fname&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;metadata.xml&#39;</span><span class="p">,</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf-8&#39;</span><span class="p">),</span> <span class="s1">&#39;multipart/form-data&#39;</span><span class="p">)</span>
+        <span class="p">}</span>
+        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
+        <span class="n">response_headers</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">headers</span>
+        <span class="n">response_text</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span>
+
+        <span class="c1"># Then create the associated Deposit object (saving the metadata to a file)</span>
+        <span class="k">if</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;deposit&#39;</span><span class="p">:</span>
+            <span class="n">deposit</span> <span class="o">=</span> <span class="n">Deposit</span><span class="p">(</span><span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span>
+                              <span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">,</span>
+                              <span class="n">doi_batch_id</span><span class="o">=</span><span class="n">doi_batch_id</span><span class="p">,</span>
+                              <span class="n">metadata_xml</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="p">,</span>
+                              <span class="n">deposition_date</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
+            <span class="n">deposit</span><span class="o">.</span><span class="n">response_text</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span>
+
+            <span class="c1"># Save the filename with timestamp</span>
+            <span class="n">path_with_timestamp</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{issue}</span><span class="s1">/</span><span class="si">{paper}</span><span class="s1">/</span><span class="si">{doi}</span><span class="s1">_Crossref_</span><span class="si">{timestamp}</span><span class="s1">.xml&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                <span class="n">issue</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
+                <span class="n">paper</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">(),</span>
+                <span class="n">doi</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">),</span>
+                <span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">)</span>
+            <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_with_timestamp</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="n">encoding</span><span class="o">=</span><span class="s1">&#39;utf-8&#39;</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="p">)</span>
+            <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+            <span class="c1"># Copy file</span>
+            <span class="n">path_without_timestamp</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{issue}</span><span class="s1">/</span><span class="si">{paper}</span><span class="s1">/</span><span class="si">{doi}</span><span class="s1">_Crossref.xml&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                <span class="n">issue</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
+                <span class="n">paper</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">(),</span>
+                <span class="n">doi</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">))</span>
+            <span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_with_timestamp</span><span class="p">,</span>
+                            <span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_without_timestamp</span><span class="p">)</span>
+
+            <span class="n">deposit</span><span class="o">.</span><span class="n">metadata_xml_file</span> <span class="o">=</span> <span class="n">path_with_timestamp</span>
+            <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">latest_crossref_deposit</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;option&#39;</span><span class="p">:</span> <span class="n">option</span><span class="p">,</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;response_headers&#39;</span><span class="p">:</span> <span class="n">response_headers</span><span class="p">,</span>
+        <span class="s1">&#39;response_text&#39;</span><span class="p">:</span> <span class="n">response_text</span><span class="p">,</span>
+        <span class="s1">&#39;valid&#39;</span><span class="p">:</span> <span class="n">valid</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/metadata_xml_deposit.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_deposit_success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">deposit_id</span><span class="p">,</span> <span class="n">success</span><span class="p">):</span>
+    <span class="n">deposit</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Deposit</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">deposit_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="k">elif</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">deposit</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">produce_metadata_DOAJ</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CreateMetadataDOAJForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span> <span class="n">request</span><span class="o">=</span><span class="n">request</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;</span><span class="si">%s</span><span class="s1">&lt;/h3&gt;Successfully produced metadata DOAJ.&#39;</span>
+                                  <span class="o">%</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/metadata_doaj_create.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="metadata_DOAJ_deposit"><a class="viewcode-back" href="../../apps/journals.html#journals.views.metadata_DOAJ_deposit">[docs]</a><span class="k">def</span> <span class="nf">metadata_DOAJ_deposit</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    DOAJ metadata deposit.</span>
+<span class="sd">    Makes use of the python requests module.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">publication</span><span class="o">.</span><span class="n">metadata_DOAJ</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;</span><span class="si">%s</span><span class="s1">&lt;/h3&gt;Failed: please first produce &#39;</span>
+                                  <span class="s1">&#39;DOAJ metadata before depositing.&#39;</span> <span class="o">%</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">))</span>
+
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_xml</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span>
+        <span class="s1">&#39;&lt;timestamp&gt;&#39;</span><span class="p">))[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">partition</span><span class="p">(</span><span class="s1">&#39;&lt;/timestamp&gt;&#39;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
+    <span class="n">path</span> <span class="o">=</span> <span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span>
+            <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39;/&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span>
+            <span class="o">+</span> <span class="s1">&#39;_DOAJ_&#39;</span> <span class="o">+</span> <span class="n">timestamp</span> <span class="o">+</span> <span class="s1">&#39;.json&#39;</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;The metadata file for this metadata timestamp already exists&#39;</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/error.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;errormessage&#39;</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">})</span>
+
+    <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;https://doaj.org/api/v1/articles&#39;</span>
+    <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;api_key&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">DOAJ_API_KEY</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">json</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_DOAJ</span><span class="p">)</span>
+        <span class="n">r</span><span class="o">.</span><span class="n">raise_for_status</span><span class="p">()</span>
+    <span class="k">except</span> <span class="n">requests</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPError</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;</span><span class="si">%s</span><span class="s1">&lt;/h3&gt;Failed: Post went wrong, response text: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">,</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">))</span>
+
+    <span class="c1"># Then create the associated Deposit object (saving the metadata to a file)</span>
+    <span class="n">deposit</span> <span class="o">=</span> <span class="n">DOAJDeposit</span><span class="p">(</span><span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">,</span> <span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">,</span>
+                          <span class="n">metadata_DOAJ</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_DOAJ</span><span class="p">,</span> <span class="n">deposition_date</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">())</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">response_text</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span>
+
+    <span class="c1"># Save a copy to the filename with and without timestamp</span>
+    <span class="n">path_with_timestamp</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{issue}</span><span class="s1">/</span><span class="si">{paper}</span><span class="s1">/</span><span class="si">{doi}</span><span class="s1">_DOAJ_</span><span class="si">{timestamp}</span><span class="s1">.json&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+        <span class="n">issue</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
+        <span class="n">paper</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">(),</span>
+        <span class="n">doi</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">),</span>
+        <span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">)</span>
+    <span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_with_timestamp</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">)</span>
+    <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">metadata_DOAJ</span><span class="p">))</span>
+    <span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
+
+    <span class="c1"># Copy file</span>
+    <span class="n">path_without_timestamp</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{issue}</span><span class="s1">/</span><span class="si">{paper}</span><span class="s1">/</span><span class="si">{doi}</span><span class="s1">_DOAJ.json&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+        <span class="n">issue</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">path</span><span class="p">,</span>
+        <span class="n">paper</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">get_paper_nr</span><span class="p">(),</span>
+        <span class="n">doi</span><span class="o">=</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">))</span>
+    <span class="n">shutil</span><span class="o">.</span><span class="n">copyfile</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_with_timestamp</span><span class="p">,</span>
+                    <span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT</span> <span class="o">+</span> <span class="n">path_without_timestamp</span><span class="p">)</span>
+
+    <span class="c1"># Save the database entry</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">metadata_DOAJ_file</span> <span class="o">=</span> <span class="n">path_with_timestamp</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;&lt;h3&gt;</span><span class="si">%s</span><span class="s1">&lt;/h3&gt;Successfull deposit of metadata DOAJ.&#39;</span>
+                              <span class="o">%</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_doaj_deposit_success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">deposit_id</span><span class="p">,</span> <span class="n">success</span><span class="p">):</span>
+    <span class="n">deposit</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">DOAJDeposit</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">deposit_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="k">elif</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                    <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">deposit</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="p">}))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">harvest_citedby_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publications&#39;</span><span class="p">:</span> <span class="n">publications</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/harvest_citedby_list.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<span class="k">def</span> <span class="nf">harvest_citedby_links</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="c1"># create a doi_batch_id</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
+        <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span><span class="p">)</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">10</span><span class="p">]</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="n">idsalt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">salt</span><span class="o">+</span><span class="n">idsalt</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+    <span class="n">query_xml</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&lt;?xml version = &quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;query_batch version=&quot;2.0&quot; xmlns = &quot;http://www.crossref.org/qschema/2.0&quot;&#39;</span>
+                 <span class="s1">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#39;</span>
+                 <span class="s1">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/qschema/2.0 &#39;</span>
+                 <span class="s1">&#39;http://www.crossref.org/qschema/crossref_query_input2.0.xsd&quot;&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;head&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;email_address&gt;&#39;</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_DEPOSIT_EMAIL</span> <span class="o">+</span> <span class="s1">&#39;&lt;/email_address&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">doi_batch_id</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi_batch_id&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;/head&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;body&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;fl_query alert=&quot;false&quot;&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;/fl_query&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;/body&gt;&#39;</span>
+                 <span class="s1">&#39;&lt;/query_batch&gt;&#39;</span><span class="p">)</span>
+    <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://doi.crossref.org/servlet/getForwardLinks&#39;</span>
+    <span class="n">params</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;usr&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_ID</span><span class="p">,</span>
+              <span class="s1">&#39;pwd&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_PASSWORD</span><span class="p">,</span>
+              <span class="s1">&#39;qdata&#39;</span><span class="p">:</span> <span class="n">query_xml</span><span class="p">,</span>
+              <span class="s1">&#39;doi&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span> <span class="p">}</span>
+    <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">r</span><span class="o">.</span><span class="n">status_code</span> <span class="o">==</span> <span class="mi">401</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Crossref credentials are invalid.&lt;/h3&gt;&#39;</span>
+                                   <span class="s1">&#39;Please contact the SciPost Admin.&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_metadata&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;doi_label&#39;</span><span class="p">:</span> <span class="n">doi_label</span><span class="p">}))</span>
+    <span class="n">response_headers</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">headers</span>
+    <span class="n">response_text</span> <span class="o">=</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span>
+    <span class="n">response_deserialized</span> <span class="o">=</span> <span class="n">ET</span><span class="o">.</span><span class="n">fromstring</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+    <span class="n">prefix</span> <span class="o">=</span> <span class="s1">&#39;{http://www.crossref.org/qrschema/2.0}&#39;</span>
+    <span class="n">citations</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="k">for</span> <span class="n">link</span> <span class="ow">in</span> <span class="n">response_deserialized</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;forward_link&#39;</span><span class="p">):</span>
+        <span class="n">doi</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;doi&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="n">article_title</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;article_title&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">journal_abbreviation</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span>
+                <span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_abbreviation&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">journal_abbreviation</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">volume</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;volume&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+            <span class="n">volume</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">first_page</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;first_page&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">first_page</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">item_number</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;item_number&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="k">except</span><span class="p">:</span>
+            <span class="n">item_number</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="n">multiauthors</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span>
+                <span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;contributors&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">iter</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;contributor&#39;</span><span class="p">):</span>
+            <span class="k">if</span> <span class="n">author</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;sequence&#39;</span><span class="p">)</span> <span class="o">==</span> <span class="s1">&#39;first&#39;</span><span class="p">:</span>
+                <span class="n">first_author_given_name</span> <span class="o">=</span> <span class="n">author</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;given_name&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+                <span class="n">first_author_surname</span> <span class="o">=</span> <span class="n">author</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;surname&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">multiauthors</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="n">year</span> <span class="o">=</span> <span class="n">link</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;journal_cite&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">prefix</span> <span class="o">+</span> <span class="s1">&#39;year&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">text</span>
+        <span class="n">citations</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s1">&#39;doi&#39;</span><span class="p">:</span> <span class="n">doi</span><span class="p">,</span>
+                          <span class="s1">&#39;article_title&#39;</span><span class="p">:</span> <span class="n">article_title</span><span class="p">,</span>
+                          <span class="s1">&#39;journal_abbreviation&#39;</span><span class="p">:</span> <span class="n">journal_abbreviation</span><span class="p">,</span>
+                          <span class="s1">&#39;first_author_given_name&#39;</span><span class="p">:</span> <span class="n">first_author_given_name</span><span class="p">,</span>
+                          <span class="s1">&#39;first_author_surname&#39;</span><span class="p">:</span> <span class="n">first_author_surname</span><span class="p">,</span>
+                          <span class="s1">&#39;multiauthors&#39;</span><span class="p">:</span> <span class="n">multiauthors</span><span class="p">,</span>
+                          <span class="s1">&#39;volume&#39;</span><span class="p">:</span> <span class="n">volume</span><span class="p">,</span>
+                          <span class="s1">&#39;first_page&#39;</span><span class="p">:</span> <span class="n">first_page</span><span class="p">,</span>
+                          <span class="s1">&#39;item_number&#39;</span><span class="p">:</span> <span class="n">item_number</span><span class="p">,</span>
+                          <span class="s1">&#39;year&#39;</span><span class="p">:</span> <span class="n">year</span><span class="p">,</span> <span class="p">})</span>
+    <span class="n">publication</span><span class="o">.</span><span class="n">citedby</span> <span class="o">=</span> <span class="n">citations</span>
+    <span class="n">publication</span><span class="o">.</span><span class="n">latest_citedby_update</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;response_headers&#39;</span><span class="p">:</span> <span class="n">response_headers</span><span class="p">,</span>
+        <span class="s1">&#39;response_text&#39;</span><span class="p">:</span> <span class="n">response_text</span><span class="p">,</span>
+        <span class="s1">&#39;response_deserialized&#39;</span><span class="p">:</span> <span class="n">response_deserialized</span><span class="p">,</span>
+        <span class="s1">&#39;citations&#39;</span><span class="p">:</span> <span class="n">citations</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/harvest_citedby_links.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="sign_existing_report"><a class="viewcode-back" href="../../apps/journals.html#journals.views.sign_existing_report">[docs]</a><span class="k">def</span> <span class="nf">sign_existing_report</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">report_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Allows the author of a Report, originally submitted anonymously,</span>
+<span class="sd">    to sign the Report.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">report_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">report</span><span class="o">.</span><span class="n">author</span> <span class="o">!=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;Only the author of this Report can change its anonymity status&#39;</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/error.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;errormessage&#39;</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">})</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ConfirmationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;confirm&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span><span class="p">:</span>
+            <span class="n">report</span><span class="o">.</span><span class="n">anonymous</span> <span class="o">=</span> <span class="kc">False</span>
+            <span class="n">report</span><span class="o">.</span><span class="n">doideposit_needs_updating</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">report</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your Report is now publicly signed.&#39;</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Report signing operation cancelled.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/sign_existing_report.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="manage_report_metadata"><a class="viewcode-back" href="../../apps/journals.html#journals.views.manage_report_metadata">[docs]</a><span class="k">def</span> <span class="nf">manage_report_metadata</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This page offers Editorial Administrators tools for managing</span>
+<span class="sd">    the metadata of Reports.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">reports</span> <span class="o">=</span> <span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+    <span class="n">paginator</span> <span class="o">=</span> <span class="n">Paginator</span><span class="p">(</span><span class="n">reports</span><span class="p">,</span> <span class="mi">25</span><span class="p">)</span>
+
+    <span class="n">page</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;page&#39;</span><span class="p">)</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">reports</span> <span class="o">=</span> <span class="n">paginator</span><span class="o">.</span><span class="n">page</span><span class="p">(</span><span class="n">page</span><span class="p">)</span>
+    <span class="k">except</span> <span class="n">PageNotAnInteger</span><span class="p">:</span>
+        <span class="n">reports</span> <span class="o">=</span> <span class="n">paginator</span><span class="o">.</span><span class="n">page</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
+    <span class="k">except</span> <span class="n">EmptyPage</span><span class="p">:</span>
+        <span class="n">reports</span> <span class="o">=</span> <span class="n">paginator</span><span class="o">.</span><span class="n">page</span><span class="p">(</span><span class="n">paginator</span><span class="o">.</span><span class="n">num_pages</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;reports&#39;</span><span class="p">:</span> <span class="n">reports</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/manage_report_metadata.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="manage_comment_metadata"><a class="viewcode-back" href="../../apps/journals.html#journals.views.manage_comment_metadata">[docs]</a><span class="k">def</span> <span class="nf">manage_comment_metadata</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This page offers Editorial Administrators tools for managing</span>
+<span class="sd">    the metadata of Comments.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;comments&#39;</span><span class="p">:</span> <span class="n">comments</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/manage_comment_metadata.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_report_doi_needed</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">report_id</span><span class="p">,</span> <span class="n">needed</span><span class="p">):</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">report_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">needed</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+        <span class="n">report</span><span class="o">.</span><span class="n">needs_doi</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="k">elif</span> <span class="n">needed</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+        <span class="n">report</span><span class="o">.</span><span class="n">needs_doi</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">report</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_report_metadata&#39;</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_comment_doi_needed</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">comment_id</span><span class="p">,</span> <span class="n">needed</span><span class="p">):</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">comment_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">needed</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+        <span class="n">comment</span><span class="o">.</span><span class="n">needs_doi</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="k">elif</span> <span class="n">needed</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+        <span class="n">comment</span><span class="o">.</span><span class="n">needs_doi</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">comment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_comment_metadata&#39;</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="generic_metadata_xml_deposit"><a class="viewcode-back" href="../../apps/journals.html#journals.views.generic_metadata_xml_deposit">[docs]</a><span class="k">def</span> <span class="nf">generic_metadata_xml_deposit</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method creates the metadata for non-Publication objects</span>
+<span class="sd">    such as Reports and Comments, and deposits the metadata to</span>
+<span class="sd">    Crossref.</span>
+<span class="sd">    If there exists a relation to a SciPost-published object,</span>
+<span class="sd">    the deposit uses Crossref&#39;s peer review content type.</span>
+<span class="sd">    Otherwise the deposit is done as a dataset.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">type_of_object</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;type_of_object&#39;</span><span class="p">]</span>
+    <span class="n">object_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;object_id&#39;</span><span class="p">])</span>
+
+    <span class="k">if</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s1">&#39;report&#39;</span><span class="p">:</span>
+        <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s1">&#39;comment&#39;</span><span class="p">:</span>
+        <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+
+    <span class="n">relation_to_published</span> <span class="o">=</span> <span class="n">_object</span><span class="o">.</span><span class="n">relation_to_published</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">_object</span><span class="o">.</span><span class="n">doi_label</span><span class="p">:</span>
+        <span class="n">_object</span><span class="o">.</span><span class="n">create_doi_label</span><span class="p">()</span>
+
+    <span class="c1"># create a doi_batch_id</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
+    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
+        <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span> <span class="o">+</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span><span class="p">)</span>
+    <span class="n">salt</span> <span class="o">=</span> <span class="n">salt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">_object</span><span class="p">)[:</span><span class="mi">10</span><span class="p">]</span>
+    <span class="n">idsalt</span> <span class="o">=</span> <span class="n">idsalt</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y%m</span><span class="si">%d</span><span class="s1">%H%M%S&#39;</span><span class="p">)</span>
+    <span class="n">doi_batch_id</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">salt</span><span class="o">+</span><span class="n">idsalt</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+    <span class="n">metadata_xml</span> <span class="o">=</span> <span class="p">(</span>
+        <span class="s1">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_batch version=&quot;4.4.1&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.1&quot; &#39;</span>
+        <span class="s1">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>
+        <span class="s1">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.1 &#39;</span>
+        <span class="s1">&#39;http://www.crossref.org/shema/deposit/crossref4.4.1.xsd&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;head&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">doi_batch_id</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi_batch_id&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;timestamp&gt;&#39;</span> <span class="o">+</span> <span class="n">timestamp</span> <span class="o">+</span> <span class="s1">&#39;&lt;/timestamp&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;depositor&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;email_address&gt;&#39;</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_DEPOSIT_EMAIL</span> <span class="o">+</span> <span class="s1">&#39;&lt;/email_address&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/depositor&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="s1">&#39;&lt;/head&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+    <span class="p">)</span>
+    <span class="k">if</span> <span class="n">relation_to_published</span><span class="p">:</span>
+        <span class="n">metadata_xml</span> <span class="o">+=</span> <span class="p">(</span>
+            <span class="s1">&#39;&lt;body&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;peer_review stage=&quot;&#39;</span> <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;stage&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;contributors&gt;&#39;</span>
+        <span class="p">)</span>
+        <span class="k">if</span> <span class="n">_object</span><span class="o">.</span><span class="n">anonymous</span><span class="p">:</span>
+            <span class="n">metadata_xml</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;anonymous sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>
+                <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;contributor_role&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&quot;/&gt;&#39;</span>
+            <span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">metadata_xml</span> <span class="o">+=</span> <span class="p">(</span>
+                <span class="s1">&#39;&lt;person_name sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>
+                <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;contributor_role&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&quot;&gt;&#39;</span>
+                <span class="s1">&#39;&lt;given_name&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/given_name&gt;&#39;</span>
+                <span class="s1">&#39;&lt;surname&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/surname&gt;&#39;</span>
+                <span class="s1">&#39;&lt;/person_name&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="p">)</span>
+
+        <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">_object</span><span class="p">,</span> <span class="n">Publication</span><span class="p">):</span>
+            <span class="n">url_to_declare</span> <span class="o">=</span> <span class="s1">&#39;https://scipost.org</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">url_to_declare</span> <span class="o">=</span> <span class="s1">&#39;https://scipost.org/</span><span class="si">{}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">_object</span><span class="o">.</span><span class="n">doi_label</span><span class="p">)</span>
+
+        <span class="n">metadata_xml</span> <span class="o">+=</span> <span class="p">(</span>
+            <span class="s1">&#39;&lt;/contributors&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;review_date&gt;&#39;</span>
+            <span class="s1">&#39;&lt;month&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%m&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/month&gt;&#39;</span>
+            <span class="s1">&#39;&lt;day&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/day&gt;&#39;</span>
+            <span class="s1">&#39;&lt;year&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;&lt;/year&gt;&#39;</span>
+            <span class="s1">&#39;&lt;/review_date&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;program xmlns=&quot;http://www.crossref.org/relations.xsd&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;related_item&gt;&#39;</span>
+            <span class="s1">&#39;&lt;description&gt;&#39;</span> <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&lt;/description&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;inter_work_relation relationship-type=&quot;isReviewOf&quot; identifier-type=&quot;doi&quot;&gt;&#39;</span>
+            <span class="o">+</span> <span class="n">relation_to_published</span><span class="p">[</span><span class="s1">&#39;isReviewOfDOI&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;&lt;/inter_work_relation&gt;&lt;/related_item&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/program&gt;&#39;</span>
+            <span class="s1">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;resource&gt;&#39;</span> <span class="o">+</span> <span class="n">url_to_declare</span> <span class="o">+</span>
+            <span class="s1">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/peer_review&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/body&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/doi_batch&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+        <span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">metadata_xml</span> <span class="o">+=</span> <span class="p">(</span>
+            <span class="s1">&#39;&lt;body&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;database&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;database_metadata language=&quot;en&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;titles&gt;&lt;title&gt;SciPost Reports and Comments&lt;/title&gt;&lt;/titles&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/database_metadata&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;dataset dataset_type=&quot;collection&quot;&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">doi_string</span> <span class="o">+</span> <span class="s1">&#39;&lt;/doi&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;resource&gt;https://scipost.org&#39;</span> <span class="o">+</span> <span class="n">_object</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">()</span> <span class="o">+</span>
+            <span class="s1">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/dataset&gt;&lt;/database&gt;</span><span class="se">\n</span><span class="s1">&#39;</span>
+            <span class="s1">&#39;&lt;/body&gt;&lt;/doi_batch&gt;&#39;</span>
+        <span class="p">)</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_DEBUG</span><span class="p">:</span>
+        <span class="c1"># CAUTION: Debug is False, production goes for real deposit!!!</span>
+        <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">url</span> <span class="o">=</span> <span class="s1">&#39;http://test.crossref.org/servlet/deposit&#39;</span>
+    <span class="n">params</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;operation&#39;</span><span class="p">:</span> <span class="s1">&#39;doMDUpload&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;login_id&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_ID</span><span class="p">,</span>
+        <span class="s1">&#39;login_passwd&#39;</span><span class="p">:</span> <span class="n">settings</span><span class="o">.</span><span class="n">CROSSREF_LOGIN_PASSWORD</span><span class="p">,</span>
+        <span class="p">}</span>
+    <span class="n">files</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;fname&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;metadata.xml&#39;</span><span class="p">,</span> <span class="n">metadata_xml</span><span class="p">,</span> <span class="s1">&#39;multipart/form-data&#39;</span><span class="p">)}</span>
+    <span class="n">r</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">url</span><span class="p">,</span> <span class="n">params</span><span class="o">=</span><span class="n">params</span><span class="p">,</span> <span class="n">files</span><span class="o">=</span><span class="n">files</span><span class="p">)</span>
+    <span class="n">deposit</span> <span class="o">=</span> <span class="n">GenericDOIDeposit</span><span class="p">(</span><span class="n">content_type</span><span class="o">=</span><span class="n">ContentType</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_for_model</span><span class="p">(</span><span class="n">_object</span><span class="p">),</span>
+                                <span class="n">object_id</span><span class="o">=</span><span class="n">object_id</span><span class="p">,</span>
+                                <span class="n">content_object</span><span class="o">=</span><span class="n">_object</span><span class="p">,</span>
+                                <span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">,</span>
+                                <span class="n">doi_batch_id</span><span class="o">=</span><span class="n">doi_batch_id</span><span class="p">,</span>
+                                <span class="n">metadata_xml</span><span class="o">=</span><span class="n">metadata_xml</span><span class="p">,</span>
+                                <span class="n">deposition_date</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+                                <span class="n">response</span><span class="o">=</span><span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">)</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;response_headers&#39;</span><span class="p">:</span> <span class="n">r</span><span class="o">.</span><span class="n">headers</span><span class="p">,</span>
+        <span class="s1">&#39;response_text&#39;</span><span class="p">:</span> <span class="n">r</span><span class="o">.</span><span class="n">text</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/generic_metadata_xml_deposit.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">mark_generic_deposit_success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">deposit_id</span><span class="p">,</span> <span class="n">success</span><span class="p">):</span>
+    <span class="n">deposit</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">GenericDOIDeposit</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">deposit_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">doideposit_needs_updating</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">content_object</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">elif</span> <span class="n">success</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+        <span class="n">deposit</span><span class="o">.</span><span class="n">deposit_successful</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">deposit</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">if</span> <span class="n">deposit</span><span class="o">.</span><span class="n">content_type</span><span class="o">.</span><span class="n">name</span> <span class="o">==</span> <span class="s1">&#39;report&#39;</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_report_metadata&#39;</span><span class="p">))</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_comment_metadata&#39;</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_publish_accepted_submission&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="email_object_made_citable"><a class="viewcode-back" href="../../apps/journals.html#journals.views.email_object_made_citable">[docs]</a><span class="k">def</span> <span class="nf">email_object_made_citable</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method sends an email to the author of a Report or a Comment,</span>
+<span class="sd">    to notify that the object has been made citable (doi registered).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">type_of_object</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;type_of_object&#39;</span><span class="p">]</span>
+    <span class="n">object_id</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;object_id&#39;</span><span class="p">])</span>
+
+    <span class="k">if</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s1">&#39;report&#39;</span><span class="p">:</span>
+        <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+        <span class="n">redirect_to</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_report_metadata&#39;</span><span class="p">)</span>
+        <span class="n">publication_citation</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="n">publication_doi</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+                <span class="n">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="n">_object</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span>
+            <span class="n">publication_citation</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">citation</span><span class="p">()</span>
+            <span class="n">publication_doi</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span>
+        <span class="k">except</span> <span class="n">Publication</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">pass</span>
+    <span class="k">elif</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s1">&#39;comment&#39;</span><span class="p">:</span>
+        <span class="n">_object</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">object_id</span><span class="p">)</span>
+        <span class="n">redirect_to</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;journals:manage_comment_metadata&#39;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">_object</span><span class="o">.</span><span class="n">doi_label</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;This object does not have a DOI yet.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">redirect_to</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">type_of_object</span> <span class="o">==</span> <span class="s1">&#39;report&#39;</span><span class="p">:</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">_object</span><span class="p">,</span>
+                           <span class="s1">&#39;publication_citation&#39;</span><span class="p">:</span> <span class="n">publication_citation</span><span class="p">,</span>
+                           <span class="s1">&#39;publication_doi&#39;</span><span class="p">:</span> <span class="n">publication_doi</span><span class="p">})</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">email_report_made_citable</span><span class="p">()</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;comment&#39;</span><span class="p">:</span> <span class="n">_object</span><span class="p">,</span> <span class="p">})</span>
+        <span class="n">JournalUtils</span><span class="o">.</span><span class="n">email_comment_made_citable</span><span class="p">()</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Email sent&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">redirect_to</span><span class="p">)</span></div>
+
+
+<span class="c1">###########</span>
+<span class="c1"># Viewing #</span>
+<span class="c1">###########</span>
+
+<span class="k">def</span> <span class="nf">report_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">(),</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+
+<span class="k">def</span> <span class="nf">comment_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span><span class="o">.</span><span class="n">regular_comments</span><span class="p">(),</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+
+<span class="k">def</span> <span class="nf">author_reply_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">comment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span><span class="o">.</span><span class="n">author_replies</span><span class="p">(),</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">comment</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+
+<span class="k">def</span> <span class="nf">publication_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_published</span><span class="p">(</span><span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">publication</span><span class="o">.</span><span class="n">in_issue</span><span class="o">.</span><span class="n">in_volume</span><span class="o">.</span><span class="n">in_journal</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="p">,</span>
+        <span class="s1">&#39;journal&#39;</span><span class="p">:</span> <span class="n">journal</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;journals/publication_detail.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">publication_detail_pdf</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_published</span><span class="p">(</span><span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">response</span> <span class="o">=</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">publication</span><span class="o">.</span><span class="n">pdf_file</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">&#39;application/pdf&#39;</span><span class="p">)</span>
+    <span class="n">response</span><span class="p">[</span><span class="s1">&#39;Content-Disposition&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;filename=&#39;</span>
+                                       <span class="o">+</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_label</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="s1">&#39;_&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;.pdf&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">response</span>
+
+
+<span class="c1">######################</span>
+<span class="c1"># Feed DOIs to arXiv #</span>
+<span class="c1">######################</span>
+
+<span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">This method provides arXiv with the doi and journal ref of the 100 most recent</span>
+<span class="sd">publications in the journal specified by doi_label.</span>
+<span class="sd">&quot;&quot;&quot;</span>
+<span class="k">def</span> <span class="nf">arxiv_doi_feed</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">doi_label</span><span class="p">):</span>
+    <span class="n">journal</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Journal</span><span class="p">,</span> <span class="n">doi_label</span><span class="o">=</span><span class="n">doi_label</span><span class="p">)</span>
+    <span class="n">feedxml</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&lt;preprint xmlns=&quot;http://arxiv.org/doi_feed&quot; &#39;</span>
+               <span class="s1">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>
+               <span class="s1">&#39;identifier=&quot;SciPost.org &#39;</span> <span class="o">+</span> <span class="n">doi_label</span> <span class="o">+</span> <span class="s1">&#39; arXiv.org DOI feed&quot; &#39;</span>
+               <span class="s1">&#39;version=&quot;DOI SnappyFeed v1.0&quot; &#39;</span>
+               <span class="s1">&#39;xsi:schemaLocation=&quot;http://arxiv.org/doi_feed &#39;</span>
+               <span class="s1">&#39;http://arxiv.org/schemas/doi_feed.xsd&quot;&gt;&#39;</span><span class="p">)</span>
+    <span class="n">now</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">feedxml</span> <span class="o">+=</span> <span class="s1">&#39;&lt;date year=&quot;</span><span class="si">%s</span><span class="s1">&quot; month=&quot;</span><span class="si">%s</span><span class="s1">&quot; day=&quot;</span><span class="si">%s</span><span class="s1">&quot; /&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">),</span>
+                                                           <span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%m&#39;</span><span class="p">),</span> <span class="n">now</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">))</span>
+    <span class="n">publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">in_issue__in_volume__in_journal</span><span class="o">=</span><span class="n">journal</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">)[:</span><span class="mi">100</span><span class="p">]</span>
+    <span class="k">for</span> <span class="n">publication</span> <span class="ow">in</span> <span class="n">publications</span><span class="p">:</span>
+        <span class="n">feedxml</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&lt;article preprint_id=&quot;</span><span class="si">%s</span><span class="s1">&quot; doi=&quot;</span><span class="si">%s</span><span class="s1">&quot; journal_ref=&quot;</span><span class="si">%s</span><span class="s1">&quot; /&gt;&#39;</span> <span class="o">%</span> <span class="p">(</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">accepted_submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">,</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">citation</span><span class="p">()))</span>
+    <span class="n">feedxml</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&lt;/preprint&gt;&#39;</span>
+    <span class="k">return</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">feedxml</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">&#39;text/xml&#39;</span><span class="p">)</span>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/scipost/models.html b/docs/codebase/_build/html/_modules/scipost/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..f896addf00e578018c1362464e23823560394cd8
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/scipost/models.html
@@ -0,0 +1,514 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>scipost.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>scipost.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for scipost.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">hashlib</span>
+<span class="kn">import</span> <span class="nn">random</span>
+<span class="kn">import</span> <span class="nn">string</span>
+
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="k">import</span> <span class="n">get_user_model</span>
+<span class="kn">from</span> <span class="nn">django.contrib.postgres.fields</span> <span class="k">import</span> <span class="n">ArrayField</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+
+<span class="kn">from</span> <span class="nn">.behaviors</span> <span class="k">import</span> <span class="n">TimeStampedModel</span>
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span>\
+                       <span class="n">subject_areas_dict</span><span class="p">,</span> <span class="n">CONTRIBUTOR_STATUS</span><span class="p">,</span> <span class="n">TITLE_CHOICES</span><span class="p">,</span>\
+                       <span class="n">INVITATION_STYLE</span><span class="p">,</span> <span class="n">INVITATION_TYPE</span><span class="p">,</span>\
+                       <span class="n">INVITATION_CONTRIBUTOR</span><span class="p">,</span> <span class="n">INVITATION_FORMAL</span><span class="p">,</span>\
+                       <span class="n">AUTHORSHIP_CLAIM_PENDING</span><span class="p">,</span> <span class="n">AUTHORSHIP_CLAIM_STATUS</span><span class="p">,</span>\
+                       <span class="n">CONTRIBUTOR_NEWLY_REGISTERED</span>
+<span class="kn">from</span> <span class="nn">.fields</span> <span class="k">import</span> <span class="n">ChoiceArrayField</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">FellowManager</span><span class="p">,</span> <span class="n">ContributorQuerySet</span><span class="p">,</span>\
+                      <span class="n">UnavailabilityPeriodManager</span><span class="p">,</span> <span class="n">AuthorshipClaimQuerySet</span>
+
+<span class="n">today</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">date</span><span class="p">()</span>
+
+
+<div class="viewcode-block" id="get_sentinel_user"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.get_sentinel_user">[docs]</a><span class="k">def</span> <span class="nf">get_sentinel_user</span><span class="p">():</span>
+    <span class="sd">&#39;&#39;&#39;</span>
+<span class="sd">    Temporary fix: eventually the &#39;to-be-removed-Contributor&#39; should be</span>
+<span class="sd">    status: &quot;deactivated&quot; and anonymized.</span>
+<span class="sd">    Fallback user for models relying on Contributor that is being deleted.</span>
+<span class="sd">    &#39;&#39;&#39;</span>
+    <span class="n">user</span><span class="p">,</span> <span class="n">__</span> <span class="o">=</span> <span class="n">get_user_model</span><span class="p">()</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_or_create</span><span class="p">(</span><span class="n">username</span><span class="o">=</span><span class="s1">&#39;deleted&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_or_create</span><span class="p">(</span><span class="n">status</span><span class="o">=-</span><span class="mi">4</span><span class="p">,</span> <span class="n">user</span><span class="o">=</span><span class="n">user</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div>
+
+
+<div class="viewcode-block" id="Contributor"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.Contributor">[docs]</a><span class="k">class</span> <span class="nc">Contributor</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    All *science* users of SciPost are Contributors.</span>
+<span class="sd">    username, password, email, first_name and last_name are inherited from User.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">user</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">OneToOneField</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">AUTH_USER_MODEL</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">PROTECT</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">invitation_key</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">activation_key</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">key_expires</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">CONTRIBUTOR_NEWLY_REGISTERED</span><span class="p">,</span>
+                                      <span class="n">choices</span><span class="o">=</span><span class="n">CONTRIBUTOR_STATUS</span><span class="p">)</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">TITLE_CHOICES</span><span class="p">)</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span>
+                                  <span class="n">default</span><span class="o">=</span><span class="s1">&#39;physics&#39;</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;Main discipline&#39;</span><span class="p">)</span>
+    <span class="n">expertises</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span>
+        <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">),</span>
+        <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">orcid_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;ORCID id&quot;</span><span class="p">,</span>
+                                <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">address</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;address&quot;</span><span class="p">,</span>
+                               <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">personalwebpage</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;personal web page&#39;</span><span class="p">,</span>
+                                      <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;self&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">SET</span><span class="p">(</span><span class="n">get_sentinel_user</span><span class="p">),</span>
+                                  <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;contrib_vetted_by&quot;</span><span class="p">,</span>
+                                  <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">accepts_SciPost_emails</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span>
+        <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;I accept to receive SciPost emails&quot;</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">ContributorQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">, </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">activation_key</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">generate_key</span><span class="p">()</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:contributor_info&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,))</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">get_formal_display</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">is_currently_available</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">unavailability_periods</span><span class="o">.</span><span class="n">today</span><span class="p">()</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">is_EdCol_Admin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;Editorial Administrators&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+                <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">is_SP_Admin</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;SciPost Administrators&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+                <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">is_MEC</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">fellowships</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span>
+
+    <span class="k">def</span> <span class="nf">is_VE</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;Vetting Editors&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+                <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">)</span>
+
+<div class="viewcode-block" id="Contributor.generate_key"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.Contributor.generate_key">[docs]</a>    <span class="k">def</span> <span class="nf">generate_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">feed</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Generate and save a new activation_key for the contributor, given a certain feed.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
+            <span class="n">feed</span> <span class="o">+=</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span><span class="p">)</span>
+        <span class="n">feed</span> <span class="o">=</span> <span class="n">feed</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+        <span class="n">salt</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">username</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s1">&#39;utf8&#39;</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">activation_key</span> <span class="o">=</span> <span class="n">hashlib</span><span class="o">.</span><span class="n">sha1</span><span class="p">(</span><span class="n">salt</span><span class="o">+</span><span class="n">salt</span><span class="p">)</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">key_expires</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="nf">expertises_as_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">expertises</span><span class="p">:</span>
+            <span class="k">return</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">subject_areas_dict</span><span class="p">[</span><span class="n">exp</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">exp</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">expertises</span><span class="p">])</span>
+        <span class="k">return</span> <span class="s1">&#39;&#39;</span></div>
+
+
+<div class="viewcode-block" id="UnavailabilityPeriod"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.UnavailabilityPeriod">[docs]</a><span class="k">class</span> <span class="nc">UnavailabilityPeriod</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                    <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;unavailability_periods&#39;</span><span class="p">)</span>
+    <span class="n">start</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">()</span>
+    <span class="n">end</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">()</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">UnavailabilityPeriodManager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-start&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> (</span><span class="si">%s</span><span class="s1"> to </span><span class="si">%s</span><span class="s1">)&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">end</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="Remark"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.Remark">[docs]</a><span class="k">class</span> <span class="nc">Remark</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">feedback</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;virtualmeetings.Feedback&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                 <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">nomination</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;virtualmeetings.Nomination&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">motion</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;virtualmeetings.Motion&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                               <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.EICRecommendation&#39;</span><span class="p">,</span>
+                                       <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                       <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">auto_now_add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">remark</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">default_related_name</span> <span class="o">=</span> <span class="s1">&#39;remarks&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span>
+                <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39; on &#39;</span>
+                <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">&quot;%Y-%m-</span><span class="si">%d</span><span class="s2">&quot;</span><span class="p">))</span></div>
+
+
+<span class="c1">###############</span>
+<span class="c1"># Invitations #</span>
+<span class="c1">###############</span>
+
+<div class="viewcode-block" id="DraftInvitation"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.DraftInvitation">[docs]</a><span class="k">class</span> <span class="nc">DraftInvitation</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Draft of an invitation, filled in by an officer.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">TITLE_CHOICES</span><span class="p">)</span>
+    <span class="n">first_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">last_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">email</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">EmailField</span><span class="p">()</span>
+    <span class="n">invitation_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">INVITATION_TYPE</span><span class="p">,</span>
+                                       <span class="n">default</span><span class="o">=</span><span class="n">INVITATION_CONTRIBUTOR</span><span class="p">)</span>
+    <span class="n">cited_in_submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span>
+                                            <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                            <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">cited_in_publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span>
+                                             <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                             <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">drafted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">date_drafted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">auto_now_add</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">processed</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">invitation_type</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="RegistrationInvitation"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.RegistrationInvitation">[docs]</a><span class="k">class</span> <span class="nc">RegistrationInvitation</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Deprecated: Use the `invitations` app</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">TITLE_CHOICES</span><span class="p">)</span>
+    <span class="n">first_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">last_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">email</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">EmailField</span><span class="p">()</span>
+    <span class="n">invitation_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">INVITATION_TYPE</span><span class="p">,</span>
+                                       <span class="n">default</span><span class="o">=</span><span class="n">INVITATION_CONTRIBUTOR</span><span class="p">)</span>
+    <span class="n">cited_in_submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span>
+                                            <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                            <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;registration_invitations&#39;</span><span class="p">)</span>
+    <span class="n">cited_in_publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span>
+                                             <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                             <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">message_style</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">INVITATION_STYLE</span><span class="p">,</span>
+                                     <span class="n">default</span><span class="o">=</span><span class="n">INVITATION_FORMAL</span><span class="p">)</span>
+    <span class="n">personal_message</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">invitation_key</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">key_expires</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">date_sent</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">invited_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">nr_reminders</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">date_last_reminded</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">responded</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">declined</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="CitationNotification"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.CitationNotification">[docs]</a><span class="k">class</span> <span class="nc">CitationNotification</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Deprecated: Use the `invitations` app</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">cited_in_submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span>
+                                            <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                            <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">cited_in_publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span>
+                                             <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                             <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">processed</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="AuthorshipClaim"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.AuthorshipClaim">[docs]</a><span class="k">class</span> <span class="nc">AuthorshipClaim</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">claimant</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span>
+                                 <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                 <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;claimant&#39;</span><span class="p">)</span>
+    <span class="n">publication</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;journals.Publication&#39;</span><span class="p">,</span>
+                                    <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                    <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">commentary</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;commentaries.Commentary&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">thesislink</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;theses.ThesisLink&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span>
+                                  <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                  <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">AUTHORSHIP_CLAIM_STATUS</span><span class="p">,</span>
+                                      <span class="n">default</span><span class="o">=</span><span class="n">AUTHORSHIP_CLAIM_PENDING</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">AuthorshipClaimQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span></div>
+
+
+<div class="viewcode-block" id="PrecookedEmail"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.PrecookedEmail">[docs]</a><span class="k">class</span> <span class="nc">PrecookedEmail</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Each instance contains an email template in both plain and html formats.</span>
+<span class="sd">    Can only be created by Admins.</span>
+<span class="sd">    For further use in scipost:send_precooked_email method.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">email_subject</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
+    <span class="n">email_text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+    <span class="n">email_text_html</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+    <span class="n">date_created</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">emailed_to</span> <span class="o">=</span> <span class="n">ArrayField</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">EmailField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">date_last_used</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">deprecated</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">email_subject</span></div>
+
+
+<span class="c1">######################</span>
+<span class="c1"># Static info models #</span>
+<span class="c1">######################</span>
+
+<div class="viewcode-block" id="EditorialCollege"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.EditorialCollege">[docs]</a><span class="k">class</span> <span class="nc">EditorialCollege</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;A SciPost Editorial College for a specific discipline.&#39;&#39;&#39;</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span> <span class="n">unique</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">discipline</span></div>
+
+
+<div class="viewcode-block" id="EditorialCollegeFellowship"><a class="viewcode-back" href="../../apps/scipost.html#scipost.models.EditorialCollegeFellowship">[docs]</a><span class="k">class</span> <span class="nc">EditorialCollegeFellowship</span><span class="p">(</span><span class="n">TimeStampedModel</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Editorial College Fellowship connecting Editorial College and Contributors,</span>
+<span class="sd">    maybe with a limiting start/until date.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                    <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;+&#39;</span><span class="p">)</span>
+    <span class="n">college</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.EditorialCollege&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;fellowships&#39;</span><span class="p">)</span>
+    <span class="n">affiliation</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">start_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">until_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">FellowManager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;contributor&#39;</span><span class="p">,</span> <span class="s1">&#39;college&#39;</span><span class="p">,</span> <span class="s1">&#39;start_date&#39;</span><span class="p">,</span> <span class="s1">&#39;until_date&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="fm">__str__</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">is_active</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span><span class="p">:</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="p">:</span>
+                <span class="k">return</span> <span class="kc">True</span>
+            <span class="k">return</span> <span class="n">today</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span>
+        <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">today</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span>
+        <span class="k">return</span> <span class="n">today</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">start_date</span> <span class="ow">and</span> <span class="n">today</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">until_date</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/scipost/views.html b/docs/codebase/_build/html/_modules/scipost/views.html
new file mode 100644
index 0000000000000000000000000000000000000000..70ffa4c82aa7013ffa5f6928133f7ae09580bfc7
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/scipost/views.html
@@ -0,0 +1,1348 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>scipost.views &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>scipost.views</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for scipost.views</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">json</span>
+
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span><span class="p">,</span> <span class="n">render</span>
+<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
+<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">messages</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth</span> <span class="k">import</span> <span class="n">login</span><span class="p">,</span> <span class="n">logout</span><span class="p">,</span> <span class="n">update_session_auth_hash</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.decorators</span> <span class="k">import</span> <span class="n">login_required</span><span class="p">,</span> <span class="n">user_passes_test</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="k">import</span> <span class="n">Group</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.views</span> <span class="k">import</span> <span class="n">password_reset</span><span class="p">,</span> <span class="n">password_reset_confirm</span>
+<span class="kn">from</span> <span class="nn">django.core</span> <span class="k">import</span> <span class="n">mail</span>
+<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">PermissionDenied</span>
+<span class="kn">from</span> <span class="nn">django.core.mail</span> <span class="k">import</span> <span class="n">EmailMessage</span><span class="p">,</span> <span class="n">EmailMultiAlternatives</span>
+<span class="kn">from</span> <span class="nn">django.core.paginator</span> <span class="k">import</span> <span class="n">Paginator</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="k">import</span> <span class="n">Prefetch</span>
+<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">Http404</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">redirect</span>
+<span class="kn">from</span> <span class="nn">django.template</span> <span class="k">import</span> <span class="n">Context</span><span class="p">,</span> <span class="n">Template</span>
+<span class="kn">from</span> <span class="nn">django.views.decorators.http</span> <span class="k">import</span> <span class="n">require_POST</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.list</span> <span class="k">import</span> <span class="n">ListView</span>
+<span class="kn">from</span> <span class="nn">django.views.debug</span> <span class="k">import</span> <span class="n">cleanse_setting</span>
+<span class="kn">from</span> <span class="nn">django.views.static</span> <span class="k">import</span> <span class="n">serve</span>
+
+<span class="kn">from</span> <span class="nn">guardian.decorators</span> <span class="k">import</span> <span class="n">permission_required</span>
+<span class="kn">from</span> <span class="nn">haystack.generic_views</span> <span class="k">import</span> <span class="n">SearchView</span>
+
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span> <span class="n">subject_areas_raw_dict</span><span class="p">,</span> <span class="n">SciPost_from_addresses_dict</span><span class="p">,</span>\
+                       <span class="n">CONTRIBUTOR_NORMAL</span>
+<span class="kn">from</span> <span class="nn">.decorators</span> <span class="k">import</span> <span class="n">has_contributor</span>
+<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="n">Contributor</span><span class="p">,</span> <span class="n">UnavailabilityPeriod</span><span class="p">,</span>\
+                    <span class="n">AuthorshipClaim</span><span class="p">,</span> <span class="n">EditorialCollege</span><span class="p">,</span> <span class="n">EditorialCollegeFellowship</span>
+<span class="kn">from</span> <span class="nn">.forms</span> <span class="k">import</span> <span class="n">AuthenticationForm</span><span class="p">,</span> <span class="n">UnavailabilityPeriodForm</span><span class="p">,</span>\
+                   <span class="n">RegistrationForm</span><span class="p">,</span> <span class="n">AuthorshipClaimForm</span><span class="p">,</span>\
+                   <span class="n">SearchForm</span><span class="p">,</span> <span class="n">VetRegistrationForm</span><span class="p">,</span> <span class="n">reg_ref_dict</span><span class="p">,</span>\
+                   <span class="n">UpdatePersonalDataForm</span><span class="p">,</span> <span class="n">UpdateUserDataForm</span><span class="p">,</span> <span class="n">PasswordChangeForm</span><span class="p">,</span>\
+                   <span class="n">EmailGroupMembersForm</span><span class="p">,</span> <span class="n">EmailParticularForm</span><span class="p">,</span> <span class="n">SendPrecookedEmailForm</span>
+<span class="kn">from</span> <span class="nn">.utils</span> <span class="k">import</span> <span class="n">Utils</span><span class="p">,</span> <span class="n">EMAIL_FOOTER</span><span class="p">,</span> <span class="n">SCIPOST_SUMMARY_FOOTER</span><span class="p">,</span> <span class="n">SCIPOST_SUMMARY_FOOTER_HTML</span>
+
+<span class="kn">from</span> <span class="nn">affiliations.forms</span> <span class="k">import</span> <span class="n">AffiliationsFormset</span>
+<span class="kn">from</span> <span class="nn">colleges.permissions</span> <span class="k">import</span> <span class="n">fellowship_or_admin_required</span>
+<span class="kn">from</span> <span class="nn">commentaries.models</span> <span class="k">import</span> <span class="n">Commentary</span>
+<span class="kn">from</span> <span class="nn">comments.models</span> <span class="k">import</span> <span class="n">Comment</span>
+<span class="kn">from</span> <span class="nn">invitations.constants</span> <span class="k">import</span> <span class="n">STATUS_REGISTERED</span>
+<span class="kn">from</span> <span class="nn">invitations.models</span> <span class="k">import</span> <span class="n">RegistrationInvitation</span>
+<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">Publication</span><span class="p">,</span> <span class="n">Journal</span><span class="p">,</span> <span class="n">PublicationAuthorsTable</span>
+<span class="kn">from</span> <span class="nn">news.models</span> <span class="k">import</span> <span class="n">NewsItem</span>
+<span class="kn">from</span> <span class="nn">submissions.models</span> <span class="k">import</span> <span class="n">Submission</span><span class="p">,</span> <span class="n">RefereeInvitation</span><span class="p">,</span>\
+                               <span class="n">Report</span><span class="p">,</span> <span class="n">EICRecommendation</span>
+<span class="kn">from</span> <span class="nn">partners.models</span> <span class="k">import</span> <span class="n">MembershipAgreement</span>
+<span class="kn">from</span> <span class="nn">theses.models</span> <span class="k">import</span> <span class="n">ThesisLink</span>
+
+
+<span class="c1">##############</span>
+<span class="c1"># Utilitites #</span>
+<span class="c1">##############</span>
+
+<div class="viewcode-block" id="is_registered"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.is_registered">[docs]</a><span class="k">def</span> <span class="nf">is_registered</span><span class="p">(</span><span class="n">user</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method checks if user is activated assuming an validated user</span>
+<span class="sd">    has at least one permission group (`Registered Contributor` or `Partner Accounts`).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span></div>
+
+
+<span class="k">class</span> <span class="nc">SearchView</span><span class="p">(</span><span class="n">SearchView</span><span class="p">):</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;search/search.html&#39;</span>
+    <span class="n">form_class</span> <span class="o">=</span> <span class="n">SearchForm</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">ctx</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;search_query&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;q&#39;</span><span class="p">)</span>
+        <span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;results_count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;object_list&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+        <span class="c1"># Methods not supported by Whoosh engine</span>
+        <span class="c1"># ctx[&#39;stats_results&#39;] = kwargs[&#39;object_list&#39;].stats_results()</span>
+        <span class="c1"># ctx[&#39;facet_counts&#39;] = kwargs[&#39;object_list&#39;].facet(&#39;text&#39;).facet_counts()</span>
+        <span class="k">return</span> <span class="n">ctx</span>
+
+
+<span class="c1">#############</span>
+<span class="c1"># Main view</span>
+<span class="c1">#############</span>
+
+<div class="viewcode-block" id="index"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.index">[docs]</a><span class="k">def</span> <span class="nf">index</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;Main page.&#39;&#39;&#39;</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;latest_newsitem&#39;</span><span class="p">:</span> <span class="n">NewsItem</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">on_homepage</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">(),</span>
+        <span class="s1">&#39;submissions&#39;</span><span class="p">:</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-submission_date&#39;</span><span class="p">)[:</span><span class="mi">3</span><span class="p">],</span>
+        <span class="s1">&#39;journals&#39;</span><span class="p">:</span> <span class="n">Journal</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;name&#39;</span><span class="p">),</span>
+        <span class="s1">&#39;publications&#39;</span><span class="p">:</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">,</span>
+                                                                 <span class="s1">&#39;-paper_nr&#39;</span><span class="p">)[:</span><span class="mi">3</span><span class="p">],</span>
+        <span class="s1">&#39;current_agreements&#39;</span><span class="p">:</span> <span class="n">MembershipAgreement</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">now_active</span><span class="p">(),</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/index.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="protected_serve"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.protected_serve">[docs]</a><span class="k">def</span> <span class="nf">protected_serve</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">show_indexes</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!</span>
+<span class="sd">    This will be usefull eg. in the admin pages.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_authenticated</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">:</span>
+        <span class="c1"># Only superusers may get to see secure files without an explicit serve method!</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+    <span class="n">document_root</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">MEDIA_ROOT_SECURE</span>
+    <span class="k">return</span> <span class="n">serve</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">path</span><span class="p">,</span> <span class="n">document_root</span><span class="p">,</span> <span class="n">show_indexes</span><span class="p">)</span></div>
+
+
+<span class="c1">###############</span>
+<span class="c1"># Information</span>
+<span class="c1">###############</span>
+
+<span class="k">def</span> <span class="nf">feeds</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;subject_areas_physics&#39;</span><span class="p">:</span> <span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/feeds.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="c1">################</span>
+<span class="c1"># Contributors:</span>
+<span class="c1">################</span>
+
+<div class="viewcode-block" id="register"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.register">[docs]</a><span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This public registration view shows and processes the form</span>
+<span class="sd">    that will create new user account requests. After registration</span>
+<span class="sd">    the Contributor will need to activate its account via the mail</span>
+<span class="sd">    sent. After activation the user needs to be vetted by the SciPost</span>
+<span class="sd">    admin.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_authenticated</span><span class="p">():</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">RegistrationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">create_and_save_contributor</span><span class="p">()</span>
+        <span class="n">Utils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">Utils</span><span class="o">.</span><span class="n">send_registration_email</span><span class="p">()</span>
+
+        <span class="c1"># Disable invitations related to the new Contributor</span>
+        <span class="n">RegistrationInvitation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">declined_or_without_response</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">email</span><span class="o">=</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">STATUS_REGISTERED</span><span class="p">)</span>
+
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;Thanks for registering to SciPost.&#39;</span><span class="p">,</span>
+            <span class="s1">&#39;ack_message&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;You will receive an email with a link to verify &#39;</span>
+                            <span class="s1">&#39;your email address. &#39;</span>
+                            <span class="s1">&#39;Please visit this link within 48 hours. &#39;</span>
+                            <span class="s1">&#39;Your credentials will thereafter be verified. &#39;</span>
+                            <span class="s1">&#39;If your registration is vetted through by the &#39;</span>
+                            <span class="s1">&#39;administrators, you will be enabled to contribute.&#39;</span><span class="p">),</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/register.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span> <span class="s1">&#39;invited&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span></div>
+
+
+<div class="viewcode-block" id="invitation"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.invitation">[docs]</a><span class="k">def</span> <span class="nf">invitation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    If a scientist has recieved an invitation (RegistrationInvitation)</span>
+<span class="sd">    he/she will finish it&#39;s invitation via still view which will prefill</span>
+<span class="sd">    the default registration form.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">RegistrationInvitation</span><span class="p">,</span> <span class="n">invitation_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">invitation</span><span class="o">.</span><span class="n">has_responded</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;This invitation token has already been used, &#39;</span>
+                        <span class="s1">&#39;or this email address is already associated to a registration.&#39;</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">&gt;</span> <span class="n">invitation</span><span class="o">.</span><span class="n">key_expires</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;The invitation key has expired.&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">,</span>
+            <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">RegistrationForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">invitation</span><span class="o">.</span><span class="vm">__dict__</span><span class="p">)</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/register.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/accept_invitation_error.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;errormessage&#39;</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">})</span></div>
+
+
+<div class="viewcode-block" id="activation"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.activation">[docs]</a><span class="k">def</span> <span class="nf">activation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    After registration, an email verification link is sent.</span>
+<span class="sd">    Once clicked, the account is activated.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">,</span> <span class="n">activation_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_active</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">&gt;</span> <span class="n">contributor</span><span class="o">.</span><span class="n">key_expires</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:request_new_activation_link&#39;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span>
+                <span class="s1">&#39;contributor_id&#39;</span><span class="p">:</span> <span class="n">contributor_id</span><span class="p">,</span>
+                <span class="s1">&#39;key&#39;</span><span class="p">:</span> <span class="n">key</span>
+            <span class="p">}))</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_active</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;Many thanks for confirming your email address.&#39;</span><span class="p">,</span>
+                   <span class="s1">&#39;ack_message&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;Your SciPost account will soon be vetted by &#39;</span>
+                                   <span class="s1">&#39;an administrator, after which you will be able to log in. &#39;</span>
+                                   <span class="s1">&#39;You will soon receive an email confirmation from us!&#39;</span><span class="p">),</span>
+                   <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Your email has already been confirmed.&lt;/h3&gt;&#39;</span>
+                               <span class="s1">&#39;Please wait for vetting of your registration.&#39;</span>
+                               <span class="s1">&#39; We shall strive to send you an update by email within 24 hours.&#39;</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:index&#39;</span><span class="p">))</span></div>
+
+
+<div class="viewcode-block" id="request_new_activation_link"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.request_new_activation_link">[docs]</a><span class="k">def</span> <span class="nf">request_new_activation_link</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Once a user tries to activate its account using the email verification link sent</span>
+<span class="sd">    and the key has expired, the user redirected to possibly request a new token.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">,</span> <span class="n">activation_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;confirm&#39;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+        <span class="c1"># Generate a new email activation key and link</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">generate_key</span><span class="p">()</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">Utils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">Utils</span><span class="o">.</span><span class="n">send_new_activation_link_email</span><span class="p">()</span>
+
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;We have emailed you a new activation link.&#39;</span><span class="p">,</span>
+            <span class="s1">&#39;ack_message&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;Please acknowledge it within its 48 hours validity &#39;</span>
+                            <span class="s1">&#39;window if you want us to proceed with vetting your registration.&#39;</span><span class="p">),</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/request_new_activation_link.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="unsubscribe"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.unsubscribe">[docs]</a><span class="k">def</span> <span class="nf">unsubscribe</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The link to this method is included in all email communications</span>
+<span class="sd">    with a Contributor. The key used is the original activation key.</span>
+<span class="sd">    At this link, the Contributor can confirm that he/she does not</span>
+<span class="sd">    want to receive any non-essential email notifications from SciPost.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">,</span> <span class="n">activation_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;confirm&#39;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">accepts_SciPost_emails</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">contributor</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;We have recorded your preference&lt;/h3&gt;&#39;</span>
+                <span class="s1">&#39;You will no longer receive non-essential email from SciPost.&#39;</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:index&#39;</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/unsubscribe.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">})</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_registration_requests&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">vet_registration_requests</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">contributors_to_vet</span> <span class="o">=</span> <span class="p">(</span><span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span>
+                           <span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span>
+                           <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;key_expires&#39;</span><span class="p">))</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetRegistrationForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributors_to_vet&#39;</span><span class="p">:</span> <span class="n">contributors_to_vet</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/vet_registration_requests.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_registration_requests&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">vet_registration_request_ack</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">):</span>
+    <span class="c1"># process the form</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetRegistrationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">promote_to_registered_contributor</span><span class="p">():</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="mi">1</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">vetted_by</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">group</span> <span class="o">=</span> <span class="n">Group</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;Registered Contributors&#39;</span><span class="p">)</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">group</span><span class="p">)</span>
+            <span class="c1"># Verify if there is a pending refereeing invitation</span>
+            <span class="n">pending_ref_inv_exists</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">pending_ref_inv</span> <span class="o">=</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+                    <span class="n">invitation_key</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">invitation_key</span><span class="p">,</span> <span class="n">cancelled</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+                <span class="n">pending_ref_inv</span><span class="o">.</span><span class="n">referee</span> <span class="o">=</span> <span class="n">contributor</span>
+                <span class="n">pending_ref_inv</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="k">except</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+                <span class="n">pending_ref_inv_exists</span> <span class="o">=</span> <span class="kc">False</span>
+
+            <span class="n">email_text</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;Dear &#39;</span> <span class="o">+</span> <span class="n">contributor</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span>
+                          <span class="o">+</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span>
+                          <span class="s1">&#39;, </span><span class="se">\n\n</span><span class="s1">Your registration to the SciPost publication portal &#39;</span>
+                          <span class="s1">&#39;has been accepted. &#39;</span>
+                          <span class="s1">&#39;You can now login at https://scipost.org and contribute. </span><span class="se">\n\n</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">pending_ref_inv_exists</span><span class="p">:</span>
+                <span class="n">email_text</span> <span class="o">+=</span> <span class="p">(</span>
+                    <span class="s1">&#39;Note that you have pending refereeing invitations; please navigate to &#39;</span>
+                    <span class="s1">&#39;https://scipost.org/submissions/accept_or_decline_ref_invitations &#39;</span>
+                    <span class="s1">&#39;(login required) to accept or decline them.</span><span class="se">\n\n</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="n">email_text</span> <span class="o">+=</span> <span class="s1">&#39;Thank you very much in advance, </span><span class="se">\n</span><span class="s1">The SciPost Team.&#39;</span>
+            <span class="n">emailmessage</span> <span class="o">=</span> <span class="n">EmailMessage</span><span class="p">(</span><span class="s1">&#39;SciPost registration accepted&#39;</span><span class="p">,</span> <span class="n">email_text</span><span class="p">,</span>
+                                        <span class="s1">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class="p">,</span>
+                                        <span class="p">[</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">],</span>
+                                        <span class="n">bcc</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;registration@scipost.org&#39;</span><span class="p">],</span>
+                                        <span class="n">reply_to</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;registration@scipost.org&#39;</span><span class="p">])</span>
+            <span class="n">emailmessage</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">fail_silently</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">ref_reason</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">])</span>
+            <span class="n">email_text</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;Dear &#39;</span> <span class="o">+</span> <span class="n">contributor</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span>
+                          <span class="o">+</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span>
+                          <span class="s1">&#39;, </span><span class="se">\n\n</span><span class="s1">Your registration to the SciPost publication portal &#39;</span>
+                          <span class="s1">&#39;has been turned down, the reason being: &#39;</span>
+                          <span class="o">+</span> <span class="n">reg_ref_dict</span><span class="p">[</span><span class="n">ref_reason</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;. You can however still view &#39;</span>
+                          <span class="s1">&#39;all SciPost contents, just not submit papers, &#39;</span>
+                          <span class="s1">&#39;comments or votes. We nonetheless thank you for your interest.&#39;</span>
+                          <span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">The SciPost Team.&#39;</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_response_field&#39;</span><span class="p">]:</span>
+                <span class="n">email_text</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">Further explanations: &#39;</span>
+                               <span class="o">+</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_response_field&#39;</span><span class="p">])</span>
+            <span class="n">emailmessage</span> <span class="o">=</span> <span class="n">EmailMessage</span><span class="p">(</span><span class="s1">&#39;SciPost registration: unsuccessful&#39;</span><span class="p">,</span>
+                                        <span class="n">email_text</span><span class="p">,</span>
+                                        <span class="s1">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class="p">,</span>
+                                        <span class="p">[</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">],</span>
+                                        <span class="n">bcc</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;registration@scipost.org&#39;</span><span class="p">],</span>
+                                        <span class="n">reply_to</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;registration@scipost.org&#39;</span><span class="p">])</span>
+            <span class="n">emailmessage</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">fail_silently</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">]</span>
+            <span class="n">contributor</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;SciPost Registration request vetted.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:vet_registration_requests&#39;</span><span class="p">))</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_resend_registration_requests&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="registration_requests"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.registration_requests">[docs]</a><span class="k">def</span> <span class="nf">registration_requests</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;</span>
+<span class="sd">    List all inactive users. These are users that have filled the registration form,</span>
+<span class="sd">    but did not yet activate their account using the validation email.</span>
+<span class="sd">    &#39;&#39;&#39;</span>
+    <span class="n">inactive_contributors</span> <span class="o">=</span> <span class="p">(</span><span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_validation</span><span class="p">()</span>
+                             <span class="o">.</span><span class="n">prefetch_related</span><span class="p">(</span><span class="s1">&#39;user&#39;</span><span class="p">)</span>
+                             <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-key_expires&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;inactive_contributors&#39;</span><span class="p">:</span> <span class="n">inactive_contributors</span><span class="p">,</span>
+        <span class="s1">&#39;now&#39;</span><span class="p">:</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/registration_requests.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@require_POST</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_resend_registration_requests&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="registration_requests_reset"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.registration_requests_reset">[docs]</a><span class="k">def</span> <span class="nf">registration_requests_reset</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;</span>
+<span class="sd">    Reset specific activation_key for Contributor and resend activation mail.</span>
+<span class="sd">    &#39;&#39;&#39;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_validation</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+    <span class="n">contributor</span><span class="o">.</span><span class="n">generate_key</span><span class="p">()</span>
+    <span class="n">contributor</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">Utils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+    <span class="n">Utils</span><span class="o">.</span><span class="n">send_new_activation_link_email</span><span class="p">()</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;New key successfully generated and sent to &lt;i&gt;</span><span class="si">%s</span><span class="s1">&lt;/i&gt;&#39;</span>
+                               <span class="o">%</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:registration_requests&#39;</span><span class="p">))</span></div>
+
+
+<div class="viewcode-block" id="login_view"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.login_view">[docs]</a><span class="k">def</span> <span class="nf">login_view</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This view shows and processes a user&#39;s login session.</span>
+
+<span class="sd">    The function based method login() is deprecated from</span>
+<span class="sd">    Django 1.11 and replaced by Class Based Views.</span>
+
+<span class="sd">    See:</span>
+<span class="sd">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">AuthenticationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">user</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">authenticate</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">user</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">if</span> <span class="n">is_registered</span><span class="p">(</span><span class="n">user</span><span class="p">):</span>
+                <span class="n">login</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">user</span><span class="p">)</span>
+                <span class="n">redirect_to</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">get_redirect_url</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">redirect_to</span><span class="p">)</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">form</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;Your account has not yet been vetted. &#39;</span>
+                                      <span class="s1">&#39;(our admins will verify your credentials very soon)&#39;</span><span class="p">))</span>
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">user_is_inactive</span><span class="p">():</span>
+            <span class="n">form</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;Your account is not yet activated. &#39;</span>
+                                  <span class="s1">&#39;Please first activate your account.&#39;</span><span class="p">))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">form</span><span class="o">.</span><span class="n">add_error</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">&#39;Invalid username/password.&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/login.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<div class="viewcode-block" id="logout_view"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.logout_view">[docs]</a><span class="k">def</span> <span class="nf">logout_view</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The function based method logout() is deprecated from</span>
+<span class="sd">    Django 1.11 and replaced by Class Based Views.</span>
+
+<span class="sd">    See:</span>
+<span class="sd">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">logout</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Keep contributing!&lt;/h3&gt;&#39;</span>
+                               <span class="s1">&#39;You are now logged out of SciPost.&#39;</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:index&#39;</span><span class="p">))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<div class="viewcode-block" id="mark_unavailable_period"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.mark_unavailable_period">[docs]</a><span class="k">def</span> <span class="nf">mark_unavailable_period</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;</span>
+<span class="sd">    Mark period unavailable for Contributor using this view.</span>
+<span class="sd">    &#39;&#39;&#39;</span>
+    <span class="n">unav_form</span> <span class="o">=</span> <span class="n">UnavailabilityPeriodForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">unav_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">unav</span> <span class="o">=</span> <span class="n">unav_form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">unav</span><span class="o">.</span><span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+        <span class="n">unav</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Unavailability period registered&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Template acts as a backup in case the form is invalid.</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">unav_form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/unavailability_period_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@require_POST</span>
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<div class="viewcode-block" id="delete_unavailable_period"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.delete_unavailable_period">[docs]</a><span class="k">def</span> <span class="nf">delete_unavailable_period</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">period_id</span><span class="p">):</span>
+    <span class="sd">&#39;&#39;&#39;</span>
+<span class="sd">    Delete period unavailable registered.</span>
+<span class="sd">    &#39;&#39;&#39;</span>
+    <span class="n">unav</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">UnavailabilityPeriod</span><span class="p">,</span>
+                             <span class="n">contributor</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">period_id</span><span class="p">))</span>
+    <span class="n">unav</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Unavailability period deleted&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_editorial_account</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Account</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">,</span>
+        <span class="s1">&#39;unavailability_form&#39;</span><span class="p">:</span> <span class="n">UnavailabilityPeriodForm</span><span class="p">(),</span>
+        <span class="s1">&#39;unavailabilities&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="o">.</span><span class="n">unavailability_periods</span><span class="o">.</span><span class="n">future</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;start&#39;</span><span class="p">)</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/account.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_editorial_actions</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Editorial Actions</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">permission</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name__in</span><span class="o">=</span><span class="p">[</span>
+        <span class="s1">&#39;Ambassadors&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;Advisory Board&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;Editorial Administrators&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;Editorial College&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;Vetting Editors&#39;</span><span class="p">,</span>
+        <span class="s1">&#39;Junior Ambassadors&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span> <span class="ow">or</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_superuser</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">permission</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">PermissionDenied</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+
+    <span class="k">if</span> <span class="n">contributor</span><span class="o">.</span><span class="n">is_SP_Admin</span><span class="p">():</span>
+        <span class="c1"># count the number of pending registration requests</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_reg_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_reg_awaiting_validation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_validation</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_submissions_to_assign&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">prescreening</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_recommendations_to_prepare_for_voting&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">submission__status</span><span class="o">=</span><span class="s1">&#39;voting_in_preparation&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="n">contributor</span><span class="o">.</span><span class="n">is_VE</span><span class="p">():</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_commentary_page_requests_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span>
+                                                         <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">requested_by</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">())</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_comments_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_thesislink_requests_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ThesisLink</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_authorship_claims_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="n">contributor</span><span class="o">.</span><span class="n">is_MEC</span><span class="p">():</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_assignments_to_consider&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">editorial_assignments</span><span class="o">.</span><span class="n">open</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;active_assignments&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">editorial_assignments</span><span class="o">.</span><span class="n">ongoing</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_reports_to_vet&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">submission__editor_in_charge</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="n">contributor</span><span class="o">.</span><span class="n">is_EdCol_Admin</span><span class="p">():</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_reports_without_pdf&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">pdf_report</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_treated_submissions_without_pdf&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">treated</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">pdf_refereeing_pack</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/editorial_actions.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_referee&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_refereeing</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Refereeing</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/refereeing.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_publications</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Publications</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">,</span>
+        <span class="s1">&#39;own_publications&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="o">.</span><span class="n">publications</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-publication_date&#39;</span><span class="p">)</span>
+    <span class="p">}</span>
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_publication_authorships_to_claim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">author_list__contains</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_registered</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/publications.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_submissions</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Submissions</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">}</span>
+
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_submission_authorships_to_claim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">author_list__contains</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;own_submissions&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">submissions</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">is_current</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-submission_date&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/submissions.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_commentaries</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Commentaries</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">}</span>
+
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_commentary_authorships_to_claim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">author_list__contains</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;own_submissions&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">commentaries</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-latest_activity&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/commentaries.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_theses</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Theses</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">}</span>
+
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nr_thesis_authorships_to_claim&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ThesisLink</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">author__contains</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">author_as_cont</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">author_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span>
+        <span class="n">author_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;own_thesislinks&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">theses</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/theses.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_comments</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Comments</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">,</span>
+        <span class="s1">&#39;own_comments&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">regular_comments</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">)</span>
+    <span class="p">}</span>
+
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/comments.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">_personal_page_author_replies</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page tab: Author Replies</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">,</span>
+        <span class="s1">&#39;own_authorreplies&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">author_replies</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">),</span>
+    <span class="p">}</span>
+
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;partials/scipost/personal_page/author_replies.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="personal_page"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.personal_page">[docs]</a><span class="k">def</span> <span class="nf">personal_page</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">tab</span><span class="o">=</span><span class="s1">&#39;account&#39;</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Personal Page is the main view for accessing user functions.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">is_ajax</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;account&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_editorial_account</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;editorial_actions&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_editorial_actions</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;refereeing&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_refereeing</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;publications&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_publications</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;submissions&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_submissions</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;commentaries&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_commentaries</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;theses&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_theses</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;comments&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_comments</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">tab</span> <span class="o">==</span> <span class="s1">&#39;author_replies&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">_personal_page_author_replies</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;appellation&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+        <span class="s1">&#39;needs_validation&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
+        <span class="s1">&#39;tab&#39;</span><span class="p">:</span> <span class="n">tab</span><span class="p">,</span>
+    <span class="p">}</span>
+
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">select_related</span><span class="p">(</span><span class="s1">&#39;user&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;needs_validation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">status</span> <span class="o">!=</span> <span class="n">CONTRIBUTOR_NORMAL</span>
+    <span class="k">except</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="kc">None</span>
+
+    <span class="k">if</span> <span class="n">contributor</span><span class="p">:</span>
+        <span class="c1"># Refereeing</span>
+        <span class="n">refereeing_tab_total_count</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">open</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">refereeing_tab_total_count</span> <span class="o">+=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">in_process</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+        <span class="n">refereeing_tab_total_count</span> <span class="o">+=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">in_draft</span><span class="p">()</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;refereeing_tab_total_count&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">refereeing_tab_total_count</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;appellation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;contributor&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributor</span>
+
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/personal_page.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="k">def</span> <span class="nf">change_password</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">PasswordChangeForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">current_user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">form</span><span class="o">.</span><span class="n">save_new_password</span><span class="p">()</span>
+        <span class="c1"># Update user&#39;s session hash to stay logged in.</span>
+        <span class="n">update_session_auth_hash</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your SciPost password has been successfully changed&#39;</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;partners:dashboard&#39;</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/change_password.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">})</span>
+
+
+<span class="k">def</span> <span class="nf">reset_password_confirm</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">uidb64</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">token</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">password_reset_confirm</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">template_name</span><span class="o">=</span><span class="s1">&#39;scipost/reset_password_confirm.html&#39;</span><span class="p">,</span>
+                                  <span class="n">uidb64</span><span class="o">=</span><span class="n">uidb64</span><span class="p">,</span> <span class="n">token</span><span class="o">=</span><span class="n">token</span><span class="p">,</span>
+                                  <span class="n">post_reset_redirect</span><span class="o">=</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:login&#39;</span><span class="p">))</span>
+
+
+<span class="k">def</span> <span class="nf">reset_password</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">password_reset</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">template_name</span><span class="o">=</span><span class="s1">&#39;scipost/reset_password.html&#39;</span><span class="p">,</span>
+                          <span class="n">email_template_name</span><span class="o">=</span><span class="s1">&#39;scipost/reset_password_email.html&#39;</span><span class="p">,</span>
+                          <span class="n">subject_template_name</span><span class="o">=</span><span class="s1">&#39;scipost/reset_password_subject.txt&#39;</span><span class="p">,</span>
+                          <span class="n">post_reset_redirect</span><span class="o">=</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:login&#39;</span><span class="p">))</span>
+
+
+<span class="k">def</span> <span class="nf">_update_personal_data_user_only</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">user_form</span> <span class="o">=</span> <span class="n">UpdateUserDataForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">user_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">user_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your personal data has been updated.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:update_personal_data&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;user_form&#39;</span><span class="p">:</span> <span class="n">user_form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/update_personal_data.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">def</span> <span class="nf">_update_personal_data_contributor</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">user_form</span> <span class="o">=</span> <span class="n">UpdateUserDataForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">cont_form</span> <span class="o">=</span> <span class="n">UpdatePersonalDataForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">institution_formset</span> <span class="o">=</span> <span class="n">AffiliationsFormset</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">contributor</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">user_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span> <span class="ow">and</span> <span class="n">cont_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span> <span class="ow">and</span> <span class="n">institution_formset</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">user_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">cont_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">cont_form</span><span class="o">.</span><span class="n">sync_lists</span><span class="p">()</span>
+        <span class="n">institution_formset</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="s1">&#39;orcid_id&#39;</span> <span class="ow">in</span> <span class="n">cont_form</span><span class="o">.</span><span class="n">changed_data</span><span class="p">:</span>
+            <span class="n">cont_form</span><span class="o">.</span><span class="n">propagate_orcid</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your personal data has been updated.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:update_personal_data&#39;</span><span class="p">))</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">user_form</span> <span class="o">=</span> <span class="n">UpdateUserDataForm</span><span class="p">(</span><span class="n">instance</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">cont_form</span> <span class="o">=</span> <span class="n">UpdatePersonalDataForm</span><span class="p">(</span><span class="n">instance</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;user_form&#39;</span><span class="p">:</span> <span class="n">user_form</span><span class="p">,</span>
+        <span class="s1">&#39;cont_form&#39;</span><span class="p">:</span> <span class="n">cont_form</span><span class="p">,</span>
+        <span class="s1">&#39;institution_formset&#39;</span><span class="p">:</span> <span class="n">institution_formset</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/update_personal_data.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="k">def</span> <span class="nf">update_personal_data</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">has_contributor</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">_update_personal_data_contributor</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">_update_personal_data_user_only</span><span class="p">(</span><span class="n">request</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<div class="viewcode-block" id="claim_authorships"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.claim_authorships">[docs]</a><span class="k">def</span> <span class="nf">claim_authorships</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The system auto-detects potential authorships (of submissions,</span>
+<span class="sd">    papers subject to commentaries, theses, ...).</span>
+<span class="sd">    The contributor must confirm/deny authorship from the</span>
+<span class="sd">    Personal Page.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+
+    <span class="n">publication_authorships_to_claim</span> <span class="o">=</span> <span class="p">(</span><span class="n">Publication</span><span class="o">.</span><span class="n">objects</span>
+                                        <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author_list__contains</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+                                        <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_registered</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                        <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                        <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">))</span>
+    <span class="n">pub_auth_claim_form</span> <span class="o">=</span> <span class="n">AuthorshipClaimForm</span><span class="p">()</span>
+    <span class="n">submission_authorships_to_claim</span> <span class="o">=</span> <span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span>
+                                       <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author_list__contains</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">))</span>
+    <span class="n">sub_auth_claim_form</span> <span class="o">=</span> <span class="n">AuthorshipClaimForm</span><span class="p">()</span>
+    <span class="n">commentary_authorships_to_claim</span> <span class="o">=</span> <span class="p">(</span><span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span>
+                                       <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author_list__contains</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                       <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">authors_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">))</span>
+    <span class="n">com_auth_claim_form</span> <span class="o">=</span> <span class="n">AuthorshipClaimForm</span><span class="p">()</span>
+    <span class="n">thesis_authorships_to_claim</span> <span class="o">=</span> <span class="p">(</span><span class="n">ThesisLink</span><span class="o">.</span><span class="n">objects</span>
+                                   <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author__contains</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+                                   <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">author_as_cont</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                   <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">author_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+                                   <span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">author_false_claims</span><span class="o">=</span><span class="n">contributor</span><span class="p">))</span>
+    <span class="n">thesis_auth_claim_form</span> <span class="o">=</span> <span class="n">AuthorshipClaimForm</span><span class="p">()</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;publication_authorships_to_claim&#39;</span><span class="p">:</span> <span class="n">publication_authorships_to_claim</span><span class="p">,</span>
+        <span class="s1">&#39;pub_auth_claim_form&#39;</span><span class="p">:</span> <span class="n">pub_auth_claim_form</span><span class="p">,</span>
+        <span class="s1">&#39;submission_authorships_to_claim&#39;</span><span class="p">:</span> <span class="n">submission_authorships_to_claim</span><span class="p">,</span>
+        <span class="s1">&#39;sub_auth_claim_form&#39;</span><span class="p">:</span> <span class="n">sub_auth_claim_form</span><span class="p">,</span>
+        <span class="s1">&#39;commentary_authorships_to_claim&#39;</span><span class="p">:</span> <span class="n">commentary_authorships_to_claim</span><span class="p">,</span>
+        <span class="s1">&#39;com_auth_claim_form&#39;</span><span class="p">:</span> <span class="n">com_auth_claim_form</span><span class="p">,</span>
+        <span class="s1">&#39;thesis_authorships_to_claim&#39;</span><span class="p">:</span> <span class="n">thesis_authorships_to_claim</span><span class="p">,</span>
+        <span class="s1">&#39;thesis_auth_claim_form&#39;</span><span class="p">:</span> <span class="n">thesis_auth_claim_form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/claim_authorships.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">claim_pub_authorship</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">publication_id</span><span class="p">,</span> <span class="n">claim</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">publication</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Publication</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">publication_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">newclaim</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="p">(</span><span class="n">claimant</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">publication</span><span class="o">=</span><span class="n">publication</span><span class="p">)</span>
+            <span class="n">newclaim</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+            <span class="n">publication</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:claim_authorships&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">claim_sub_authorship</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">submission_id</span><span class="p">,</span> <span class="n">claim</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">submission_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">newclaim</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="p">(</span><span class="n">claimant</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+            <span class="n">newclaim</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:claim_authorships&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">claim_com_authorship</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">commentary_id</span><span class="p">,</span> <span class="n">claim</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">commentary</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Commentary</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">commentary_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+            <span class="n">commentary</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">newclaim</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="p">(</span><span class="n">claimant</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">commentary</span><span class="o">=</span><span class="n">commentary</span><span class="p">)</span>
+            <span class="n">newclaim</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+            <span class="n">commentary</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="n">commentary</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:claim_authorships&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@user_passes_test</span><span class="p">(</span><span class="n">has_contributor</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">claim_thesis_authorship</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">thesis_id</span><span class="p">,</span> <span class="n">claim</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">thesislink</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">ThesisLink</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">thesis_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+            <span class="n">thesislink</span><span class="o">.</span><span class="n">author_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">newclaim</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="p">(</span><span class="n">claimant</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">thesislink</span><span class="o">=</span><span class="n">thesislink</span><span class="p">)</span>
+            <span class="n">newclaim</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+            <span class="n">thesislink</span><span class="o">.</span><span class="n">author_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="n">thesislink</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:claim_authorships&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_authorship_claims&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">vet_authorship_claims</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">claims_to_vet</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="s1">&#39;0&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;claims_to_vet&#39;</span><span class="p">:</span> <span class="n">claims_to_vet</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/vet_authorship_claims.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_vet_authorship_claims&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">vet_authorship_claim</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">claim_id</span><span class="p">,</span> <span class="n">claim</span><span class="p">):</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">vetting_contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">claim_to_vet</span> <span class="o">=</span> <span class="n">AuthorshipClaim</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">claim_id</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">publication</span><span class="p">:</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+                <span class="n">PublicationAuthorsTable</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
+                    <span class="n">publication</span><span class="o">=</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">publication</span><span class="p">,</span> <span class="n">contributor</span><span class="o">=</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;1&#39;</span>
+            <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;-1&#39;</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">submission</span><span class="p">:</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;1&#39;</span>
+            <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;-1&#39;</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">commentary</span><span class="p">:</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">commentary</span><span class="o">.</span><span class="n">authors_claims</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">commentary</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;1&#39;</span>
+            <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">commentary</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;-1&#39;</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">commentary</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">thesislink</span><span class="p">:</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">thesislink</span><span class="o">.</span><span class="n">author_claims</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+            <span class="k">if</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;1&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">thesislink</span><span class="o">.</span><span class="n">author_as_cont</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;1&#39;</span>
+            <span class="k">elif</span> <span class="n">claim</span> <span class="o">==</span> <span class="s1">&#39;0&#39;</span><span class="p">:</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">thesislink</span><span class="o">.</span><span class="n">author_false_claims</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">claim_to_vet</span><span class="o">.</span><span class="n">claimant</span><span class="p">)</span>
+                <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;-1&#39;</span>
+            <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">thesislink</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">vetted_by</span> <span class="o">=</span> <span class="n">vetting_contributor</span>
+        <span class="n">claim_to_vet</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;scipost:vet_authorship_claims&#39;</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="contributor_info"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.contributor_info">[docs]</a><span class="k">def</span> <span class="nf">contributor_info</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    All visitors can see a digest of a</span>
+<span class="sd">    Contributor&#39;s activities/contributions by clicking</span>
+<span class="sd">    on the relevant name (in listing headers of Submissions, ...).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+    <span class="n">contributor_publications</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">published</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">authors_registered</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">contributor_submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public_unlisted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">contributor_commentaries</span> <span class="o">=</span> <span class="n">Commentary</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">authors</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">contributor_theses</span> <span class="o">=</span> <span class="n">ThesisLink</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author_as_cont</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">contributor_comments</span> <span class="o">=</span> <span class="p">(</span><span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span>
+                            <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">is_author_reply</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+                            <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">))</span>
+    <span class="n">contributor_authorreplies</span> <span class="o">=</span> <span class="p">(</span><span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span>
+                                 <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span> <span class="n">is_author_reply</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+                                 <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;contributor&#39;</span><span class="p">:</span> <span class="n">contributor</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_publications&#39;</span><span class="p">:</span> <span class="n">contributor_publications</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_submissions&#39;</span><span class="p">:</span> <span class="n">contributor_submissions</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_commentaries&#39;</span><span class="p">:</span> <span class="n">contributor_commentaries</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_theses&#39;</span><span class="p">:</span> <span class="n">contributor_theses</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_comments&#39;</span><span class="p">:</span> <span class="n">contributor_comments</span><span class="p">,</span>
+               <span class="s1">&#39;contributor_authorreplies&#39;</span><span class="p">:</span> <span class="n">contributor_authorreplies</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/contributor_info.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="c1">####################</span>
+<span class="c1"># Email facilities #</span>
+<span class="c1">####################</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_email_group_members&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="email_group_members"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.email_group_members">[docs]</a><span class="k">def</span> <span class="nf">email_group_members</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Method to send bulk emails to (members of) selected groups</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EmailGroupMembersForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">group_members</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;group&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">user_set</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">contributor__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">p</span> <span class="o">=</span> <span class="n">Paginator</span><span class="p">(</span><span class="n">group_members</span><span class="p">,</span> <span class="mi">32</span><span class="p">)</span>
+        <span class="k">for</span> <span class="n">pagenr</span> <span class="ow">in</span> <span class="n">p</span><span class="o">.</span><span class="n">page_range</span><span class="p">:</span>
+            <span class="n">page</span> <span class="o">=</span> <span class="n">p</span><span class="o">.</span><span class="n">page</span><span class="p">(</span><span class="n">pagenr</span><span class="p">)</span>
+            <span class="k">with</span> <span class="n">mail</span><span class="o">.</span><span class="n">get_connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">connection</span><span class="p">:</span>
+                <span class="k">for</span> <span class="n">member</span> <span class="ow">in</span> <span class="n">page</span><span class="o">.</span><span class="n">object_list</span><span class="p">:</span>
+                    <span class="k">if</span> <span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">accepts_SciPost_emails</span><span class="p">:</span>
+                        <span class="n">email_text</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+                        <span class="n">email_text_html</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+                        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;personalize&#39;</span><span class="p">]:</span>
+                            <span class="n">email_text</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;Dear &#39;</span> <span class="o">+</span> <span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span>
+                                          <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="n">member</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;, </span><span class="se">\n\n</span><span class="s1">&#39;</span><span class="p">)</span>
+                            <span class="n">email_text_html</span> <span class="o">=</span> <span class="s1">&#39;Dear {{ title }} {{ last_name }},&lt;br/&gt;&#39;</span>
+                        <span class="n">email_text</span> <span class="o">+=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_text&#39;</span><span class="p">]</span>
+                        <span class="n">email_text_html</span> <span class="o">+=</span> <span class="s1">&#39;{{ email_text|linebreaks }}&#39;</span>
+                        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;include_scipost_summary&#39;</span><span class="p">]:</span>
+                            <span class="n">email_text</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER</span>
+                            <span class="n">email_text_html</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER_HTML</span>
+                        <span class="n">email_text_html</span> <span class="o">+=</span> <span class="n">EMAIL_FOOTER</span>
+                        <span class="n">url_unsubscribe</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:unsubscribe&#39;</span><span class="p">,</span>
+                                                  <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">id</span><span class="p">,</span>
+                                                        <span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">activation_key</span><span class="p">])</span>
+                        <span class="n">email_text</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39;</span><span class="se">\n\n</span><span class="s1">Don</span><span class="se">\&#39;</span><span class="s1">t want to receive such emails? &#39;</span>
+                                       <span class="s1">&#39;Unsubscribe by visiting </span><span class="si">%s</span><span class="s1">.&#39;</span> <span class="o">%</span> <span class="n">url_unsubscribe</span><span class="p">)</span>
+                        <span class="n">email_text_html</span> <span class="o">+=</span> <span class="p">(</span>
+                            <span class="s1">&#39;&lt;br/&gt;</span><span class="se">\n</span><span class="s1">&lt;p style=&quot;font-size: 10px;&quot;&gt;Don</span><span class="se">\&#39;</span><span class="s1">t want to receive such &#39;</span>
+                            <span class="s1">&#39;emails? &lt;a href=&quot;</span><span class="si">%s</span><span class="s1">&quot;&gt;Unsubscribe&lt;/a&gt;.&lt;/p&gt;&#39;</span> <span class="o">%</span> <span class="n">url_unsubscribe</span><span class="p">)</span>
+                        <span class="n">email_context</span> <span class="o">=</span> <span class="p">{</span>
+                            <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">(),</span>
+                            <span class="s1">&#39;last_name&#39;</span><span class="p">:</span> <span class="n">member</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span>
+                            <span class="s1">&#39;email_text&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_text&#39;</span><span class="p">],</span>
+                            <span class="s1">&#39;key&#39;</span><span class="p">:</span> <span class="n">member</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">activation_key</span><span class="p">,</span>
+                        <span class="p">}</span>
+                        <span class="n">html_template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">email_text_html</span><span class="p">)</span>
+                        <span class="n">html_version</span> <span class="o">=</span> <span class="n">html_template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">(</span><span class="n">email_context</span><span class="p">))</span>
+                        <span class="n">message</span> <span class="o">=</span> <span class="n">EmailMultiAlternatives</span><span class="p">(</span>
+                            <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_subject&#39;</span><span class="p">],</span>
+                            <span class="n">email_text</span><span class="p">,</span> <span class="s1">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class="p">,</span>
+                            <span class="p">[</span><span class="n">member</span><span class="o">.</span><span class="n">email</span><span class="p">],</span> <span class="n">connection</span><span class="o">=</span><span class="n">connection</span><span class="p">)</span>
+                        <span class="n">message</span><span class="o">.</span><span class="n">attach_alternative</span><span class="p">(</span><span class="n">html_version</span><span class="p">,</span> <span class="s1">&#39;text/html&#39;</span><span class="p">)</span>
+                        <span class="n">message</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;The email has been sent.&#39;</span><span class="p">,</span>
+                   <span class="s1">&#39;followup_message&#39;</span><span class="p">:</span> <span class="s1">&#39;Return to your &#39;</span><span class="p">,</span>
+                   <span class="s1">&#39;followup_link&#39;</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">),</span>
+                   <span class="s1">&#39;followup_link_label&#39;</span><span class="p">:</span> <span class="s1">&#39;personal page&#39;</span><span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/email_group_members.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_email_particulars&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="email_particular"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.email_particular">[docs]</a><span class="k">def</span> <span class="nf">email_particular</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Method to send emails to individuals (registered or not)</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">form</span> <span class="o">=</span> <span class="n">EmailParticularForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+            <span class="n">email_text</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_text&#39;</span><span class="p">]</span>
+            <span class="n">email_text_html</span> <span class="o">=</span> <span class="s1">&#39;{{ email_text|linebreaks }}&#39;</span>
+            <span class="n">email_context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;email_text&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_text&#39;</span><span class="p">]}</span>
+            <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;include_scipost_summary&#39;</span><span class="p">]:</span>
+                <span class="n">email_text</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER</span>
+                <span class="n">email_text_html</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER_HTML</span>
+
+            <span class="n">email_text_html</span> <span class="o">+=</span> <span class="s1">&#39;&lt;br/&gt;&#39;</span> <span class="o">+</span> <span class="n">EMAIL_FOOTER</span>
+            <span class="n">html_template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">email_text_html</span><span class="p">)</span>
+            <span class="n">html_version</span> <span class="o">=</span> <span class="n">html_template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">(</span><span class="n">email_context</span><span class="p">))</span>
+            <span class="n">message</span> <span class="o">=</span> <span class="n">EmailMultiAlternatives</span><span class="p">(</span>
+                <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_subject&#39;</span><span class="p">],</span>
+                <span class="n">email_text</span><span class="p">,</span> <span class="s1">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class="p">,</span>
+                <span class="p">[</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_address&#39;</span><span class="p">]],</span>
+                <span class="n">bcc</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;admin@scipost.org&#39;</span><span class="p">])</span>
+            <span class="n">message</span><span class="o">.</span><span class="n">attach_alternative</span><span class="p">(</span><span class="n">html_version</span><span class="p">,</span> <span class="s1">&#39;text/html&#39;</span><span class="p">)</span>
+            <span class="n">message</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+            <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;The email has been sent.&#39;</span><span class="p">,</span>
+                       <span class="s1">&#39;followup_message&#39;</span><span class="p">:</span> <span class="s1">&#39;Return to your &#39;</span><span class="p">,</span>
+                       <span class="s1">&#39;followup_link&#39;</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">),</span>
+                       <span class="s1">&#39;followup_link_label&#39;</span><span class="p">:</span> <span class="s1">&#39;personal page&#39;</span><span class="p">}</span>
+            <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EmailParticularForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/email_particular.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_email_particulars&#39;</span><span class="p">,</span> <span class="n">return_403</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="send_precooked_email"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.send_precooked_email">[docs]</a><span class="k">def</span> <span class="nf">send_precooked_email</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Method to send precooked emails to individuals (registered or not)</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">SendPrecookedEmailForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">precookedEmail</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_option&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_address&#39;</span><span class="p">]</span> <span class="ow">in</span> <span class="n">precookedEmail</span><span class="o">.</span><span class="n">emailed_to</span><span class="p">:</span>
+            <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;This message has already been sent to this address&#39;</span>
+            <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/error.html&#39;</span><span class="p">,</span>
+                          <span class="n">context</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;errormessage&#39;</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">})</span>
+        <span class="n">precookedEmail</span><span class="o">.</span><span class="n">emailed_to</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_address&#39;</span><span class="p">])</span>
+        <span class="n">precookedEmail</span><span class="o">.</span><span class="n">date_last_used</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">date</span><span class="p">()</span>
+        <span class="n">precookedEmail</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">email_text</span> <span class="o">=</span> <span class="n">precookedEmail</span><span class="o">.</span><span class="n">email_text</span>
+        <span class="n">email_text_html</span> <span class="o">=</span> <span class="s1">&#39;{{ email_text|linebreaks }}&#39;</span>
+        <span class="n">email_context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;email_text&#39;</span><span class="p">:</span> <span class="n">precookedEmail</span><span class="o">.</span><span class="n">email_text_html</span><span class="p">}</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;include_scipost_summary&#39;</span><span class="p">]:</span>
+            <span class="n">email_text</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER</span>
+            <span class="n">email_text_html</span> <span class="o">+=</span> <span class="n">SCIPOST_SUMMARY_FOOTER_HTML</span>
+
+        <span class="n">email_text_html</span> <span class="o">+=</span> <span class="s1">&#39;&lt;br/&gt;&#39;</span> <span class="o">+</span> <span class="n">EMAIL_FOOTER</span>
+        <span class="n">html_template</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">email_text_html</span><span class="p">)</span>
+        <span class="n">html_version</span> <span class="o">=</span> <span class="n">html_template</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">(</span><span class="n">email_context</span><span class="p">))</span>
+        <span class="n">message</span> <span class="o">=</span> <span class="n">EmailMultiAlternatives</span><span class="p">(</span>
+            <span class="n">precookedEmail</span><span class="o">.</span><span class="n">email_subject</span><span class="p">,</span>
+            <span class="n">email_text</span><span class="p">,</span>
+            <span class="n">SciPost_from_addresses_dict</span><span class="p">[</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;from_address&#39;</span><span class="p">]],</span>
+            <span class="p">[</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_address&#39;</span><span class="p">]],</span>
+            <span class="n">bcc</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;admin@scipost.org&#39;</span><span class="p">])</span>
+        <span class="n">message</span><span class="o">.</span><span class="n">attach_alternative</span><span class="p">(</span><span class="n">html_version</span><span class="p">,</span> <span class="s1">&#39;text/html&#39;</span><span class="p">)</span>
+        <span class="n">message</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="s1">&#39;The email has been sent.&#39;</span><span class="p">,</span>
+                   <span class="s1">&#39;followup_message&#39;</span><span class="p">:</span> <span class="s1">&#39;Return to your &#39;</span><span class="p">,</span>
+                   <span class="s1">&#39;followup_link&#39;</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">),</span>
+                   <span class="s1">&#39;followup_link_label&#39;</span><span class="p">:</span> <span class="s1">&#39;personal page&#39;</span><span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/send_precooked_email.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="c1">#####################</span>
+<span class="c1"># Editorial College #</span>
+<span class="c1">#####################</span>
+
+<span class="k">def</span> <span class="nf">EdCol_bylaws</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/EdCol_by-laws.html&#39;</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="k">def</span> <span class="nf">Fellow_activity_overview</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">fellows</span> <span class="o">=</span> <span class="p">(</span><span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">fellows</span><span class="p">()</span>
+               <span class="o">.</span><span class="n">prefetch_related</span><span class="p">(</span><span class="s1">&#39;editorial_assignments&#39;</span><span class="p">)</span>
+               <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;user__last_name&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;fellows&#39;</span><span class="p">:</span> <span class="n">fellows</span>
+    <span class="p">}</span>
+
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;fellow&#39;</span><span class="p">):</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">fellow</span> <span class="o">=</span> <span class="n">fellows</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">[</span><span class="s1">&#39;fellow&#39;</span><span class="p">])</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;fellow&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">fellow</span>
+
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;assignments_ongoing&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">fellow</span><span class="o">.</span><span class="n">editorial_assignments</span>
+                                              <span class="o">.</span><span class="n">ongoing</span><span class="p">()</span>
+                                              <span class="o">.</span><span class="n">get_for_user_in_pool</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">))</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;assignments_completed&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">fellow</span><span class="o">.</span><span class="n">editorial_assignments</span>
+                                                <span class="o">.</span><span class="n">completed</span><span class="p">()</span>
+                                                <span class="o">.</span><span class="n">get_for_user_in_pool</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">pass</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/Fellow_activity_overview.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">AboutView</span><span class="p">(</span><span class="n">ListView</span><span class="p">):</span>
+    <span class="n">model</span> <span class="o">=</span> <span class="n">EditorialCollege</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;scipost/about.html&#39;</span>
+    <span class="n">queryset</span> <span class="o">=</span> <span class="n">EditorialCollege</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">prefetch_related</span><span class="p">(</span>
+                <span class="n">Prefetch</span><span class="p">(</span><span class="s1">&#39;fellowships&#39;</span><span class="p">,</span>
+                         <span class="n">queryset</span><span class="o">=</span><span class="n">EditorialCollegeFellowship</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">select_related</span><span class="p">(</span>
+                            <span class="s1">&#39;contributor__user&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;contributor__user__last_name&#39;</span><span class="p">),</span>
+                         <span class="n">to_attr</span><span class="o">=</span><span class="s1">&#39;current_fellows&#39;</span><span class="p">))</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="n">object_list</span> <span class="o">=</span> <span class="p">[]</span>
+        <span class="k">for</span> <span class="n">college</span> <span class="ow">in</span> <span class="n">context</span><span class="p">[</span><span class="s1">&#39;object_list&#39;</span><span class="p">]:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">spec_list</span> <span class="o">=</span> <span class="n">subject_areas_raw_dict</span><span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">college</span><span class="p">)]</span>
+            <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
+                <span class="n">spec_list</span> <span class="o">=</span> <span class="kc">None</span>
+            <span class="n">object_list</span><span class="o">.</span><span class="n">append</span><span class="p">((</span>
+                <span class="n">college</span><span class="p">,</span>
+                <span class="n">spec_list</span><span class="p">,</span>
+            <span class="p">))</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;object_list&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">object_list</span>
+        <span class="k">return</span> <span class="n">context</span>
+
+
+<div class="viewcode-block" id="csrf_failure"><a class="viewcode-back" href="../../apps/scipost.html#scipost.views.csrf_failure">[docs]</a><span class="k">def</span> <span class="nf">csrf_failure</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">reason</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Custom CSRF Failure. Informing admins via email as well.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c1"># Filter out privacy data</span>
+    <span class="n">post_data</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="o">.</span><span class="n">keys</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">key</span><span class="p">:</span>
+            <span class="n">post_data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">cleanse_setting</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">[</span><span class="n">key</span><span class="p">])</span>
+
+    <span class="c1"># Email content</span>
+    <span class="n">body</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;ERROR&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">reason</span><span class="p">),</span>
+        <span class="s1">&#39;USER&#39;</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+        <span class="s1">&#39;GET&#39;</span><span class="p">:</span> <span class="nb">dict</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">),</span>
+        <span class="s1">&#39;POST&#39;</span><span class="p">:</span> <span class="n">post_data</span><span class="p">,</span>
+        <span class="s1">&#39;META&#39;</span><span class="p">:</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">META</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
+        <span class="s1">&#39;COOKIES&#39;</span><span class="p">:</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="nb">str</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">request</span><span class="o">.</span><span class="n">COOKIES</span><span class="o">.</span><span class="n">items</span><span class="p">()},</span>
+    <span class="p">}</span>
+
+    <span class="n">body</span> <span class="o">=</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">body</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span>
+
+    <span class="n">mail</span><span class="o">.</span><span class="n">mail_admins</span><span class="p">(</span><span class="s1">&#39;CSRF Failure&#39;</span><span class="p">,</span> <span class="n">body</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;csrf-failure.html&#39;</span><span class="p">)</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/submissions/models.html b/docs/codebase/_build/html/_modules/submissions/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..6862075b85c6f7badbe42ac94c95f95ab8edc3eb
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/submissions/models.html
@@ -0,0 +1,924 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>submissions.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>submissions.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for submissions.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">datetime</span>
+
+<span class="kn">from</span> <span class="nn">django.contrib.postgres.fields</span> <span class="k">import</span> <span class="n">JSONField</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.fields</span> <span class="k">import</span> <span class="n">GenericRelation</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="k">import</span> <span class="n">Q</span>
+<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.utils.functional</span> <span class="k">import</span> <span class="n">cached_property</span>
+
+<span class="kn">from</span> <span class="nn">.behaviors</span> <span class="k">import</span> <span class="n">SubmissionRelatedObjectMixin</span>
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">ASSIGNMENT_REFUSAL_REASONS</span><span class="p">,</span> <span class="n">ASSIGNMENT_NULLBOOL</span><span class="p">,</span>\
+                       <span class="n">SUBMISSION_TYPE</span><span class="p">,</span> <span class="n">ED_COMM_CHOICES</span><span class="p">,</span> <span class="n">REFEREE_QUALIFICATION</span><span class="p">,</span> <span class="n">QUALITY_SPEC</span><span class="p">,</span>\
+                       <span class="n">RANKING_CHOICES</span><span class="p">,</span> <span class="n">REPORT_REC</span><span class="p">,</span> <span class="n">SUBMISSION_STATUS</span><span class="p">,</span> <span class="n">STATUS_UNASSIGNED</span><span class="p">,</span>\
+                       <span class="n">REPORT_STATUSES</span><span class="p">,</span> <span class="n">STATUS_UNVETTED</span><span class="p">,</span> <span class="n">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span><span class="p">,</span>\
+                       <span class="n">SUBMISSION_CYCLES</span><span class="p">,</span> <span class="n">CYCLE_DEFAULT</span><span class="p">,</span> <span class="n">CYCLE_SHORT</span><span class="p">,</span> <span class="n">CYCLE_DIRECT_REC</span><span class="p">,</span>\
+                       <span class="n">EVENT_GENERAL</span><span class="p">,</span> <span class="n">EVENT_TYPES</span><span class="p">,</span> <span class="n">EVENT_FOR_AUTHOR</span><span class="p">,</span> <span class="n">EVENT_FOR_EIC</span><span class="p">,</span>\
+                       <span class="n">REPORT_TYPES</span><span class="p">,</span> <span class="n">REPORT_NORMAL</span><span class="p">,</span> <span class="n">STATUS_DRAFT</span><span class="p">,</span> <span class="n">STATUS_VETTED</span><span class="p">,</span>\
+                       <span class="n">STATUS_VOTING_IN_PREPARATION</span><span class="p">,</span> <span class="n">STATUS_PUT_TO_EC_VOTING</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">SubmissionQuerySet</span><span class="p">,</span> <span class="n">EditorialAssignmentQuerySet</span><span class="p">,</span> <span class="n">EICRecommendationQuerySet</span><span class="p">,</span>\
+                      <span class="n">ReportQuerySet</span><span class="p">,</span> <span class="n">SubmissionEventQuerySet</span><span class="p">,</span> <span class="n">RefereeInvitationQuerySet</span><span class="p">,</span>\
+                      <span class="n">EditorialCommunicationQueryset</span>
+<span class="kn">from</span> <span class="nn">.utils</span> <span class="k">import</span> <span class="n">ShortSubmissionCycle</span><span class="p">,</span> <span class="n">DirectRecommendationSubmissionCycle</span><span class="p">,</span>\
+                   <span class="n">GeneralSubmissionCycle</span>
+
+<span class="kn">from</span> <span class="nn">comments.models</span> <span class="k">import</span> <span class="n">Comment</span>
+<span class="kn">from</span> <span class="nn">scipost.behaviors</span> <span class="k">import</span> <span class="n">TimeStampedModel</span>
+<span class="kn">from</span> <span class="nn">scipost.constants</span> <span class="k">import</span> <span class="n">TITLE_CHOICES</span>
+<span class="kn">from</span> <span class="nn">scipost.fields</span> <span class="k">import</span> <span class="n">ChoiceArrayField</span>
+<span class="kn">from</span> <span class="nn">scipost.constants</span> <span class="k">import</span> <span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">SCIPOST_SUBJECT_AREAS</span>
+<span class="kn">from</span> <span class="nn">journals.constants</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_SUBMIT</span><span class="p">,</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span>
+<span class="kn">from</span> <span class="nn">journals.models</span> <span class="k">import</span> <span class="n">Publication</span>
+
+
+<div class="viewcode-block" id="Submission"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.Submission">[docs]</a><span class="k">class</span> <span class="nc">Submission</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Submission is a SciPost register of an ArXiv article. This object is the central</span>
+<span class="sd">    instance for every action, recommendation, communication, etc. etc. that is related to the</span>
+<span class="sd">    refereeing cycle of a Submission. A possible Publication object is later directly related</span>
+<span class="sd">    to this Submission instance.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">author_comments</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">author_list</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;author list&quot;</span><span class="p">)</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;physics&#39;</span><span class="p">)</span>
+    <span class="n">domain</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">)</span>
+    <span class="n">editor_in_charge</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;EIC&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                         <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">is_current</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">is_resubmission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">list_of_changes</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">open_for_commenting</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">open_for_reporting</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">referees_flagged</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">referees_suggested</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">remarks_for_editors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">reporting_deadline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">secondary_areas</span> <span class="o">=</span> <span class="n">ChoiceArrayField</span><span class="p">(</span>
+        <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">),</span>
+        <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Refereeing fields</span>
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SUBMISSION_STATUS</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">STATUS_UNASSIGNED</span><span class="p">)</span>
+    <span class="n">refereeing_cycle</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SUBMISSION_CYCLES</span><span class="p">,</span>
+                                        <span class="n">default</span><span class="o">=</span><span class="n">CYCLE_DEFAULT</span><span class="p">)</span>
+    <span class="n">fellows</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;colleges.Fellowship&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                     <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;pool&#39;</span><span class="p">)</span>
+    <span class="n">subject_area</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span>
+                                    <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;Primary subject area&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;Phys:QP&#39;</span><span class="p">)</span>
+    <span class="n">submission_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SUBMISSION_TYPE</span><span class="p">,</span>
+                                       <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+    <span class="n">submitted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                     <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;submitted_submissions&#39;</span><span class="p">)</span>
+    <span class="n">voting_fellows</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;colleges.Fellowship&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;voting_pool&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Replace this by foreignkey?</span>
+    <span class="n">submitted_to_journal</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS_SUBMIT</span><span class="p">,</span>
+                                            <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;Journal to be submitted to&quot;</span><span class="p">)</span>
+    <span class="n">proceedings</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;proceedings.Proceedings&#39;</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                    <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;submissions&#39;</span><span class="p">)</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
+
+    <span class="c1"># Authors which have been mapped to contributors:</span>
+    <span class="n">authors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;submissions&#39;</span><span class="p">)</span>
+    <span class="n">authors_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                            <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;claimed_submissions&#39;</span><span class="p">)</span>
+    <span class="n">authors_false_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                  <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;false_claimed_submissions&#39;</span><span class="p">)</span>
+    <span class="n">abstract</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+
+    <span class="c1"># Comments can be added to a Submission</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;comments.Comment&#39;</span><span class="p">,</span> <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;submissions&#39;</span><span class="p">)</span>
+
+    <span class="c1"># iThenticate Reports</span>
+    <span class="n">plagiarism_report</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">OneToOneField</span><span class="p">(</span><span class="s1">&#39;submissions.iThenticateReport&#39;</span><span class="p">,</span>
+                                             <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">SET_NULL</span><span class="p">,</span>
+                                             <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                             <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;to_submission&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Arxiv identifiers with/without version number</span>
+    <span class="n">arxiv_identifier_w_vn_nr</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">15</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;0000.00000v0&#39;</span><span class="p">)</span>
+    <span class="n">arxiv_identifier_wo_vn_nr</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;0000.00000&#39;</span><span class="p">)</span>
+    <span class="n">arxiv_vn_nr</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
+    <span class="n">arxiv_link</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;arXiv link (including version nr)&#39;</span><span class="p">)</span>
+
+    <span class="n">pdf_refereeing_pack</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">upload_to</span><span class="o">=</span><span class="s1">&#39;UPLOADS/REFEREE/%Y/%m/&#39;</span><span class="p">,</span>
+                                           <span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Metadata</span>
+    <span class="n">metadata</span> <span class="o">=</span> <span class="n">JSONField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">{},</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">submission_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;submission date&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">)</span>
+    <span class="n">acceptance_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;acceptance date&#39;</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">latest_activity</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">auto_now</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">SubmissionQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">app_label</span> <span class="o">=</span> <span class="s1">&#39;submissions&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_update_cycle</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="c1"># Fill `arxiv_identifier_w_vn_nr` as a dummy field for convenience</span>
+        <span class="n">arxiv_w_vn</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">{arxiv}</span><span class="s1">v</span><span class="si">{version}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+            <span class="n">arxiv</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">,</span>
+            <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_vn_nr</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span> <span class="o">=</span> <span class="n">arxiv_w_vn</span>
+
+        <span class="n">obj</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">_update_cycle</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">obj</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">header</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span>
+                  <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">])</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_current</span><span class="p">:</span>
+            <span class="n">header</span> <span class="o">+=</span> <span class="s1">&#39; (current version)&#39;</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">header</span> <span class="o">+=</span> <span class="s1">&#39; (deprecated version &#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_vn_nr</span><span class="p">)</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">header</span> <span class="o">+=</span> <span class="s1">&#39; (published as </span><span class="si">%s</span><span class="s1"> (</span><span class="si">%s</span><span class="s1">))&#39;</span> <span class="o">%</span> <span class="p">(</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">publication</span><span class="o">.</span><span class="n">publication_date</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y&#39;</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">Publication</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">pass</span>
+        <span class="k">return</span> <span class="n">header</span>
+
+<div class="viewcode-block" id="Submission.touch"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.Submission.touch">[docs]</a>    <span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Update latest activity as a service &quot;&quot;&quot;</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span></div>
+
+<div class="viewcode-block" id="Submission.comments_set_complete"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.Submission.comments_set_complete">[docs]</a>    <span class="k">def</span> <span class="nf">comments_set_complete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return comments to Submission, comments on Reports of Submission and</span>
+<span class="sd">        nested comments related to this Submission.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">Comment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">Q</span><span class="p">(</span><span class="n">submissions</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> <span class="o">|</span>
+                                      <span class="n">Q</span><span class="p">(</span><span class="n">reports__submission</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> <span class="o">|</span>
+                                      <span class="n">Q</span><span class="p">(</span><span class="n">comments__reports__submission</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span> <span class="o">|</span>
+                                      <span class="n">Q</span><span class="p">(</span><span class="n">comments__submissions</span><span class="o">=</span><span class="bp">self</span><span class="p">))</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span></div>
+
+    <span class="k">def</span> <span class="nf">_update_cycle</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Append the specific submission cycle to the instance to eventually handle the</span>
+<span class="sd">        complete submission cycle outside the submission instance itself.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">refereeing_cycle</span> <span class="o">==</span> <span class="n">CYCLE_SHORT</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="n">ShortSubmissionCycle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">refereeing_cycle</span> <span class="o">==</span> <span class="n">CYCLE_DIRECT_REC</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="n">DirectRecommendationSubmissionCycle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">cycle</span> <span class="o">=</span> <span class="n">GeneralSubmissionCycle</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:submission&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">])</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">notification_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">eic_recommendation_required</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="n">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">reporting_deadline_has_passed</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">reporting_deadline</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">original_submission_date</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span><span class="o">.</span><span class="n">submission_date</span>
+
+    <span class="nd">@cached_property</span>
+    <span class="k">def</span> <span class="nf">thread</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return all versions of the Submission with that arxiv id.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span>
+        <span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-arxiv_vn_nr&#39;</span><span class="p">)</span>
+
+    <span class="nd">@cached_property</span>
+    <span class="k">def</span> <span class="nf">other_versions</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return all other versions of the Submission that are publicly accessible.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span>
+        <span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-arxiv_vn_nr&#39;</span><span class="p">)</span>
+
+    <span class="nd">@cached_property</span>
+    <span class="k">def</span> <span class="nf">other_versions_pool</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Return all other versions of the Submission.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span>
+        <span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pk</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-arxiv_vn_nr&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Underneath: All very inefficient methods as they initiate a new query</span>
+    <span class="k">def</span> <span class="nf">count_accepted_invitations</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">accepted</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">count_declined_invitations</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">accepted</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">count_pending_invitations</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">accepted</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">count_invited_reports</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invited</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">count_contrib_reports</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invited</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">count_obtained_reports</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invited__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">add_general_event</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
+        <span class="n">event</span> <span class="o">=</span> <span class="n">SubmissionEvent</span><span class="p">(</span>
+            <span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+            <span class="n">event</span><span class="o">=</span><span class="n">EVENT_GENERAL</span><span class="p">,</span>
+            <span class="n">text</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+        <span class="p">)</span>
+        <span class="n">event</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">add_event_for_author</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
+        <span class="n">event</span> <span class="o">=</span> <span class="n">SubmissionEvent</span><span class="p">(</span>
+            <span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+            <span class="n">event</span><span class="o">=</span><span class="n">EVENT_FOR_AUTHOR</span><span class="p">,</span>
+            <span class="n">text</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+        <span class="p">)</span>
+        <span class="n">event</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">add_event_for_eic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
+        <span class="n">event</span> <span class="o">=</span> <span class="n">SubmissionEvent</span><span class="p">(</span>
+            <span class="n">submission</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
+            <span class="n">event</span><span class="o">=</span><span class="n">EVENT_FOR_EIC</span><span class="p">,</span>
+            <span class="n">text</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
+        <span class="p">)</span>
+        <span class="n">event</span><span class="o">.</span><span class="n">save</span><span class="p">()</span></div>
+
+
+<div class="viewcode-block" id="SubmissionEvent"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.SubmissionEvent">[docs]</a><span class="k">class</span> <span class="nc">SubmissionEvent</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">TimeStampedModel</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The SubmissionEvent&#39;s goal is to act as a messaging/logging model</span>
+<span class="sd">    for the Submission cycle. Its main audience will be the author(s) and</span>
+<span class="sd">    the Editor-in-charge of a Submission.</span>
+
+<span class="sd">    Be aware!</span>
+<span class="sd">    Both the author and editor-in-charge will read the submission event.</span>
+<span class="sd">    Make sure the right text is given to the right event-type, to protect</span>
+<span class="sd">    the fellow&#39;s identity.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;events&#39;</span><span class="p">)</span>
+    <span class="n">event</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">EVENT_TYPES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">EVENT_GENERAL</span><span class="p">)</span>
+    <span class="n">text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">SubmissionEventQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-created&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_event_display</span><span class="p">())</span></div>
+
+
+<span class="c1">######################</span>
+<span class="c1"># Editorial workflow #</span>
+<span class="c1">######################</span>
+
+<div class="viewcode-block" id="EditorialAssignment"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.EditorialAssignment">[docs]</a><span class="k">class</span> <span class="nc">EditorialAssignment</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    EditorialAssignment is a registration for Fellows of their duties of being a</span>
+<span class="sd">    Editor-in-charge for a specific Submission. This model could start as a invitation only,</span>
+<span class="sd">    which should then be accepted or declined by the invited.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">to</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">accepted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">ASSIGNMENT_NULLBOOL</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+
+    <span class="c1"># attribute `deprecated&#39; becomes True if another Fellow becomes Editor-in-charge</span>
+    <span class="n">deprecated</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">completed</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">refusal_reason</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">ASSIGNMENT_REFUSAL_REASONS</span><span class="p">,</span>
+                                      <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">date_created</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">date_answered</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">EditorialAssignmentQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">default_related_name</span> <span class="o">=</span> <span class="s1">&#39;editorial_assignments&#39;</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-date_created&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">to</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39; to become EIC of &#39;</span> <span class="o">+</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span>
+                <span class="s1">&#39;, requested on &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_created</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">))</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:assignment_request&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,))</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">notification_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span></div>
+
+
+<div class="viewcode-block" id="RefereeInvitation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.RefereeInvitation">[docs]</a><span class="k">class</span> <span class="nc">RefereeInvitation</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;referee_invitations&#39;</span><span class="p">)</span>
+    <span class="n">referee</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;referee_invitations&#39;</span><span class="p">,</span>
+                                <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">TITLE_CHOICES</span><span class="p">)</span>
+    <span class="n">first_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">last_name</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span>
+    <span class="n">email_address</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">EmailField</span><span class="p">()</span>
+    <span class="c1"># if Contributor not found, person is invited to register</span>
+    <span class="n">invitation_key</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">40</span><span class="p">)</span>
+    <span class="n">date_invited</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">invited_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;referee_invited_by&#39;</span><span class="p">,</span>
+                                   <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">nr_reminders</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
+    <span class="n">date_last_reminded</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">accepted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">ASSIGNMENT_NULLBOOL</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+    <span class="n">date_responded</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">refusal_reason</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">ASSIGNMENT_REFUSAL_REASONS</span><span class="p">,</span>
+                                      <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">fulfilled</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># True if a Report has been submitted</span>
+    <span class="n">cancelled</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>  <span class="c1"># True if EIC has deactivated invitation</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">RefereeInvitationQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39; to referee &#39;</span> <span class="o">+</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span>
+                <span class="s1">&#39;, invited on &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_invited</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">))</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">,))</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">referee_str</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee</span><span class="p">:</span>
+            <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">referee</span><span class="p">)</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;, &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_name</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">notification_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">related_report</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">referee</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">reset_content</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">nr_reminders</span> <span class="o">=</span> <span class="mi">0</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">date_last_reminded</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">refusal_reason</span> <span class="o">=</span> <span class="kc">None</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">fulfilled</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">cancelled</span> <span class="o">=</span> <span class="kc">False</span></div>
+
+
+<span class="c1">###########</span>
+<span class="c1"># Reports:</span>
+<span class="c1">###########</span>
+
+<div class="viewcode-block" id="Report"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.Report">[docs]</a><span class="k">class</span> <span class="nc">Report</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Both types of reports, invited or contributed.</span>
+
+<span class="sd">    This Report model acts as both a regular `Report` and a `FollowupReport`; A normal Report</span>
+<span class="sd">    should have all fields required, whereas a FollowupReport only has the `report` field as</span>
+<span class="sd">    a required field.</span>
+
+<span class="sd">    Important note!</span>
+<span class="sd">    Due to the construction of the two different types within a single model, it is important</span>
+<span class="sd">    to explicitly implement the perticular differences in for example the form used.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">status</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">16</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">REPORT_STATUSES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">STATUS_UNVETTED</span><span class="p">)</span>
+    <span class="n">report_type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">32</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">REPORT_TYPES</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">REPORT_NORMAL</span><span class="p">)</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;reports&#39;</span><span class="p">,</span>
+                                   <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">report_nr</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
+                                                 <span class="n">help_text</span><span class="o">=</span><span class="s1">&#39;This number is a unique number &#39;</span>
+                                                           <span class="s1">&#39;refeering to the Report nr. of &#39;</span>
+                                                           <span class="s1">&#39;the Submission&#39;</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s2">&quot;report_vetted_by&quot;</span><span class="p">,</span>
+                                  <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+
+    <span class="c1"># `invited&#39; filled from RefereeInvitation objects at moment of report submission</span>
+    <span class="n">invited</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+
+    <span class="c1"># `flagged&#39; if author of report has been flagged by submission authors (surname check only)</span>
+    <span class="n">flagged</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">date_submitted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="s1">&#39;date submitted&#39;</span><span class="p">)</span>
+    <span class="n">author</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                               <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;reports&#39;</span><span class="p">)</span>
+    <span class="n">qualification</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span>
+        <span class="n">choices</span><span class="o">=</span><span class="n">REFEREE_QUALIFICATION</span><span class="p">,</span>
+        <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;Qualification to referee this: I am&quot;</span><span class="p">)</span>
+
+    <span class="c1"># Text-based reporting</span>
+    <span class="n">strengths</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">weaknesses</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+    <span class="n">requested_changes</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;requested changes&quot;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Comments can be added to a Submission</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;comments.Comment&#39;</span><span class="p">,</span> <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;reports&#39;</span><span class="p">)</span>
+
+    <span class="c1"># Qualities:</span>
+    <span class="n">validity</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">RANKING_CHOICES</span><span class="p">,</span>
+                                                <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">significance</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">RANKING_CHOICES</span><span class="p">,</span>
+                                                    <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">originality</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">RANKING_CHOICES</span><span class="p">,</span>
+                                                   <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">clarity</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">PositiveSmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">RANKING_CHOICES</span><span class="p">,</span>
+                                               <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">formatting</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">QUALITY_SPEC</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                          <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;Quality of paper formatting&quot;</span><span class="p">)</span>
+    <span class="n">grammar</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">QUALITY_SPEC</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                       <span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;Quality of English grammar&quot;</span><span class="p">)</span>
+
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">REPORT_REC</span><span class="p">)</span>
+    <span class="n">remarks_for_editors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                           <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;optional remarks for the Editors only&#39;</span><span class="p">)</span>
+    <span class="n">needs_doi</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">NullBooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
+    <span class="n">doideposit_needs_updating</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">genericdoideposit</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;journals.GenericDOIDeposit&#39;</span><span class="p">,</span>
+                                        <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;genericdoideposit&#39;</span><span class="p">)</span>
+    <span class="n">doi_label</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">anonymous</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;Publish anonymously&#39;</span><span class="p">)</span>
+    <span class="n">pdf_report</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">FileField</span><span class="p">(</span><span class="n">upload_to</span><span class="o">=</span><span class="s1">&#39;UPLOADS/REPORTS/%Y/%m/&#39;</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">ReportQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;submission&#39;</span><span class="p">,</span> <span class="s1">&#39;report_nr&#39;</span><span class="p">)</span>
+        <span class="n">default_related_name</span> <span class="o">=</span> <span class="s1">&#39;reports&#39;</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39; on &#39;</span> <span class="o">+</span>
+                <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">50</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">50</span><span class="p">])</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">is_in_draft</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">STATUS_DRAFT</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">is_vetted</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">STATUS_VETTED</span>
+
+    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="c1"># Control Report count per Submission.</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">report_nr</span><span class="p">:</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">report_nr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">+</span> <span class="mi">1</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">create_doi_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span> <span class="o">=</span> <span class="s1">&#39;SciPost.Report.&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39;#report_&#39;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">report_nr</span><span class="p">)</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">notification_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">doi_string</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span><span class="p">:</span>
+            <span class="k">return</span> <span class="s1">&#39;10.21468/&#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_label</span>
+        <span class="k">return</span> <span class="s1">&#39;&#39;</span>
+
+    <span class="nd">@cached_property</span>
+    <span class="k">def</span> <span class="nf">title</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        This property is (mainly) used to let Comments get the title of the Submission without</span>
+<span class="sd">        annoying logic.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">is_followup_report</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the</span>
+<span class="sd">        author of the report already has a vetted report in the series of the specific Submission.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">,</span>
+            <span class="n">submission__arxiv_vn_nr__lt</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_vn_nr</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
+
+<div class="viewcode-block" id="Report.latest_report_from_series"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.Report.latest_report_from_series">[docs]</a>    <span class="k">def</span> <span class="nf">latest_report_from_series</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Get latest Report from the same author for the Submission series.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span>
+                <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;submission__arxiv_identifier_wo_vn_nr&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">last</span><span class="p">())</span></div>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">associated_published_doi</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if the Report relates to a SciPost-published object.</span>
+<span class="sd">        If it is, return the doi of the published object.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+                <span class="n">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">Publication</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">None</span>
+        <span class="k">return</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">relation_to_published</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Check if the Report relates to a SciPost-published object.</span>
+<span class="sd">        If it is, return a dict with info on relation to the published object,</span>
+<span class="sd">        based on Crossref&#39;s peer review content type.</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">publication</span> <span class="o">=</span> <span class="n">Publication</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+                <span class="n">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">Publication</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">return</span> <span class="kc">None</span>
+
+        <span class="n">relation</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;isReviewOfDOI&#39;</span><span class="p">:</span> <span class="n">publication</span><span class="o">.</span><span class="n">doi_string</span><span class="p">,</span>
+            <span class="s1">&#39;stage&#39;</span><span class="p">:</span> <span class="s1">&#39;pre-publication&#39;</span><span class="p">,</span>
+            <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;referee-report&#39;</span><span class="p">,</span>
+            <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="s1">&#39;Report on &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span>
+            <span class="s1">&#39;contributor_role&#39;</span><span class="p">:</span> <span class="s1">&#39;reviewer&#39;</span><span class="p">,</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">relation</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">citation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">citation</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_string</span><span class="p">:</span>
+            <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">anonymous</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;Anonymous, &#39;</span>
+            <span class="k">else</span><span class="p">:</span>
+                <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> </span><span class="si">%s</span><span class="s1">, &#39;</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+            <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;Report on arXiv:</span><span class="si">%s</span><span class="s1">, &#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+            <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;delivered </span><span class="si">%s</span><span class="s1">, &#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">date_submitted</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s1">&#39;%Y-%m-</span><span class="si">%d</span><span class="s1">&#39;</span><span class="p">)</span>
+            <span class="n">citation</span> <span class="o">+=</span> <span class="s1">&#39;doi: </span><span class="si">%s</span><span class="s1">&#39;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">doi_string</span>
+        <span class="k">return</span> <span class="n">citation</span></div>
+
+
+<span class="c1">##########################</span>
+<span class="c1"># EditorialCommunication #</span>
+<span class="c1">##########################</span>
+
+<div class="viewcode-block" id="EditorialCommunication"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.EditorialCommunication">[docs]</a><span class="k">class</span> <span class="nc">EditorialCommunication</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Each individual communication between Editor-in-charge</span>
+<span class="sd">    to and from Referees and Authors becomes an instance of this class.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">referee</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">comtype</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">ED_COMM_CHOICES</span><span class="p">)</span>
+    <span class="n">timestamp</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">text</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">()</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">EditorialCommunicationQueryset</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;timestamp&#39;</span><span class="p">]</span>
+        <span class="n">default_related_name</span> <span class="o">=</span> <span class="s1">&#39;editorial_communications&#39;</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">comtype</span>
+        <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="n">output</span> <span class="o">+=</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">referee</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span>
+        <span class="n">output</span> <span class="o">+=</span> <span class="p">(</span><span class="s1">&#39; for submission &#39;</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">30</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39; by &#39;</span>
+                   <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">output</span></div>
+
+
+<div class="viewcode-block" id="EICRecommendation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.EICRecommendation">[docs]</a><span class="k">class</span> <span class="nc">EICRecommendation</span><span class="p">(</span><span class="n">SubmissionRelatedObjectMixin</span><span class="p">,</span> <span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The EICRecommendation is the recommendation of a Submission written by</span>
+<span class="sd">    the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by</span>
+<span class="sd">    a subset of Fellows and should contain the actual publication decision.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="s1">&#39;submissions.Submission&#39;</span><span class="p">,</span> <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">,</span>
+                                   <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;eicrecommendations&#39;</span><span class="p">)</span>
+    <span class="n">date_submitted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="s1">&#39;date submitted&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+    <span class="n">remarks_for_authors</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">requested_changes</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s2">&quot;requested changes&quot;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">remarks_for_editorial_college</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                                     <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;optional remarks for the&#39;</span>
+                                                                  <span class="s1">&#39; Editorial College&#39;</span><span class="p">)</span>
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">REPORT_REC</span><span class="p">)</span>
+    <span class="n">version</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">SmallIntegerField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
+    <span class="n">active</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="c1"># Editorial Fellows who have assessed this recommendation:</span>
+    <span class="n">eligible_to_vote</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                              <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;eligible_to_vote&#39;</span><span class="p">)</span>
+    <span class="n">voted_for</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;voted_for&#39;</span><span class="p">)</span>
+    <span class="n">voted_against</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                           <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;voted_against&#39;</span><span class="p">)</span>
+    <span class="n">voted_abstain</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span><span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                           <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;voted_abstain&#39;</span><span class="p">)</span>
+    <span class="n">voting_deadline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="s1">&#39;date submitted&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">EICRecommendationQuerySet</span><span class="o">.</span><span class="n">as_manager</span><span class="p">()</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">unique_together</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;submission&#39;</span><span class="p">,</span> <span class="s1">&#39;version&#39;</span><span class="p">)</span>
+        <span class="n">ordering</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;version&#39;</span><span class="p">]</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="s1">&#39;</span><span class="si">{title}</span><span class="s1"> by </span><span class="si">{author}</span><span class="s1">, </span><span class="si">{recommendation}</span><span class="s1"> version </span><span class="si">{version}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+            <span class="n">title</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">[:</span><span class="mi">20</span><span class="p">],</span>
+            <span class="n">author</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">[:</span><span class="mi">30</span><span class="p">],</span>
+            <span class="n">recommendation</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_recommendation_display</span><span class="p">(),</span>
+            <span class="n">version</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">version</span><span class="p">,</span>
+        <span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="c1"># TODO: Fix this weird redirect, but it&#39;s neccesary for the notifications to have one.</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">notification_name</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">nr_for</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">voted_for</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">nr_against</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">voted_against</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">nr_abstained</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">voted_abstain</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">may_be_reformulated</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">active</span><span class="p">:</span>
+            <span class="c1"># Already reformulated before; please use the latest version</span>
+            <span class="k">return</span> <span class="kc">False</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">[</span><span class="n">STATUS_VOTING_IN_PREPARATION</span><span class="p">,</span> <span class="n">STATUS_PUT_TO_EC_VOTING</span><span class="p">]</span></div>
+
+
+<div class="viewcode-block" id="iThenticateReport"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.iThenticateReport">[docs]</a><span class="k">class</span> <span class="nc">iThenticateReport</span><span class="p">(</span><span class="n">TimeStampedModel</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    iThenticateReport is the SciPost register of an iThenticate report. It saves</span>
+<span class="sd">    basic information coming from iThenticate into the SciPost database for easy access.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">uploaded_time</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">processed_time</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">doc_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">primary_key</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">part_id</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">percent_match</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">(</span><span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="k">class</span> <span class="nc">Meta</span><span class="p">:</span>
+        <span class="n">verbose_name</span> <span class="o">=</span> <span class="s1">&#39;iThenticate Report&#39;</span>
+        <span class="n">verbose_name_plural</span> <span class="o">=</span> <span class="s1">&#39;iThenticate Reports&#39;</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;to_submission&#39;</span><span class="p">):</span>
+            <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:plagiarism&#39;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span>
+                            <span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span>
+                            <span class="bp">self</span><span class="o">.</span><span class="n">to_submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">})</span>
+        <span class="k">return</span> <span class="kc">None</span>
+
+<div class="viewcode-block" id="iThenticateReport.get_report_url"><a class="viewcode-back" href="../../apps/submissions.html#submissions.models.iThenticateReport.get_report_url">[docs]</a>    <span class="k">def</span> <span class="nf">get_report_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">        Request new read-only url from iThenticate and return.</span>
+
+<span class="sd">        Note: The read-only link is valid for only 15 minutes, saving may be worthless</span>
+<span class="sd">        &quot;&quot;&quot;</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">part_id</span><span class="p">:</span>
+            <span class="k">return</span> <span class="s1">&#39;&#39;</span>
+
+        <span class="kn">from</span> <span class="nn">.plagiarism</span> <span class="k">import</span> <span class="n">iThenticate</span>
+        <span class="n">plagiarism</span> <span class="o">=</span> <span class="n">iThenticate</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">plagiarism</span><span class="o">.</span><span class="n">get_url</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">part_id</span><span class="p">)</span></div>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">_str</span> <span class="o">=</span> <span class="s1">&#39;Report </span><span class="si">{doc_id}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">doc_id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">doc_id</span><span class="p">)</span>
+        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;to_submission&#39;</span><span class="p">):</span>
+            <span class="n">_str</span> <span class="o">+=</span> <span class="s1">&#39; on Submission </span><span class="si">{arxiv}</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                        <span class="n">arxiv</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">to_submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">_str</span>
+
+    <span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">obj</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s1">&#39;to_submission&#39;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;commit&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
+            <span class="bp">self</span><span class="o">.</span><span class="n">to_submission</span><span class="o">.</span><span class="n">touch</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">obj</span>
+
+    <span class="nd">@property</span>
+    <span class="k">def</span> <span class="nf">score</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">percent_match</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/submissions/views.html b/docs/codebase/_build/html/_modules/submissions/views.html
new file mode 100644
index 0000000000000000000000000000000000000000..e53bd47e49ff4b09f09c92ffbc5c3ea9c216bc56
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/submissions/views.html
@@ -0,0 +1,1830 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>submissions.views &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>submissions.views</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for submissions.views</h1><div class="highlight"><pre>
+<span></span><span class="kn">import</span> <span class="nn">datetime</span>
+<span class="kn">import</span> <span class="nn">feedparser</span>
+
+<span class="kn">from</span> <span class="nn">django.contrib</span> <span class="k">import</span> <span class="n">messages</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.decorators</span> <span class="k">import</span> <span class="n">login_required</span><span class="p">,</span> <span class="n">permission_required</span>
+<span class="kn">from</span> <span class="nn">django.contrib.auth.models</span> <span class="k">import</span> <span class="n">Group</span>
+<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="k">import</span> <span class="n">PermissionDenied</span>
+<span class="kn">from</span> <span class="nn">django.core.urlresolvers</span> <span class="k">import</span> <span class="n">reverse</span><span class="p">,</span> <span class="n">reverse_lazy</span>
+<span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">transaction</span><span class="p">,</span> <span class="n">IntegrityError</span>
+<span class="kn">from</span> <span class="nn">django.http</span> <span class="k">import</span> <span class="n">Http404</span><span class="p">,</span> <span class="n">HttpResponse</span><span class="p">,</span> <span class="n">HttpResponseRedirect</span>
+<span class="kn">from</span> <span class="nn">django.shortcuts</span> <span class="k">import</span> <span class="n">get_object_or_404</span><span class="p">,</span> <span class="n">get_list_or_404</span><span class="p">,</span> <span class="n">render</span><span class="p">,</span> <span class="n">redirect</span>
+<span class="kn">from</span> <span class="nn">django.template</span> <span class="k">import</span> <span class="n">Template</span><span class="p">,</span> <span class="n">Context</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+<span class="kn">from</span> <span class="nn">django.utils.decorators</span> <span class="k">import</span> <span class="n">method_decorator</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.base</span> <span class="k">import</span> <span class="n">RedirectView</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.detail</span> <span class="k">import</span> <span class="n">DetailView</span><span class="p">,</span> <span class="n">SingleObjectMixin</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.edit</span> <span class="k">import</span> <span class="n">CreateView</span><span class="p">,</span> <span class="n">UpdateView</span>
+<span class="kn">from</span> <span class="nn">django.views.generic.list</span> <span class="k">import</span> <span class="n">ListView</span>
+
+<span class="kn">from</span> <span class="nn">guardian.shortcuts</span> <span class="k">import</span> <span class="n">assign_perm</span>
+
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">STATUS_VETTED</span><span class="p">,</span> <span class="n">STATUS_EIC_ASSIGNED</span><span class="p">,</span>\
+                       <span class="n">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span><span class="p">,</span> <span class="n">SUBMISSION_STATUS</span><span class="p">,</span>\
+                       <span class="n">STATUS_DRAFT</span><span class="p">,</span> <span class="n">CYCLE_DIRECT_REC</span><span class="p">,</span> <span class="n">STATUS_VOTING_IN_PREPARATION</span><span class="p">,</span>\
+                       <span class="n">STATUS_PUT_TO_EC_VOTING</span>
+<span class="kn">from</span> <span class="nn">.models</span> <span class="k">import</span> <span class="n">Submission</span><span class="p">,</span> <span class="n">EICRecommendation</span><span class="p">,</span> <span class="n">EditorialAssignment</span><span class="p">,</span>\
+                    <span class="n">RefereeInvitation</span><span class="p">,</span> <span class="n">Report</span><span class="p">,</span> <span class="n">SubmissionEvent</span>
+<span class="kn">from</span> <span class="nn">.mixins</span> <span class="k">import</span> <span class="n">SubmissionAdminViewMixin</span>
+<span class="kn">from</span> <span class="nn">.forms</span> <span class="k">import</span> <span class="n">SubmissionIdentifierForm</span><span class="p">,</span> <span class="n">RequestSubmissionForm</span><span class="p">,</span> <span class="n">SubmissionSearchForm</span><span class="p">,</span>\
+                   <span class="n">RecommendationVoteForm</span><span class="p">,</span> <span class="n">ConsiderAssignmentForm</span><span class="p">,</span> <span class="n">EditorialAssignmentForm</span><span class="p">,</span>\
+                   <span class="n">SetRefereeingDeadlineForm</span><span class="p">,</span> <span class="n">RefereeSelectForm</span><span class="p">,</span> <span class="n">RefereeRecruitmentForm</span><span class="p">,</span>\
+                   <span class="n">ConsiderRefereeInvitationForm</span><span class="p">,</span> <span class="n">EditorialCommunicationForm</span><span class="p">,</span>\
+                   <span class="n">EICRecommendationForm</span><span class="p">,</span> <span class="n">ReportForm</span><span class="p">,</span> <span class="n">VetReportForm</span><span class="p">,</span> <span class="n">VotingEligibilityForm</span><span class="p">,</span>\
+                   <span class="n">SubmissionCycleChoiceForm</span><span class="p">,</span> <span class="n">ReportPDFForm</span><span class="p">,</span> <span class="n">SubmissionReportsForm</span><span class="p">,</span>\
+                   <span class="n">iThenticateReportForm</span><span class="p">,</span> <span class="n">SubmissionPoolFilterForm</span>
+<span class="kn">from</span> <span class="nn">.utils</span> <span class="k">import</span> <span class="n">SubmissionUtils</span>
+
+<span class="kn">from</span> <span class="nn">colleges.permissions</span> <span class="k">import</span> <span class="n">fellowship_required</span><span class="p">,</span> <span class="n">fellowship_or_admin_required</span>
+<span class="kn">from</span> <span class="nn">mails.views</span> <span class="k">import</span> <span class="n">MailEditingSubView</span>
+<span class="kn">from</span> <span class="nn">scipost.forms</span> <span class="k">import</span> <span class="n">ModifyPersonalMessageForm</span><span class="p">,</span> <span class="n">RemarkForm</span>
+<span class="kn">from</span> <span class="nn">scipost.mixins</span> <span class="k">import</span> <span class="n">PaginationMixin</span>
+<span class="kn">from</span> <span class="nn">scipost.models</span> <span class="k">import</span> <span class="n">Contributor</span><span class="p">,</span> <span class="n">Remark</span>
+
+<span class="kn">from</span> <span class="nn">comments.forms</span> <span class="k">import</span> <span class="n">CommentForm</span>
+<span class="kn">from</span> <span class="nn">invitations.constants</span> <span class="k">import</span> <span class="n">INVITATION_REFEREEING</span>
+<span class="kn">from</span> <span class="nn">invitations.models</span> <span class="k">import</span> <span class="n">RegistrationInvitation</span>
+<span class="kn">from</span> <span class="nn">mails.utils</span> <span class="k">import</span> <span class="n">DirectMailUtil</span>
+<span class="kn">from</span> <span class="nn">production.forms</span> <span class="k">import</span> <span class="n">ProofsDecisionForm</span>
+<span class="kn">from</span> <span class="nn">production.models</span> <span class="k">import</span> <span class="n">ProductionStream</span>
+
+<span class="kn">import</span> <span class="nn">strings</span>
+
+
+<span class="c1">###############</span>
+<span class="c1"># SUBMISSIONS:</span>
+<span class="c1">###############</span>
+
+<span class="nd">@method_decorator</span><span class="p">(</span><span class="n">login_required</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;dispatch&#39;</span><span class="p">)</span>
+<span class="nd">@method_decorator</span><span class="p">(</span><span class="n">permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_manuscript&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
+                  <span class="n">name</span><span class="o">=</span><span class="s1">&#39;dispatch&#39;</span><span class="p">)</span>
+<span class="k">class</span> <span class="nc">RequestSubmission</span><span class="p">(</span><span class="n">CreateView</span><span class="p">):</span>
+    <span class="n">success_url</span> <span class="o">=</span> <span class="n">reverse_lazy</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">)</span>
+    <span class="n">form_class</span> <span class="o">=</span> <span class="n">RequestSubmissionForm</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;submissions/submission_form.html&#39;</span>
+
+    <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;submissions:prefill_using_identifier&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_form_kwargs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">kwargs</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_form_kwargs</span><span class="p">()</span>
+        <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;requested_by&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">user</span>
+        <span class="k">return</span> <span class="n">kwargs</span>
+
+    <span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+    <span class="k">def</span> <span class="nf">form_valid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">):</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;The manuscript has been submitted to </span><span class="si">%s</span><span class="s1">.&#39;</span>
+                                     <span class="o">%</span> <span class="n">submission</span><span class="o">.</span><span class="n">get_submitted_to_journal_display</span><span class="p">())</span>
+
+        <span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Thank you for your Submission to SciPost&lt;/h3&gt;&#39;</span>
+                <span class="s1">&#39;Your Submission will soon be handled by an Editor.&#39;</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">submission_is_resubmission</span><span class="p">():</span>
+            <span class="c1"># Send emails</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">},</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">)</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_authors_resubmission_ack_email</span><span class="p">()</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_EIC_reappointment_email</span><span class="p">()</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="c1"># Send emails</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">})</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_authors_submission_ack_email</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">HttpResponseRedirect</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">success_url</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">form_invalid</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">form</span><span class="p">):</span>
+        <span class="k">for</span> <span class="n">error_messages</span> <span class="ow">in</span> <span class="n">form</span><span class="o">.</span><span class="n">errors</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="p">,</span> <span class="o">*</span><span class="n">error_messages</span><span class="p">)</span>
+        <span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">form_invalid</span><span class="p">(</span><span class="n">form</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_submit_manuscript&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">prefill_using_arxiv_identifier</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">query_form</span> <span class="o">=</span> <span class="n">SubmissionIdentifierForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span>
+                                          <span class="n">requested_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">query_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">prefill_data</span> <span class="o">=</span> <span class="n">query_form</span><span class="o">.</span><span class="n">request_arxiv_preprint_form_prefill_data</span><span class="p">()</span>
+        <span class="n">form</span> <span class="o">=</span> <span class="n">RequestSubmissionForm</span><span class="p">(</span><span class="n">initial</span><span class="o">=</span><span class="n">prefill_data</span><span class="p">,</span> <span class="n">requested_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+
+        <span class="c1"># Submit message to user</span>
+        <span class="k">if</span> <span class="n">query_form</span><span class="o">.</span><span class="n">submission_is_resubmission</span><span class="p">():</span>
+            <span class="n">resubmessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;There already exists a preprint with this arXiv identifier &#39;</span>
+                            <span class="s1">&#39;but a different version number. </span><span class="se">\n</span><span class="s1">Your Submission will be &#39;</span>
+                            <span class="s1">&#39;handled as a resubmission.&#39;</span><span class="p">)</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">resubmessage</span><span class="p">,</span> <span class="n">fail_silently</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">strings</span><span class="o">.</span><span class="n">acknowledge_arxiv_query</span><span class="p">,</span> <span class="n">fail_silently</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+        <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+            <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+        <span class="p">}</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/submission_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">query_form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/submission_prefill_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="k">class</span> <span class="nc">SubmissionListView</span><span class="p">(</span><span class="n">PaginationMixin</span><span class="p">,</span> <span class="n">ListView</span><span class="p">):</span>
+    <span class="n">model</span> <span class="o">=</span> <span class="n">Submission</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">SubmissionSearchForm</span>
+    <span class="n">submission_search_list</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">paginate_by</span> <span class="o">=</span> <span class="mi">10</span>
+
+    <span class="k">def</span> <span class="nf">get_queryset</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">queryset</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public_newest</span><span class="p">()</span>
+        <span class="bp">self</span><span class="o">.</span><span class="n">form</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="p">)</span>
+        <span class="k">if</span> <span class="s1">&#39;to_journal&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">:</span>
+            <span class="n">queryset</span> <span class="o">=</span> <span class="n">queryset</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">latest_activity__gte</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=-</span><span class="mi">60</span><span class="p">),</span>
+                <span class="n">submitted_to_journal</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;to_journal&#39;</span><span class="p">]</span>
+            <span class="p">)</span>
+        <span class="k">elif</span> <span class="s1">&#39;discipline&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span> <span class="ow">and</span> <span class="s1">&#39;nrweeksback&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">:</span>
+            <span class="n">discipline</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;discipline&#39;</span><span class="p">]</span>
+            <span class="n">nrweeksback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;nrweeksback&#39;</span><span class="p">]</span>
+            <span class="n">queryset</span> <span class="o">=</span> <span class="n">queryset</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+                <span class="n">discipline</span><span class="o">=</span><span class="n">discipline</span><span class="p">,</span>
+                <span class="n">latest_activity__gte</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">weeks</span><span class="o">=-</span><span class="nb">int</span><span class="p">(</span><span class="n">nrweeksback</span><span class="p">))</span>
+            <span class="p">)</span>
+        <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">has_changed</span><span class="p">():</span>
+            <span class="n">queryset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">search_results</span><span class="p">()</span>
+
+        <span class="k">return</span> <span class="n">queryset</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-submission_date&#39;</span><span class="p">)</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="c1"># Call the base implementation first to get a context</span>
+        <span class="n">context</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+
+        <span class="c1"># Form into the context!</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span>
+
+        <span class="c1"># To customize display in the template</span>
+        <span class="k">if</span> <span class="s1">&#39;to_journal&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">:</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;to_journal&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;to_journal&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="s1">&#39;discipline&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">:</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;discipline&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;discipline&#39;</span><span class="p">]</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;nrweeksback&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;nrweeksback&#39;</span><span class="p">]</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;browse&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">()</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">form</span><span class="o">.</span><span class="n">has_changed</span><span class="p">():</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;recent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span>
+
+        <span class="k">return</span> <span class="n">context</span>
+
+
+<span class="k">def</span> <span class="nf">submission_detail_wo_vn_nr</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">):</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="p">,</span> <span class="n">arxiv_identifier_wo_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_wo_vn_nr</span><span class="p">,</span>
+                                   <span class="n">is_current</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="k">return</span><span class="p">(</span><span class="n">submission_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">))</span>
+
+
+<span class="k">def</span> <span class="nf">submission_detail</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+        <span class="n">is_author_unchecked</span> <span class="o">=</span> <span class="p">(</span><span class="ow">not</span> <span class="n">is_author</span> <span class="ow">and</span>
+                               <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+                               <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">unfinished_report_for_user</span> <span class="o">=</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">in_draft</span><span class="p">()</span>
+                                          <span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">))</span>
+        <span class="k">except</span> <span class="n">Report</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="n">unfinished_report_for_user</span> <span class="o">=</span> <span class="kc">None</span>
+
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;proofs_decision_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ProofsDecisionForm</span><span class="p">()</span>
+    <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
+        <span class="n">is_author</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">is_author_unchecked</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">unfinished_report_for_user</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="n">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span>
+            <span class="ow">and</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">groups</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name__in</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;SciPost Administrators&#39;</span><span class="p">,</span>
+                                                         <span class="s1">&#39;Editorial Administrators&#39;</span><span class="p">,</span>
+                                                         <span class="s1">&#39;Editorial College&#39;</span><span class="p">])</span><span class="o">.</span><span class="n">exists</span><span class="p">()</span>
+            <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_author</span><span class="p">):</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">CommentForm</span><span class="p">()</span>
+
+    <span class="n">invited_reports</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invited</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">contributed_reports</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">invited</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span>
+                <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">is_author_reply</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">))</span>
+    <span class="n">author_replies</span> <span class="o">=</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">comments</span><span class="o">.</span><span class="n">vetted</span><span class="p">()</span>
+                      <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">is_author_reply</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_submitted&#39;</span><span class="p">))</span>
+
+    <span class="c1"># User is referee for the Submission</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">is_authenticated</span><span class="p">:</span>
+        <span class="n">invitations</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">referee__user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">invitations</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">invitations</span><span class="p">:</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;communication&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">editorial_communications</span><span class="o">.</span><span class="n">for_referees</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">referee__user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+
+    <span class="n">recommendations</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">eicrecommendations</span><span class="o">.</span><span class="n">active</span><span class="p">()</span>
+
+    <span class="n">context</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;recommendations&#39;</span><span class="p">:</span> <span class="n">recommendations</span><span class="p">,</span>
+        <span class="s1">&#39;comments&#39;</span><span class="p">:</span> <span class="n">comments</span><span class="p">,</span>
+        <span class="s1">&#39;invited_reports&#39;</span><span class="p">:</span> <span class="n">invited_reports</span><span class="p">,</span>
+        <span class="s1">&#39;contributed_reports&#39;</span><span class="p">:</span> <span class="n">contributed_reports</span><span class="p">,</span>
+        <span class="s1">&#39;unfinished_report_for_user&#39;</span><span class="p">:</span> <span class="n">unfinished_report_for_user</span><span class="p">,</span>
+        <span class="s1">&#39;author_replies&#39;</span><span class="p">:</span> <span class="n">author_replies</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">,</span>
+        <span class="s1">&#39;is_author&#39;</span><span class="p">:</span> <span class="n">is_author</span><span class="p">,</span>
+        <span class="s1">&#39;is_author_unchecked&#39;</span><span class="p">:</span> <span class="n">is_author_unchecked</span><span class="p">,</span>
+        <span class="s1">&#39;invitations&#39;</span><span class="p">:</span> <span class="n">invitations</span><span class="p">,</span>
+    <span class="p">})</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/submission_detail.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<div class="viewcode-block" id="report_detail_pdf"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.report_detail_pdf">[docs]</a><span class="k">def</span> <span class="nf">report_detail_pdf</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">report_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Download the PDF of a Report if available.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">(),</span>
+                               <span class="n">submission__arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span>
+                               <span class="n">pdf_report__isnull</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">report_nr</span><span class="o">=</span><span class="n">report_nr</span><span class="p">)</span>
+    <span class="n">response</span> <span class="o">=</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">pdf_report</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">&#39;application/pdf&#39;</span><span class="p">)</span>
+    <span class="n">filename</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">_report-</span><span class="si">%i</span><span class="s1">.pdf&#39;</span> <span class="o">%</span> <span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">report</span><span class="o">.</span><span class="n">report_nr</span><span class="p">)</span>
+    <span class="n">response</span><span class="p">[</span><span class="s1">&#39;Content-Disposition&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;filename=&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">response</span></div>
+
+
+<div class="viewcode-block" id="submission_refereeing_package_pdf"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.submission_refereeing_package_pdf">[docs]</a><span class="k">def</span> <span class="nf">submission_refereeing_package_pdf</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This view let&#39;s the user download all Report PDF&#39;s in a single merged PDF.</span>
+<span class="sd">    The merging takes places every time its downloaded to make sure all available report PDF&#39;s</span>
+<span class="sd">    are included and the EdColAdmin doesn&#39;t have to compile the package every time again.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">public</span><span class="p">()</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">pdf_refereeing_pack</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">response</span> <span class="o">=</span> <span class="n">HttpResponse</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">pdf_refereeing_pack</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">content_type</span><span class="o">=</span><span class="s1">&#39;application/pdf&#39;</span><span class="p">)</span>
+    <span class="n">filename</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="si">%s</span><span class="s1">-refereeing-package.pdf&#39;</span> <span class="o">%</span> <span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span>
+    <span class="n">response</span><span class="p">[</span><span class="s1">&#39;Content-Disposition&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;filename=&#39;</span> <span class="o">+</span> <span class="n">filename</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">response</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_manage_reports&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="reports_accepted_list"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.reports_accepted_list">[docs]</a><span class="k">def</span> <span class="nf">reports_accepted_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>
+<span class="sd">    in a convenient way.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">reports</span> <span class="o">=</span> <span class="p">(</span><span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">()</span>
+               <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;pdf_report&#39;</span><span class="p">,</span> <span class="s1">&#39;submission&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">prefetch_related</span><span class="p">(</span><span class="s1">&#39;submission&#39;</span><span class="p">))</span>
+
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;submission&#39;</span><span class="p">):</span>
+        <span class="n">reports</span> <span class="o">=</span> <span class="n">reports</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submission__arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;submission&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;reports&#39;</span><span class="p">:</span> <span class="n">reports</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/report_list.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_manage_reports&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">report_pdf_compile</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">report_id</span><span class="p">):</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">accepted</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">report_id</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ReportPDFForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">report</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">report</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Upload complete.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:reports_accepted_list&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/report_compile_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_manage_reports&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="treated_submissions_list"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.treated_submissions_list">[docs]</a><span class="k">def</span> <span class="nf">treated_submissions_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>
+<span class="sd">    in a convenient way.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">treated</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;pdf_refereeing_pack&#39;</span><span class="p">,</span> <span class="s1">&#39;-acceptance_date&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submissions&#39;</span><span class="p">:</span> <span class="n">submissions</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/treated_submission_list.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_manage_reports&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">treated_submission_pdf_compile</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">treated</span><span class="p">(),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">SubmissionReportsForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">request</span><span class="o">.</span><span class="n">FILES</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Upload complete.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:treated_submissions_list&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/treated_submission_pdf_compile.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="c1">######################</span>
+<span class="c1"># Editorial workflow #</span>
+<span class="c1">######################</span>
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="editorial_workflow"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.editorial_workflow">[docs]</a><span class="k">def</span> <span class="nf">editorial_workflow</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Summary page for Editorial Fellows, containing a digest</span>
+<span class="sd">    of the actions to take to handle Submissions.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/editorial_workflow.html&#39;</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="pool"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.pool">[docs]</a><span class="k">def</span> <span class="nf">pool</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The Submissions pool contains all submissions which are undergoing</span>
+<span class="sd">    the editorial process, from submission</span>
+<span class="sd">    to publication acceptance or rejection.</span>
+<span class="sd">    All members of the Editorial College have access.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="c1"># Search</span>
+    <span class="n">search_form</span> <span class="o">=</span> <span class="n">SubmissionPoolFilterForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">GET</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">search_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">submissions</span> <span class="o">=</span> <span class="n">search_form</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># Mainly as fallback for the old-pool while in test phase.</span>
+        <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+
+    <span class="n">recommendations</span> <span class="o">=</span> <span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">)</span>
+    <span class="n">recs_to_vote_on</span> <span class="o">=</span> <span class="n">recommendations</span><span class="o">.</span><span class="n">user_may_vote_on</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">assignments_to_consider</span> <span class="o">=</span> <span class="n">EditorialAssignment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">to</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+
+    <span class="c1"># Forms</span>
+    <span class="n">consider_assignment_form</span> <span class="o">=</span> <span class="n">ConsiderAssignmentForm</span><span class="p">()</span>
+    <span class="n">rec_vote_form</span> <span class="o">=</span> <span class="n">RecommendationVoteForm</span><span class="p">()</span>
+    <span class="n">remark_form</span> <span class="o">=</span> <span class="n">RemarkForm</span><span class="p">()</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submissions&#39;</span><span class="p">:</span> <span class="n">submissions</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;status&#39;</span><span class="p">,</span> <span class="s1">&#39;-submission_date&#39;</span><span class="p">),</span>
+        <span class="s1">&#39;search_form&#39;</span><span class="p">:</span> <span class="n">search_form</span><span class="p">,</span>
+        <span class="s1">&#39;submission_status&#39;</span><span class="p">:</span> <span class="n">SUBMISSION_STATUS</span><span class="p">,</span>
+        <span class="s1">&#39;recommendations&#39;</span><span class="p">:</span> <span class="n">recommendations</span><span class="p">,</span>
+        <span class="s1">&#39;assignments_to_consider&#39;</span><span class="p">:</span> <span class="n">assignments_to_consider</span><span class="p">,</span>
+        <span class="s1">&#39;consider_assignment_form&#39;</span><span class="p">:</span> <span class="n">consider_assignment_form</span><span class="p">,</span>
+        <span class="s1">&#39;recs_to_vote_on&#39;</span><span class="p">:</span> <span class="n">recs_to_vote_on</span><span class="p">,</span>
+        <span class="s1">&#39;rec_vote_form&#39;</span><span class="p">:</span> <span class="n">rec_vote_form</span><span class="p">,</span>
+        <span class="s1">&#39;remark_form&#39;</span><span class="p">:</span> <span class="n">remark_form</span><span class="p">,</span>
+    <span class="p">}</span>
+
+    <span class="c1"># Show specific submission in the pool</span>
+    <span class="n">context</span><span class="p">[</span><span class="s1">&#39;submission&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">context</span><span class="p">[</span><span class="s1">&#39;submission&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_full</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
+                <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">Submission</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="k">pass</span>
+
+    <span class="c1"># EdColAdmin related variables</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">has_perm</span><span class="p">(</span><span class="s1">&#39;scipost.can_oversee_refereeing&#39;</span><span class="p">):</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;latest_submission_events&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">SubmissionEvent</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">for_eic</span><span class="p">()</span><span class="o">.</span><span class="n">last_hours</span><span class="p">()</span>\
+            <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submission__in</span><span class="o">=</span><span class="n">context</span><span class="p">[</span><span class="s1">&#39;submissions&#39;</span><span class="p">])</span>
+
+    <span class="c1"># Pool gets Submission details via ajax request</span>
+    <span class="k">if</span> <span class="n">context</span><span class="p">[</span><span class="s1">&#39;submission&#39;</span><span class="p">]</span> <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">is_ajax</span><span class="p">():</span>
+        <span class="n">template</span> <span class="o">=</span> <span class="s1">&#39;partials/submissions/pool/submission_details.html&#39;</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">template</span> <span class="o">=</span> <span class="s1">&#39;submissions/pool/pool.html&#39;</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="add_remark"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.add_remark">[docs]</a><span class="k">def</span> <span class="nf">add_remark</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    With this method, an Editorial Fellow or Board Member</span>
+<span class="sd">    is adding a remark on a Submission.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">remark_form</span> <span class="o">=</span> <span class="n">RemarkForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">remark_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">remark</span> <span class="o">=</span> <span class="n">Remark</span><span class="p">(</span><span class="n">contributor</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">,</span>
+                        <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">,</span>
+                        <span class="n">date</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+                        <span class="n">remark</span><span class="o">=</span><span class="n">remark_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;remark&#39;</span><span class="p">])</span>
+        <span class="n">remark</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your remark has succesfully been posted&#39;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;The form was invalidly filled.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,)))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_assign_submissions&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="assign_submission"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.assign_submission">[docs]</a><span class="k">def</span> <span class="nf">assign_submission</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Assign Editor-in-charge to Submission.</span>
+<span class="sd">    Action done by SciPost Administration or Editorial College Administration.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EditorialAssignmentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">ed_assignment</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;assignment&#39;</span><span class="p">:</span> <span class="n">ed_assignment</span><span class="p">})</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_assignment_request_email</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Your assignment request has been sent successfully.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission_to_assign&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/editorial_assignment_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="assignment_request"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.assignment_request">[docs]</a><span class="k">def</span> <span class="nf">assignment_request</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">assignment_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Process EditorialAssignment acceptance/denial form or show if not submitted.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">assignment</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">EditorialAssignment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open</span><span class="p">(),</span>
+                                   <span class="n">to</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">assignment_id</span><span class="p">)</span>
+
+    <span class="n">errormessage</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s1">&#39;assignment_failed&#39;</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>
+
+    <span class="k">elif</span> <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span>
+                        <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span>
+                        <span class="s1">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span>
+        <span class="c1"># Assignments can get stuck here,</span>
+        <span class="c1"># if errormessage is given the contributor can&#39;t close the assignment!!</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">errormessage</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ConsiderAssignmentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">assignment</span><span class="o">.</span><span class="n">date_answered</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;accept&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span><span class="p">:</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">to</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">STATUS_EIC_ASSIGNED</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">deadline</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">28</span><span class="p">)</span>  <span class="c1"># for papers</span>
+            <span class="k">if</span> <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">submitted_to_journal</span> <span class="o">==</span> <span class="s1">&#39;SciPostPhysLectNotes&#39;</span><span class="p">:</span>
+                <span class="n">deadline</span> <span class="o">+=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">28</span><span class="p">)</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">=</span> <span class="n">deadline</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">open_for_commenting</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+            <span class="c1"># Save assignment and submission</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;assignment&#39;</span><span class="p">:</span> <span class="n">assignment</span><span class="p">})</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">deprecate_other_assignments</span><span class="p">()</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_EIC_appointment_email</span><span class="p">()</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_prescreening_passed_email</span><span class="p">()</span>
+
+            <span class="c1"># Add SubmissionEvents</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;The Editor-in-charge has been assigned.&#39;</span><span class="p">)</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s1">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span>
+            <span class="n">url</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                          <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">False</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">refusal_reason</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">]</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;unassigned&#39;</span>
+
+            <span class="c1"># Save assignment and submission</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">assignment</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">msg</span> <span class="o">=</span> <span class="s1">&#39;Thank you for considering&#39;</span>
+            <span class="n">url</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">)</span>
+
+        <span class="c1"># Form submitted, redirect user</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">msg</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">url</span><span class="p">)</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;assignment&#39;</span><span class="p">:</span> <span class="n">assignment</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/assignment_request.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="volunteer_as_EIC"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.volunteer_as_EIC">[docs]</a><span class="k">def</span> <span class="nf">volunteer_as_EIC</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called when a Fellow volunteers while perusing the submissions pool.</span>
+<span class="sd">    This is an adapted version of the assignment_request method.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">errormessage</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s1">&#39;assignment_failed&#39;</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>
+        <span class="n">errormessage</span> <span class="o">+=</span> <span class="s1">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">errormessage</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+    <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>
+        <span class="n">errormessage</span> <span class="o">+=</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">()</span> <span class="o">+</span> <span class="s1">&#39; &#39;</span> <span class="o">+</span>
+                         <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span>
+                         <span class="s1">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">errormessage</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+
+    <span class="c1"># The Contributor may already have an EditorialAssignment due to an earlier invitation.</span>
+    <span class="n">assignment</span><span class="p">,</span> <span class="n">__</span> <span class="o">=</span> <span class="n">EditorialAssignment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_or_create</span><span class="p">(</span>
+        <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">,</span>
+        <span class="n">to</span><span class="o">=</span><span class="n">contributor</span><span class="p">)</span>
+    <span class="n">assignment</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">assignment</span><span class="o">.</span><span class="n">date_answered</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">assignment</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="c1"># Set deadlines</span>
+    <span class="n">deadline</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">28</span><span class="p">)</span>  <span class="c1"># for papers</span>
+    <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">submitted_to_journal</span> <span class="o">==</span> <span class="s1">&#39;SciPostPhysLectNotes&#39;</span><span class="p">:</span>
+        <span class="n">deadline</span> <span class="o">+=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">28</span><span class="p">)</span>
+
+    <span class="c1"># Update Submission data</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">STATUS_EIC_ASSIGNED</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">=</span> <span class="n">contributor</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">=</span> <span class="n">deadline</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_commenting</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">touch</span><span class="p">()</span>
+
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;assignment&#39;</span><span class="p">:</span> <span class="n">assignment</span><span class="p">})</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">deprecate_other_assignments</span><span class="p">()</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_EIC_appointment_email</span><span class="p">()</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_prescreening_passed_email</span><span class="p">()</span>
+
+    <span class="c1"># Add SubmissionEvents</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;The Editor-in-charge has been assigned.&#39;</span><span class="p">)</span>
+
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_assign_submissions&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="assignment_failed"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.assignment_failed">[docs]</a><span class="k">def</span> <span class="nf">assignment_failed</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    No Editorial Fellow has accepted or volunteered to become Editor-in-charge.</span>
+<span class="sd">    The submission is rejected.</span>
+<span class="sd">    This method is called from pool.html by an Editorial Administrator.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">form</span> <span class="o">=</span> <span class="n">ModifyPersonalMessageForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;assignment_failed&#39;</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+                                  <span class="s1">&#39;personal_message&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;personal_message&#39;</span><span class="p">]})</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">deprecate_all_assignments</span><span class="p">()</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">assignment_failed_email_authors</span><span class="p">()</span>
+            <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_header&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;Submission &#39;</span> <span class="o">+</span> <span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span> <span class="o">+</span>
+                                      <span class="s1">&#39; has failed pre-screening and been rejected. &#39;</span>
+                                      <span class="s1">&#39;Authors have been informed by email.&#39;</span><span class="p">),</span>
+                       <span class="s1">&#39;followup_message&#39;</span><span class="p">:</span> <span class="s1">&#39;Return to the &#39;</span><span class="p">,</span>
+                       <span class="s1">&#39;followup_link&#39;</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">),</span>
+                       <span class="s1">&#39;followup_link_label&#39;</span><span class="p">:</span> <span class="s1">&#39;Submissions pool&#39;</span><span class="p">}</span>
+            <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">form</span> <span class="o">=</span> <span class="n">ModifyPersonalMessageForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+               <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/editorial_assignment_failed.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_required</span><span class="p">()</span>
+<div class="viewcode-block" id="assignments"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.assignments">[docs]</a><span class="k">def</span> <span class="nf">assignments</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This page provides a Fellow with an explicit task list</span>
+<span class="sd">    of editorial actions which should be undertaken.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">assignments</span> <span class="o">=</span> <span class="n">EditorialAssignment</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">to</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;-date_created&#39;</span><span class="p">)</span>
+    <span class="n">assignments_to_consider</span> <span class="o">=</span> <span class="n">assignments</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">accepted</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
+                                                 <span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">current_assignments</span> <span class="o">=</span> <span class="n">assignments</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">accepted</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+                                             <span class="n">deprecated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
+                                             <span class="n">completed</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;assignments_to_consider&#39;</span><span class="p">:</span> <span class="n">assignments_to_consider</span><span class="p">,</span>
+        <span class="s1">&#39;current_assignments&#39;</span><span class="p">:</span> <span class="n">current_assignments</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/assignments.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="editorial_page"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.editorial_page">[docs]</a><span class="k">def</span> <span class="nf">editorial_page</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    The central page for the EIC to manage all its Editorial duties.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_full</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">full_access</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">has_perm</span><span class="p">(</span><span class="s1">&#39;scipost.can_oversee_refereeing&#39;</span><span class="p">):</span>
+        <span class="c1"># Administrators will be able to see all Submissions</span>
+        <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">!=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+            <span class="c1"># The current user is not EIC of the Submission!</span>
+            <span class="n">full_access</span> <span class="o">=</span> <span class="kc">False</span>
+            <span class="k">if</span> <span class="ow">not</span> <span class="n">submission</span><span class="o">.</span><span class="n">voting_fellows</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">contributor__user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+                <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;set_deadline_form&#39;</span><span class="p">:</span> <span class="n">SetRefereeingDeadlineForm</span><span class="p">(),</span>
+        <span class="s1">&#39;cycle_choice_form&#39;</span><span class="p">:</span> <span class="n">SubmissionCycleChoiceForm</span><span class="p">(</span><span class="n">instance</span><span class="o">=</span><span class="n">submission</span><span class="p">),</span>
+        <span class="s1">&#39;full_access&#39;</span><span class="p">:</span> <span class="n">full_access</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/editorial_page.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="cycle_form_submit"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.cycle_form_submit">[docs]</a><span class="k">def</span> <span class="nf">cycle_form_submit</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    If Submission is `resubmission_incoming` the EIC should first choose what refereeing</span>
+<span class="sd">    cycle to choose.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">SubmissionCycleChoiceForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">cycle</span><span class="o">.</span><span class="n">update_status</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">cycle</span><span class="o">.</span><span class="n">update_deadline</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">cycle</span><span class="o">.</span><span class="n">reinvite_referees</span><span class="p">(</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;referees_reinvite&#39;</span><span class="p">],</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Your choice has been confirmed&lt;/h3&gt;&#39;</span>
+                                   <span class="s1">&#39;The new cycle will be &lt;em&gt;</span><span class="si">%s</span><span class="s1">&lt;/em&gt;&#39;</span>
+                                   <span class="o">%</span> <span class="n">submission</span><span class="o">.</span><span class="n">get_refereeing_cycle_display</span><span class="p">()))</span>
+        <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">refereeing_cycle</span> <span class="o">==</span> <span class="n">CYCLE_DIRECT_REC</span><span class="p">:</span>
+            <span class="c1"># Redirect to EIC Recommendation page immediately</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:eic_recommendation&#39;</span><span class="p">,</span>
+                            <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span>
+        <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="select_referee"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.select_referee">[docs]</a><span class="k">def</span> <span class="nf">select_referee</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Select/Invite referees by first listing them here.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{}</span>
+    <span class="n">queryresults</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
+
+    <span class="n">ref_search_form</span> <span class="o">=</span> <span class="n">RefereeSelectForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">ref_search_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">contributors_found</span> <span class="o">=</span> <span class="n">Contributor</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">user__last_name__icontains</span><span class="o">=</span><span class="n">ref_search_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">])</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;contributors_found&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">contributors_found</span>
+
+        <span class="c1"># Check for recent co-authorship (thus referee disqualification)</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">sub_auth_boolean_str</span> <span class="o">=</span> <span class="s1">&#39;((&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="n">submission</span>
+                                           <span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;entries&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;authors&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
+                                           <span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
+            <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;entries&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;authors&#39;</span><span class="p">][</span><span class="mi">1</span><span class="p">:]:</span>
+                <span class="n">sub_auth_boolean_str</span> <span class="o">+=</span> <span class="s1">&#39;+OR+&#39;</span> <span class="o">+</span> <span class="n">author</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+            <span class="n">sub_auth_boolean_str</span> <span class="o">+=</span> <span class="s1">&#39;)+AND+&#39;</span>
+            <span class="n">search_str</span> <span class="o">=</span> <span class="n">sub_auth_boolean_str</span> <span class="o">+</span> <span class="n">ref_search_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">]</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span>
+            <span class="n">queryurl</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class="si">%s</span><span class="s1">&#39;</span>
+                        <span class="o">%</span> <span class="n">search_str</span> <span class="o">+</span> <span class="s1">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>
+                        <span class="s1">&#39;&amp;max_results=5&#39;</span><span class="p">)</span>
+            <span class="n">arxivquery</span> <span class="o">=</span> <span class="n">feedparser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">queryurl</span><span class="p">)</span>
+            <span class="n">queryresults</span> <span class="o">=</span> <span class="n">arxivquery</span>
+        <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
+            <span class="k">pass</span>
+        <span class="n">context</span><span class="p">[</span><span class="s1">&#39;ref_recruit_form&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">RefereeRecruitmentForm</span><span class="p">()</span>
+
+    <span class="n">context</span><span class="o">.</span><span class="n">update</span><span class="p">({</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;ref_search_form&#39;</span><span class="p">:</span> <span class="n">ref_search_form</span><span class="p">,</span>
+        <span class="s1">&#39;queryresults&#39;</span><span class="p">:</span> <span class="n">queryresults</span>
+    <span class="p">})</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/referee_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="recruit_referee"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.recruit_referee">[docs]</a><span class="k">def</span> <span class="nf">recruit_referee</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    If the Editor-in-charge does not find the desired referee among Contributors</span>
+<span class="sd">    (otherwise, the method send_refereeing_invitation below is used instead),</span>
+<span class="sd">    he/she can invite somebody by providing name + contact details.</span>
+<span class="sd">    This function emails a registration invitation to this person.</span>
+<span class="sd">    The pending refereeing invitation is then recognized upon registration,</span>
+<span class="sd">    using the invitation token.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">&#39;POST&#39;</span><span class="p">:</span>
+        <span class="n">ref_recruit_form</span> <span class="o">=</span> <span class="n">RefereeRecruitmentForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span><span class="p">)</span>
+        <span class="k">if</span> <span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+            <span class="c1"># TODO check if email already taken</span>
+            <span class="n">ref_invitation</span> <span class="o">=</span> <span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+            <span class="n">ref_invitation</span><span class="o">.</span><span class="n">submission</span> <span class="o">=</span> <span class="n">submission</span>
+            <span class="n">ref_invitation</span><span class="o">.</span><span class="n">invited_by</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+
+            <span class="c1"># Create and send a registration invitation</span>
+            <span class="n">ref_inv_message_head</span> <span class="o">=</span> <span class="p">(</span>
+                <span class="s1">&#39;On behalf of the Editor-in-charge </span><span class="si">{eic_title}</span><span class="s1"> </span><span class="si">{eic_last_name}</span><span class="s1">, we would &#39;</span>
+                <span class="s1">&#39;like to invite you to referee a Submission to </span><span class="si">{journal}</span><span class="s1">, namely&#39;</span>
+                <span class="s1">&#39;</span><span class="se">\n</span><span class="si">{sub_title}</span><span class="s1">&#39;</span>
+                <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">by </span><span class="si">{sub_author_list}</span><span class="s1">&#39;</span>
+                <span class="s1">&#39;</span><span class="se">\n</span><span class="s1">(see https://scipost.org/</span><span class="si">{sub_url}</span><span class="s1">).&#39;</span>
+                <span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                    <span class="n">eic_title</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">get_title_display</span><span class="p">(),</span>
+                    <span class="n">eic_last_name</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span>
+                    <span class="n">journal</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">get_submitted_to_journal_display</span><span class="p">(),</span>
+                    <span class="n">sub_title</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">title</span><span class="p">,</span>
+                    <span class="n">sub_author_list</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">,</span>
+                    <span class="n">sub_url</span><span class="o">=</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+            <span class="n">reg_invitation</span> <span class="o">=</span> <span class="n">RegistrationInvitation</span><span class="p">(</span>
+                <span class="n">title</span><span class="o">=</span><span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">],</span>
+                <span class="n">first_name</span><span class="o">=</span><span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;first_name&#39;</span><span class="p">],</span>
+                <span class="n">last_name</span><span class="o">=</span><span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">],</span>
+                <span class="n">email</span><span class="o">=</span><span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_address&#39;</span><span class="p">],</span>
+                <span class="n">invitation_type</span><span class="o">=</span><span class="n">INVITATION_REFEREEING</span><span class="p">,</span>
+                <span class="n">created_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="p">,</span>
+                <span class="n">invited_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="p">,</span>
+                <span class="n">personal_message</span><span class="o">=</span><span class="n">ref_inv_message_head</span><span class="p">)</span>
+
+            <span class="n">reg_invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="c1"># Copy the key to the refereeing invitation</span>
+            <span class="n">ref_invitation</span><span class="o">.</span><span class="n">invitation_key</span> <span class="o">=</span> <span class="n">reg_invitation</span><span class="o">.</span><span class="n">invitation_key</span>
+            <span class="n">ref_invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+            <span class="n">mail_sender</span> <span class="o">=</span> <span class="n">DirectMailUtil</span><span class="p">(</span><span class="n">mail_code</span><span class="o">=</span><span class="s1">&#39;registration_invitation&#39;</span><span class="p">,</span>
+                                         <span class="n">instance</span><span class="o">=</span><span class="n">reg_invitation</span><span class="p">)</span>
+            <span class="n">mail_sender</span><span class="o">.</span><span class="n">set_alternative_sender</span><span class="p">(</span><span class="s1">&#39;SciPost Refereeing&#39;</span><span class="p">,</span> <span class="s1">&#39;refereeing@scipost.org&#39;</span><span class="p">)</span>
+            <span class="n">mail_sender</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Referee </span><span class="si">{}</span><span class="s1"> invited&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">reg_invitation</span><span class="o">.</span><span class="n">last_name</span><span class="p">))</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A referee has been invited.&#39;</span><span class="p">)</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> has been recruited and invited as a referee.&#39;</span>
+                                         <span class="o">%</span> <span class="n">ref_recruit_form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;last_name&#39;</span><span class="p">])</span>
+
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="send_refereeing_invitation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.send_refereeing_invitation">[docs]</a><span class="k">def</span> <span class="nf">send_refereeing_invitation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">contributor_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method is called by the EIC from the submission&#39;s editorial_page,</span>
+<span class="sd">    in the case where the referee is an identified Contributor.</span>
+<span class="sd">    For a referee who isn&#39;t a Contributor yet, the method recruit_referee above</span>
+<span class="sd">    is called instead.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">contributor</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">contributor_id</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">contributor</span><span class="o">.</span><span class="n">is_currently_available</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;This Contributor is marked as currently unavailable. &#39;</span>
+                        <span class="s1">&#39;Please go back and select another referee.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/error.html&#39;</span><span class="p">,</span> <span class="p">{</span><span class="s1">&#39;errormessage&#39;</span><span class="p">:</span> <span class="n">errormessage</span><span class="p">})</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">RefereeInvitation</span><span class="p">(</span><span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">,</span>
+                                   <span class="n">referee</span><span class="o">=</span><span class="n">contributor</span><span class="p">,</span>
+                                   <span class="n">title</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">title</span><span class="p">,</span>
+                                   <span class="n">first_name</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">first_name</span><span class="p">,</span>
+                                   <span class="n">last_name</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span>
+                                   <span class="n">email_address</span><span class="o">=</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span>
+                                   <span class="c1"># the key is only used for inviting unregistered users</span>
+                                   <span class="n">invitation_key</span><span class="o">=</span><span class="s1">&#39;notused&#39;</span><span class="p">,</span>
+                                   <span class="n">date_invited</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+                                   <span class="n">invited_by</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+
+    <span class="n">mail_request</span> <span class="o">=</span> <span class="n">MailEditingSubView</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">mail_code</span><span class="o">=</span><span class="s1">&#39;submissions_referee_invite&#39;</span><span class="p">,</span>
+                                      <span class="n">invitation</span><span class="o">=</span><span class="n">invitation</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">mail_request</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="c1"># SubmissionUtils.load({&#39;invitation&#39;: invitation})</span>
+        <span class="c1"># SubmissionUtils.send_refereeing_invitation_email()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A referee has been invited.&#39;</span><span class="p">)</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;Referee </span><span class="si">%s</span><span class="s1"> has been invited.&#39;</span> <span class="o">%</span> <span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Invitation sent&#39;</span><span class="p">)</span>
+        <span class="n">mail_request</span><span class="o">.</span><span class="n">send</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="k">return</span> <span class="n">mail_request</span><span class="o">.</span><span class="n">return_render</span><span class="p">()</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="ref_invitation_reminder"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.ref_invitation_reminder">[docs]</a><span class="k">def</span> <span class="nf">ref_invitation_reminder</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">invitation_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method is used by the Editor-in-charge from the editorial_page</span>
+<span class="sd">    when a referee has been invited but hasn&#39;t answered yet.</span>
+<span class="sd">    It can be used for registered as well as unregistered referees.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="n">pk</span><span class="o">=</span><span class="n">invitation_id</span><span class="p">)</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">nr_reminders</span> <span class="o">+=</span> <span class="mi">1</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">date_last_reminded</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">})</span>
+    <span class="k">if</span> <span class="n">invitation</span><span class="o">.</span><span class="n">referee</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_ref_reminder_email</span><span class="p">()</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_unreg_ref_reminder_email</span><span class="p">()</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Reminder sent succesfully.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_referee&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="accept_or_decline_ref_invitations"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.accept_or_decline_ref_invitations">[docs]</a><span class="k">def</span> <span class="nf">accept_or_decline_ref_invitations</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">invitation_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    RefereeInvitations need to be either accepted or declined by the invited user</span>
+<span class="sd">    using this view. The decision will be taken one invitation at a time.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">awaiting_response</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">referee__user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">invitation_id</span><span class="p">:</span>
+        <span class="k">try</span><span class="p">:</span>
+            <span class="n">invitation</span> <span class="o">=</span> <span class="n">invitation</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">invitation_id</span><span class="p">)</span>
+        <span class="k">except</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+            <span class="n">invitation</span> <span class="o">=</span> <span class="n">invitation</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">invitation</span> <span class="o">=</span> <span class="n">invitation</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">invitation</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;There are no more Refereeing Invitations for you to consider.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ConsiderRefereeInvitationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">date_responded</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;accept&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span><span class="p">:</span>
+            <span class="n">invitation</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">decision_string</span> <span class="o">=</span> <span class="s1">&#39;accepted&#39;</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;Thank you for agreeing to referee this Submission&lt;/h3&gt;&#39;</span>
+                                       <span class="s1">&#39;&lt;p&gt;When you are ready, please go to the &#39;</span>
+                                       <span class="s1">&#39;&lt;a href=&quot;</span><span class="si">{url}</span><span class="s1">&quot;&gt;Submission</span><span class="se">\&#39;</span><span class="s1">s page&lt;/a&gt; to&#39;</span>
+                                       <span class="s1">&#39; submit your Report.&lt;/p&gt;&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
+                                            <span class="n">url</span><span class="o">=</span><span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())))</span>
+        <span class="k">else</span><span class="p">:</span>
+            <span class="n">invitation</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">False</span>
+            <span class="n">decision_string</span> <span class="o">=</span> <span class="s1">&#39;declined&#39;</span>
+            <span class="n">invitation</span><span class="o">.</span><span class="n">refusal_reason</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">]</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;You have declined to contribute a Report&lt;/h3&gt;&#39;</span>
+                                       <span class="s1">&#39;Nonetheless, we thank you very much for considering&#39;</span>
+                                       <span class="s1">&#39; this refereeing invitation.&lt;/p&gt;&#39;</span><span class="p">))</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">email_referee_response_to_EIC</span><span class="p">()</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">email_referee_in_response_to_decision</span><span class="p">()</span>
+
+        <span class="c1"># Add SubmissionEvents</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A referee has </span><span class="si">%s</span><span class="s1"> the refereeing invitation.&#39;</span>
+                                                   <span class="o">%</span> <span class="n">decision_string</span><span class="p">)</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;Referee </span><span class="si">%s</span><span class="s1"> has </span><span class="si">%s</span><span class="s1"> the refereeing invitation.&#39;</span>
+                                                <span class="o">%</span> <span class="p">(</span><span class="n">invitation</span><span class="o">.</span><span class="n">referee</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">,</span>
+                                                   <span class="n">decision_string</span><span class="p">))</span>
+
+        <span class="k">if</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">awaiting_response</span><span class="p">()</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="s1">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ConsiderRefereeInvitationForm</span><span class="p">()</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/referee_invitations_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="k">def</span> <span class="nf">decline_ref_invitation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">invitation_key</span><span class="p">):</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">RefereeInvitation</span><span class="p">,</span> <span class="n">invitation_key</span><span class="o">=</span><span class="n">invitation_key</span><span class="p">,</span>
+                                   <span class="n">accepted__isnull</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ConsiderRefereeInvitationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;accept&#39;</span><span class="p">:</span> <span class="kc">False</span><span class="p">})</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;accept&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;True&#39;</span><span class="p">:</span>
+            <span class="c1"># User filled in: Accept</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Please login and go to your personal page if you&#39;</span>
+                                      <span class="s1">&#39; want to accept the invitation.&#39;</span><span class="p">)</span>
+            <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/referee_invitations_decline.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+        <span class="n">invitation</span><span class="o">.</span><span class="n">accepted</span> <span class="o">=</span> <span class="kc">False</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">date_responded</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">refusal_reason</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;refusal_reason&#39;</span><span class="p">]</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">email_referee_response_to_EIC</span><span class="p">()</span>
+
+        <span class="c1"># Add SubmissionEvents</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A referee has declined the&#39;</span>
+                                                   <span class="s1">&#39; refereeing invitation.&#39;</span><span class="p">)</span>
+        <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;Referee </span><span class="si">%s</span><span class="s1"> has declined the refereeing &#39;</span>
+                                                <span class="s1">&#39;invitation.&#39;</span> <span class="o">%</span> <span class="n">invitation</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Thank you for informing us that you will not provide a Report.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:index&#39;</span><span class="p">))</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/referee_invitations_decline.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="cancel_ref_invitation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.cancel_ref_invitation">[docs]</a><span class="k">def</span> <span class="nf">cancel_ref_invitation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">invitation_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method is used by the Editor-in-charge from the editorial_page</span>
+<span class="sd">    to remove a referee for the list of invited ones.</span>
+<span class="sd">    It can be used for registered as well as unregistered referees.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">invitation</span> <span class="o">=</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">invitation_id</span><span class="p">)</span>
+    <span class="k">except</span> <span class="n">RefereeInvitation</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="n">invitation</span><span class="o">.</span><span class="n">cancelled</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;invitation&#39;</span><span class="p">:</span> <span class="n">invitation</span><span class="p">})</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_ref_cancellation_email</span><span class="p">()</span>
+
+    <span class="c1"># Add SubmissionEvents</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A referee invitation has been cancelled.&#39;</span><span class="p">)</span>
+    <span class="n">invitation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;Referee invitation for </span><span class="si">%s</span><span class="s1"> has been cancelled.&#39;</span>
+                                            <span class="o">%</span> <span class="n">invitation</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="extend_refereeing_deadline"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.extend_refereeing_deadline">[docs]</a><span class="k">def</span> <span class="nf">extend_refereeing_deadline</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">days</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Extend Refereeing deadline for Submission and open reporting and commenting.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">+=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="nb">int</span><span class="p">(</span><span class="n">days</span><span class="p">))</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_commenting</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;EICassigned&#39;</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+    <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;A new refereeing deadline is set.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="set_refereeing_deadline"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.set_refereeing_deadline">[docs]</a><span class="k">def</span> <span class="nf">set_refereeing_deadline</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Set Refereeing deadline for Submission and open reporting and commenting if</span>
+<span class="sd">    the new date is in the future.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">SetRefereeingDeadlineForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;deadline&#39;</span><span class="p">]</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;deadline&#39;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">date</span><span class="p">():</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span> <span class="o">=</span> <span class="kc">True</span>
+            <span class="n">submission</span><span class="o">.</span><span class="n">open_for_commenting</span> <span class="o">=</span> <span class="kc">True</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;EICassigned&#39;</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;A new refereeing deadline is set.&#39;</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;New reporting deadline set.&#39;</span><span class="p">)</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;The deadline has not been set. Please try again.&#39;</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="close_refereeing_round"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.close_refereeing_round">[docs]</a><span class="k">def</span> <span class="nf">close_refereeing_round</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Called by the Editor-in-charge when a satisfactory number of</span>
+<span class="sd">    reports have been gathered.</span>
+<span class="sd">    Automatically emails the authors to ask them if they want to</span>
+<span class="sd">    round off any replies to reports or comments before the</span>
+<span class="sd">    editorial recommendation is formulated.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">open_for_commenting</span> <span class="o">=</span> <span class="kc">False</span>
+    <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s1">&#39;EICassigned&#39;</span><span class="p">:</span>  <span class="c1"># only close if currently undergoing refereeing</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;review_closed&#39;</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">latest_activity</span> <span class="o">=</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">add_general_event</span><span class="p">(</span><span class="s1">&#39;Refereeing round has been closed.&#39;</span><span class="p">)</span>
+
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                            <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_oversee_refereeing&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="k">def</span> <span class="nf">refereeing_overview</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="n">submissions_under_refereeing</span> <span class="o">=</span> <span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span>
+                                    <span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+                                    <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">STATUS_EIC_ASSIGNED</span><span class="p">)</span>
+                                    <span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;submission_date&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;submissions_under_refereeing&#39;</span><span class="p">:</span> <span class="n">submissions_under_refereeing</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/refereeing_overview.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<div class="viewcode-block" id="communication"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.communication">[docs]</a><span class="k">def</span> <span class="nf">communication</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,</span> <span class="n">comtype</span><span class="p">,</span> <span class="n">referee_id</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Communication between editor-in-charge, author or referee</span>
+<span class="sd">    occurring during the submission refereeing.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">referee</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="n">comtype</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;EtoA&#39;</span><span class="p">,</span> <span class="s1">&#39;EtoR&#39;</span><span class="p">,</span> <span class="s1">&#39;EtoS&#39;</span><span class="p">]:</span>
+        <span class="c1"># Editor to {Author, Referee, Editorial Administration}</span>
+        <span class="n">submissions_qs</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="k">elif</span> <span class="n">comtype</span> <span class="o">==</span> <span class="s1">&#39;AtoE&#39;</span><span class="p">:</span>
+        <span class="c1"># Author to Editor</span>
+        <span class="n">submissions_qs</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_author</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">referee</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="k">elif</span> <span class="n">comtype</span> <span class="o">==</span> <span class="s1">&#39;RtoE&#39;</span><span class="p">:</span>
+        <span class="c1"># Referee to Editor (Contributor account required)</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">,</span> <span class="s1">&#39;contributor&#39;</span><span class="p">):</span>
+            <span class="c1"># Raise PermissionDenied to let the user know something is wrong with its account.</span>
+            <span class="k">raise</span> <span class="n">PermissionDenied</span>
+
+        <span class="n">submissions_qs</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+            <span class="n">referee_invitations__referee__user</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">referee</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="k">elif</span> <span class="n">comtype</span> <span class="o">==</span> <span class="s1">&#39;StoE&#39;</span><span class="p">:</span>
+        <span class="c1"># Editorial Administration to Editor</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">has_perm</span><span class="p">(</span><span class="s1">&#39;scipost.can_oversee_refereeing&#39;</span><span class="p">):</span>
+            <span class="k">raise</span> <span class="n">PermissionDenied</span>
+        <span class="n">submissions_qs</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+        <span class="n">referee</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># Invalid commtype in the url!</span>
+        <span class="k">raise</span> <span class="n">Http404</span>
+
+    <span class="c1"># Get the showpiece itself or return 404</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">submissions_qs</span><span class="p">,</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">referee_id</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">referee</span><span class="p">:</span>
+        <span class="c1"># Get the Contributor to communicate with if not already defined (`Eto?` communication)</span>
+        <span class="c1"># To Fix: Assuming the Editorial Administrator won&#39;t make any `referee_id` mistakes</span>
+        <span class="n">referee</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Contributor</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="n">referee_id</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EditorialCommunicationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">communication</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">commit</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+        <span class="n">communication</span><span class="o">.</span><span class="n">submission</span> <span class="o">=</span> <span class="n">submission</span>
+        <span class="n">communication</span><span class="o">.</span><span class="n">comtype</span> <span class="o">=</span> <span class="n">comtype</span>
+        <span class="n">communication</span><span class="o">.</span><span class="n">referee</span> <span class="o">=</span> <span class="n">referee</span>
+        <span class="n">communication</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;communication&#39;</span><span class="p">:</span> <span class="n">communication</span><span class="p">})</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_communication_email</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="n">comtype</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">&#39;EtoA&#39;</span><span class="p">,</span> <span class="s1">&#39;EtoR&#39;</span><span class="p">,</span> <span class="s1">&#39;EtoS&#39;</span><span class="p">]:</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                    <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span>
+        <span class="k">elif</span> <span class="n">comtype</span> <span class="o">==</span> <span class="s1">&#39;AtoE&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+        <span class="k">elif</span> <span class="n">comtype</span> <span class="o">==</span> <span class="s1">&#39;StoE&#39;</span><span class="p">:</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;comtype&#39;</span><span class="p">:</span> <span class="n">comtype</span><span class="p">,</span>
+        <span class="s1">&#39;referee_id&#39;</span><span class="p">:</span> <span class="n">referee_id</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/communication.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="eic_recommendation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.eic_recommendation">[docs]</a><span class="k">def</span> <span class="nf">eic_recommendation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Write EIC Recommendation.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">submission</span><span class="o">.</span><span class="n">eic_recommendation_required</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;&lt;h3&gt;An Editorial Recommendation is not required&lt;/h3&gt;&#39;</span>
+                                   <span class="s1">&#39;This submission</span><span class="se">\&#39;</span><span class="s1">s current status is: &lt;em&gt;</span><span class="si">%s</span><span class="s1">&lt;/em&gt;&#39;</span>
+                                   <span class="o">%</span> <span class="n">submission</span><span class="o">.</span><span class="n">get_status_display</span><span class="p">()))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EICRecommendationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+    <span class="c1"># Find EditorialAssignment for user</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">form</span><span class="o">.</span><span class="n">has_assignment</span><span class="p">():</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;You cannot formulate an Editorial Recommendation,&#39;</span>
+                                   <span class="s1">&#39; because the Editorial Assignment has not been set properly.&#39;</span>
+                                   <span class="s1">&#39; Please &#39;</span>
+                                   <span class="s1">&#39;&lt;a href=&quot;mailto:admin@scipost.org&quot;&gt;report the problem&lt;/a&gt;.&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span>
+
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">recommendation</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">revision_requested</span><span class="p">():</span>
+            <span class="c1"># Send mail to authors to notify about the request for revision.</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span>
+                <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">submission</span><span class="p">,</span>
+                <span class="s1">&#39;recommendation&#39;</span><span class="p">:</span> <span class="n">recommendation</span><span class="p">,</span>
+            <span class="p">})</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_revision_requested_email</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Editorial Recommendation succesfully submitted&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/recommendation_formulate.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="reformulate_eic_recommendation"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.reformulate_eic_recommendation">[docs]</a><span class="k">def</span> <span class="nf">reformulate_eic_recommendation</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Reformulate EIC Recommendation.</span>
+
+<span class="sd">    Accessible for: Editor-in-charge and Editorial Administration</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">[</span><span class="n">STATUS_VOTING_IN_PREPARATION</span><span class="p">,</span> <span class="n">STATUS_PUT_TO_EC_VOTING</span><span class="p">]:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;With the current status of the Submission you are not &#39;</span>
+                                   <span class="s1">&#39;allowed to reformulate the Editorial Recommendation&#39;</span><span class="p">))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">EICRecommendationForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">,</span> <span class="n">reformulate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">recommendation</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">revision_requested</span><span class="p">():</span>
+            <span class="c1"># Send mail to authors to notify about the request for revision.</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span>
+                <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">submission</span><span class="p">,</span>
+                <span class="s1">&#39;recommendation&#39;</span><span class="p">:</span> <span class="n">recommendation</span><span class="p">,</span>
+            <span class="p">})</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_revision_requested_email</span><span class="p">()</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Editorial Recommendation succesfully reformulated&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class="p">:</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">}))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/recommendation_formulate_rewrite.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="c1">###########</span>
+<span class="c1"># Reports</span>
+<span class="c1">###########</span>
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_referee&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="submit_report"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.submit_report">[docs]</a><span class="k">def</span> <span class="nf">submit_report</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">arxiv_identifier_w_vn_nr</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    A form to submit a report on a submission will be shown and processed here.</span>
+
+<span class="sd">    Important checks to be aware of include an author check for the submission,</span>
+<span class="sd">    has the reporting deadline not been reached yet and does there exist any invitation</span>
+<span class="sd">    for the current user on this submission.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">open_for_reporting</span><span class="p">(),</span>
+                                   <span class="n">arxiv_identifier_w_vn_nr</span><span class="o">=</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+    <span class="c1"># Check whether the user can submit a report:</span>
+    <span class="n">current_contributor</span> <span class="o">=</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span>
+    <span class="n">is_author</span> <span class="o">=</span> <span class="n">current_contributor</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">authors</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+    <span class="n">is_author_unchecked</span> <span class="o">=</span> <span class="p">(</span><span class="ow">not</span> <span class="n">is_author</span> <span class="ow">and</span> <span class="ow">not</span>
+                           <span class="p">(</span><span class="n">current_contributor</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">authors_false_claims</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="ow">and</span>
+                           <span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">author_list</span><span class="p">))</span>
+    <span class="n">invitation</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">referee_invitations</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">referee</span><span class="o">=</span><span class="n">current_contributor</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
+
+    <span class="n">errormessage</span> <span class="o">=</span> <span class="kc">None</span>
+    <span class="k">if</span> <span class="ow">not</span> <span class="n">invitation</span><span class="p">:</span>
+        <span class="k">if</span> <span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> <span class="o">&gt;</span> <span class="n">submission</span><span class="o">.</span><span class="n">reporting_deadline</span> <span class="o">+</span> <span class="n">datetime</span><span class="o">.</span><span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span>
+            <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;The reporting deadline has passed. You cannot submit&#39;</span>
+                            <span class="s1">&#39; a Report anymore.&#39;</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="ow">not</span> <span class="n">submission</span><span class="o">.</span><span class="n">open_for_reporting</span><span class="p">:</span>
+            <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;Reporting for this submission has closed. You cannot submit&#39;</span>
+                            <span class="s1">&#39; a Report anymore.&#39;</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span>
+            <span class="c1"># Remove old drafts from the database</span>
+            <span class="n">reports_in_draft_to_remove</span> <span class="o">=</span> <span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">in_draft</span><span class="p">()</span>
+                                          <span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">current_contributor</span><span class="p">))</span>
+            <span class="k">if</span> <span class="n">reports_in_draft_to_remove</span><span class="p">:</span>
+                <span class="n">reports_in_draft_to_remove</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
+    <span class="k">if</span> <span class="n">is_author</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="s1">&#39;You are an author of this Submission and cannot submit a Report.&#39;</span>
+    <span class="k">if</span> <span class="n">is_author_unchecked</span><span class="p">:</span>
+        <span class="n">errormessage</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;The system flagged you as a potential author of this Submission. &#39;</span>
+                        <span class="s1">&#39;Please go to your personal page under the Submissions tab&#39;</span>
+                        <span class="s1">&#39; to clarify this.&#39;</span><span class="p">)</span>
+
+    <span class="k">if</span> <span class="n">errormessage</span><span class="p">:</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">errormessage</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;scipost:personal_page&#39;</span><span class="p">))</span>
+
+    <span class="c1"># Find and fill earlier version of report</span>
+    <span class="k">try</span><span class="p">:</span>
+        <span class="n">report_in_draft</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">reports</span><span class="o">.</span><span class="n">in_draft</span><span class="p">()</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">current_contributor</span><span class="p">)</span>
+    <span class="k">except</span> <span class="n">Report</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
+        <span class="n">report_in_draft</span> <span class="o">=</span> <span class="n">Report</span><span class="p">(</span><span class="n">author</span><span class="o">=</span><span class="n">current_contributor</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+    <span class="n">form</span> <span class="o">=</span> <span class="n">ReportForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">report_in_draft</span><span class="p">,</span> <span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+
+    <span class="c1"># Check if data sent is valid</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">newreport</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="k">if</span> <span class="n">newreport</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">STATUS_DRAFT</span><span class="p">:</span>
+            <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;Your Report has been saved. &#39;</span>
+                                       <span class="s1">&#39;You may carry on working on it,&#39;</span>
+                                       <span class="s1">&#39; or leave the page and finish it later.&#39;</span><span class="p">))</span>
+            <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+            <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/report_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+        <span class="c1"># Send mails if report is submitted</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">newreport</span><span class="p">},</span> <span class="n">request</span><span class="p">)</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">email_EIC_report_delivered</span><span class="p">()</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">email_referee_report_delivered</span><span class="p">()</span>
+
+        <span class="c1"># Add SubmissionEvents for the EIC only, as it can also be rejected still</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;</span><span class="si">%s</span><span class="s1"> has submitted a new Report.&#39;</span>
+                                     <span class="o">%</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Thank you for your Report&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">())</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/report_form.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<div class="viewcode-block" id="vet_submitted_reports_list"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.vet_submitted_reports_list">[docs]</a><span class="k">def</span> <span class="nf">vet_submitted_reports_list</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Reports with status `unvetted` will be shown (oldest first).</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">get_list_or_404</span><span class="p">(</span><span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">))</span>
+    <span class="n">reports_to_vet</span> <span class="o">=</span> <span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">)</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s1">&#39;date_submitted&#39;</span><span class="p">)</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;reports_to_vet&#39;</span><span class="p">:</span> <span class="n">reports_to_vet</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/vet_submitted_reports_list.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="vet_submitted_report"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.vet_submitted_report">[docs]</a><span class="k">def</span> <span class="nf">vet_submitted_report</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">report_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Report with status `unvetted` will be shown. A user may only vet reports of submissions</span>
+<span class="sd">    he/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</span>
+
+<span class="sd">    After vetting an email is sent to the report author, bcc EIC. If report</span>
+<span class="sd">    has not been refused, the submission author is also mailed.</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_for_eic</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">report</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">Report</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">)</span><span class="o">.</span><span class="n">awaiting_vetting</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="n">report_id</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">VetReportForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">})</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">report</span> <span class="o">=</span> <span class="n">form</span><span class="o">.</span><span class="n">process_vetting</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+
+        <span class="c1"># email report author</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;report&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span>
+                              <span class="s1">&#39;email_response&#39;</span><span class="p">:</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;email_response_field&#39;</span><span class="p">]})</span>
+        <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">acknowledge_report_email</span><span class="p">()</span>  <span class="c1"># email report author, bcc EIC</span>
+
+        <span class="c1"># Add SubmissionEvent for the EIC</span>
+        <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;The Report by </span><span class="si">%s</span><span class="s1"> is vetted.&#39;</span>
+                                            <span class="o">%</span> <span class="n">report</span><span class="o">.</span><span class="n">author</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">report</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="n">STATUS_VETTED</span><span class="p">:</span>
+            <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_report_received_email</span><span class="p">()</span>
+
+            <span class="c1"># Add SubmissionEvent to tell the author about the new report</span>
+            <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;A new Report has been submitted.&#39;</span><span class="p">)</span>
+
+        <span class="n">message</span> <span class="o">=</span> <span class="s1">&#39;Submitted Report vetted for &lt;a href=&quot;</span><span class="si">%s</span><span class="s1">&quot;&gt;</span><span class="si">%s</span><span class="s1">&lt;/a&gt;.&#39;</span> <span class="o">%</span> <span class="p">(</span>
+                    <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">get_absolute_url</span><span class="p">(),</span>
+                    <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">)</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">message</span><span class="p">)</span>
+
+        <span class="k">if</span> <span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">editor_in_charge</span> <span class="o">==</span> <span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">:</span>
+            <span class="c1"># Redirect a EIC back to the Editorial Page!</span>
+            <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                    <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">,)))</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:vet_submitted_reports_list&#39;</span><span class="p">))</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;report_to_vet&#39;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span> <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/vet_submitted_report.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<span class="k">def</span> <span class="nf">prepare_for_voting</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">rec_id</span><span class="p">):</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span>
+        <span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">),</span> <span class="nb">id</span><span class="o">=</span><span class="n">rec_id</span><span class="p">)</span>
+
+    <span class="n">fellows_with_expertise</span> <span class="o">=</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">fellows</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">contributor__expertises__contains</span><span class="o">=</span><span class="p">[</span><span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">subject_area</span><span class="p">])</span>
+
+    <span class="n">coauthorships</span> <span class="o">=</span> <span class="p">{}</span>
+
+    <span class="n">eligibility_form</span> <span class="o">=</span> <span class="n">VotingEligibilityForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">,</span> <span class="n">instance</span><span class="o">=</span><span class="n">recommendation</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">eligibility_form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="n">eligibility_form</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;We have registered your selection.&#39;</span><span class="p">)</span>
+
+        <span class="c1"># Add SubmissionEvents</span>
+        <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;The Editorial Recommendation has been &#39;</span>
+                                                    <span class="s1">&#39;put forward to the College for voting.&#39;</span><span class="p">)</span>
+
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:editorial_page&#39;</span><span class="p">,</span>
+                                <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">arxiv_identifier_w_vn_nr</span><span class="p">]))</span>
+    <span class="k">else</span><span class="p">:</span>
+        <span class="c1"># Identify possible co-authorships in last 3 years, disqualifying Fellow from voting:</span>
+        <span class="k">if</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">metadata</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
+            <span class="k">for</span> <span class="n">fellow</span> <span class="ow">in</span> <span class="n">fellows_with_expertise</span><span class="p">:</span>
+                <span class="n">sub_auth_boolean_str</span> <span class="o">=</span> <span class="s1">&#39;((&#39;</span> <span class="o">+</span> <span class="p">(</span><span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span>
+                                               <span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;entries&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;authors&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;name&#39;</span><span class="p">]</span>
+                                               <span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
+                <span class="k">for</span> <span class="n">author</span> <span class="ow">in</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span><span class="o">.</span><span class="n">metadata</span><span class="p">[</span><span class="s1">&#39;entries&#39;</span><span class="p">][</span><span class="mi">0</span><span class="p">][</span><span class="s1">&#39;authors&#39;</span><span class="p">][</span><span class="mi">1</span><span class="p">:]:</span>
+                    <span class="n">sub_auth_boolean_str</span> <span class="o">+=</span> <span class="s1">&#39;+OR+&#39;</span> <span class="o">+</span> <span class="n">author</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">split</span><span class="p">()[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
+                    <span class="n">sub_auth_boolean_str</span> <span class="o">+=</span> <span class="s1">&#39;)+AND+&#39;</span>
+                    <span class="n">search_str</span> <span class="o">=</span> <span class="n">sub_auth_boolean_str</span> <span class="o">+</span> <span class="n">fellow</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span> <span class="o">+</span> <span class="s1">&#39;)&#39;</span>
+                    <span class="n">queryurl</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class="si">%s</span><span class="s1">&#39;</span>
+                                <span class="o">%</span> <span class="n">search_str</span> <span class="o">+</span> <span class="s1">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>
+                                <span class="s1">&#39;&amp;max_results=5&#39;</span><span class="p">)</span>
+                    <span class="n">arxivquery</span> <span class="o">=</span> <span class="n">feedparser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">queryurl</span><span class="p">)</span>
+                    <span class="n">queryresults</span> <span class="o">=</span> <span class="n">arxivquery</span>
+                    <span class="k">if</span> <span class="n">queryresults</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span>
+                        <span class="n">coauthorships</span><span class="p">[</span><span class="n">fellow</span><span class="o">.</span><span class="n">contributor</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">last_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">queryresults</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;recommendation&#39;</span><span class="p">:</span> <span class="n">recommendation</span><span class="p">,</span>
+        <span class="s1">&#39;fellows_with_expertise&#39;</span><span class="p">:</span> <span class="n">fellows_with_expertise</span><span class="p">,</span>
+        <span class="s1">&#39;coauthorships&#39;</span><span class="p">:</span> <span class="n">coauthorships</span><span class="p">,</span>
+        <span class="s1">&#39;eligibility_form&#39;</span><span class="p">:</span> <span class="n">eligibility_form</span><span class="p">,</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/admin/recommendation_prepare_for_voting.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@login_required</span>
+<span class="nd">@fellowship_or_admin_required</span><span class="p">()</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<span class="k">def</span> <span class="nf">vote_on_rec</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">rec_id</span><span class="p">):</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span>
+        <span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">),</span> <span class="nb">id</span><span class="o">=</span><span class="n">rec_id</span><span class="p">)</span>
+
+    <span class="n">form</span> <span class="o">=</span> <span class="n">RecommendationVoteForm</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">POST</span> <span class="ow">or</span> <span class="kc">None</span><span class="p">)</span>
+    <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">is_valid</span><span class="p">():</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;vote&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;agree&#39;</span><span class="p">:</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_for</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
+                <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;You have already voted for this Recommendation.&#39;</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_against</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_abstain</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;vote&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;disagree&#39;</span><span class="p">:</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_for</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_against</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
+                <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;You have already voted for this Recommendation.&#39;</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_abstain</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+        <span class="k">elif</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;vote&#39;</span><span class="p">]</span> <span class="o">==</span> <span class="s1">&#39;abstain&#39;</span><span class="p">:</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_for</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_against</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="k">try</span><span class="p">:</span>
+                <span class="n">recommendation</span><span class="o">.</span><span class="n">voted_abstain</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">)</span>
+            <span class="k">except</span> <span class="n">IntegrityError</span><span class="p">:</span>
+                <span class="n">messages</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;You have already voted for this Recommendation.&#39;</span><span class="p">)</span>
+                <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+        <span class="k">if</span> <span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;remark&#39;</span><span class="p">]:</span>
+            <span class="n">remark</span> <span class="o">=</span> <span class="n">Remark</span><span class="p">(</span><span class="n">contributor</span><span class="o">=</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">contributor</span><span class="p">,</span>
+                            <span class="n">recommendation</span><span class="o">=</span><span class="n">recommendation</span><span class="p">,</span>
+                            <span class="n">date</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span>
+                            <span class="n">remark</span><span class="o">=</span><span class="n">form</span><span class="o">.</span><span class="n">cleaned_data</span><span class="p">[</span><span class="s1">&#39;remark&#39;</span><span class="p">])</span>
+            <span class="n">remark</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">recommendation</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;Thank you for your vote.&#39;</span><span class="p">)</span>
+        <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span>
+
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span>
+        <span class="s1">&#39;recommendation&#39;</span><span class="p">:</span> <span class="n">recommendation</span><span class="p">,</span>
+        <span class="s1">&#39;form&#39;</span><span class="p">:</span> <span class="n">form</span>
+    <span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;submissions/pool/recommendation.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<div class="viewcode-block" id="remind_Fellows_to_vote"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.remind_Fellows_to_vote">[docs]</a><span class="k">def</span> <span class="nf">remind_Fellows_to_vote</span><span class="p">(</span><span class="n">request</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    This method sends an email to all Fellow with pending voting duties.</span>
+<span class="sd">    It must be called by and Editorial Administrator.</span>
+
+<span class="sd">    TODO: This reminder function doesn&#39;t filter per submission?!</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_editable</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">recommendations</span> <span class="o">=</span> <span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">active</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">)</span><span class="o">.</span><span class="n">put_to_voting</span><span class="p">()</span>
+
+    <span class="n">Fellow_emails</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="n">Fellow_names</span> <span class="o">=</span> <span class="p">[]</span>
+    <span class="k">for</span> <span class="n">rec</span> <span class="ow">in</span> <span class="n">recommendations</span><span class="p">:</span>
+        <span class="k">for</span> <span class="n">Fellow</span> <span class="ow">in</span> <span class="n">rec</span><span class="o">.</span><span class="n">eligible_to_vote</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
+            <span class="k">if</span> <span class="p">(</span><span class="n">Fellow</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">rec</span><span class="o">.</span><span class="n">voted_for</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+                <span class="ow">and</span> <span class="n">Fellow</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">rec</span><span class="o">.</span><span class="n">voted_against</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+                <span class="ow">and</span> <span class="n">Fellow</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">rec</span><span class="o">.</span><span class="n">voted_abstain</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
+                <span class="ow">and</span> <span class="n">Fellow</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">Fellow_emails</span><span class="p">):</span>
+                <span class="n">Fellow_emails</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">Fellow</span><span class="o">.</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">)</span>
+                <span class="n">Fellow_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">Fellow</span><span class="p">))</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;Fellow_emails&#39;</span><span class="p">:</span> <span class="n">Fellow_emails</span><span class="p">})</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_Fellows_voting_reminder_email</span><span class="p">()</span>
+    <span class="n">ack_message</span> <span class="o">=</span> <span class="s1">&#39;Email reminders have been sent to: &lt;ul&gt;&#39;</span>
+    <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">Fellow_names</span><span class="p">):</span>
+        <span class="n">ack_message</span> <span class="o">+=</span> <span class="s1">&#39;&lt;li&gt;&#39;</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="s1">&#39;&lt;/li&gt;&#39;</span>
+    <span class="n">ack_message</span> <span class="o">+=</span> <span class="s1">&#39;&lt;/ul&gt;&#39;</span>
+    <span class="n">context</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;ack_message&#39;</span><span class="p">:</span> <span class="n">Template</span><span class="p">(</span><span class="n">ack_message</span><span class="p">)</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="n">Context</span><span class="p">({})),</span>
+               <span class="s1">&#39;followup_message&#39;</span><span class="p">:</span> <span class="s1">&#39;Return to the &#39;</span><span class="p">,</span>
+               <span class="s1">&#39;followup_link&#39;</span><span class="p">:</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">),</span>
+               <span class="s1">&#39;followup_link_label&#39;</span><span class="p">:</span> <span class="s1">&#39;Submissions pool&#39;</span><span class="p">}</span>
+    <span class="k">return</span> <span class="n">render</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;scipost/acknowledgement.html&#39;</span><span class="p">,</span> <span class="n">context</span><span class="p">)</span></div>
+
+
+<span class="nd">@permission_required</span><span class="p">(</span><span class="s1">&#39;scipost.can_fix_College_decision&#39;</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+<span class="nd">@transaction</span><span class="o">.</span><span class="n">atomic</span>
+<div class="viewcode-block" id="fix_College_decision"><a class="viewcode-back" href="../../apps/submissions.html#submissions.views.fix_College_decision">[docs]</a><span class="k">def</span> <span class="nf">fix_College_decision</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">rec_id</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot;</span>
+<span class="sd">    Terminates the voting on a Recommendation.</span>
+<span class="sd">    Called by an Editorial Administrator.</span>
+
+<span class="sd">    # TODO - 2 bugs:</span>
+
+<span class="sd">    TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.</span>
+<span class="sd">    TO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</span>
+<span class="sd">    &quot;&quot;&quot;</span>
+    <span class="n">submissions</span> <span class="o">=</span> <span class="n">Submission</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">pool_full</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">user</span><span class="p">)</span>
+    <span class="n">recommendation</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span><span class="n">EICRecommendation</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
+        <span class="n">submission__in</span><span class="o">=</span><span class="n">submissions</span><span class="p">),</span> <span class="nb">id</span><span class="o">=</span><span class="n">rec_id</span><span class="p">)</span>
+
+    <span class="n">submission</span> <span class="o">=</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">submission</span>
+    <span class="k">if</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">recommendation</span> <span class="ow">in</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]:</span>
+        <span class="c1"># Publish as Tier I, II or III</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;accepted&#39;</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">acceptance_date</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">date</span><span class="o">.</span><span class="n">today</span><span class="p">()</span>
+
+        <span class="c1"># Create a ProductionStream object</span>
+        <span class="n">prodstream</span> <span class="o">=</span> <span class="n">ProductionStream</span><span class="p">(</span><span class="n">submission</span><span class="o">=</span><span class="n">submission</span><span class="p">)</span>
+        <span class="n">prodstream</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+        <span class="n">ed_admins</span> <span class="o">=</span> <span class="n">Group</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;Editorial Administrators&#39;</span><span class="p">)</span>
+        <span class="n">assign_perm</span><span class="p">(</span><span class="s1">&#39;can_perform_supervisory_actions&#39;</span><span class="p">,</span> <span class="n">ed_admins</span><span class="p">,</span> <span class="n">prodstream</span><span class="p">)</span>
+        <span class="n">assign_perm</span><span class="p">(</span><span class="s1">&#39;can_work_for_stream&#39;</span><span class="p">,</span> <span class="n">ed_admins</span><span class="p">,</span> <span class="n">prodstream</span><span class="p">)</span>
+
+        <span class="c1"># Add SubmissionEvent for authors</span>
+        <span class="c1"># Do not write a new event for minor/major modification: already done at moment of</span>
+        <span class="c1"># creation.</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;An Editorial Recommendation has been formulated: </span><span class="si">%s</span><span class="s1">.&#39;</span>
+                                        <span class="o">%</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">get_recommendation_display</span><span class="p">())</span>
+    <span class="k">elif</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">recommendation</span> <span class="o">==</span> <span class="o">-</span><span class="mi">3</span><span class="p">:</span>
+        <span class="c1"># Reject + update-reject other versions of submission</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;rejected&#39;</span>
+        <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">submission</span><span class="o">.</span><span class="n">other_versions_pool</span><span class="p">:</span>
+            <span class="n">sub</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="s1">&#39;resubmitted_rejected&#39;</span>
+            <span class="n">sub</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+
+        <span class="c1"># Add SubmissionEvent for authors</span>
+        <span class="c1"># Do not write a new event for minor/major modification: already done at moment of</span>
+        <span class="c1"># creation.</span>
+        <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_author</span><span class="p">(</span><span class="s1">&#39;An Editorial Recommendation has been formulated: </span><span class="si">%s</span><span class="s1">.&#39;</span>
+                                        <span class="o">%</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">get_recommendation_display</span><span class="p">())</span>
+
+    <span class="c1"># Add SubmissionEvent for EIC</span>
+    <span class="n">submission</span><span class="o">.</span><span class="n">add_event_for_eic</span><span class="p">(</span><span class="s1">&#39;The Editorial College</span><span class="se">\&#39;</span><span class="s1">s decision has been fixed: </span><span class="si">%s</span><span class="s1">.&#39;</span>
+                                 <span class="o">%</span> <span class="n">recommendation</span><span class="o">.</span><span class="n">get_recommendation_display</span><span class="p">())</span>
+
+    <span class="n">submission</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">load</span><span class="p">({</span><span class="s1">&#39;submission&#39;</span><span class="p">:</span> <span class="n">submission</span><span class="p">,</span> <span class="s1">&#39;recommendation&#39;</span><span class="p">:</span> <span class="n">recommendation</span><span class="p">})</span>
+    <span class="n">SubmissionUtils</span><span class="o">.</span><span class="n">send_author_College_decision_email</span><span class="p">()</span>
+    <span class="n">messages</span><span class="o">.</span><span class="n">success</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="s1">&#39;The Editorial College</span><span class="se">\&#39;</span><span class="s1">s decision has been fixed.&#39;</span><span class="p">)</span>
+    <span class="k">return</span> <span class="n">redirect</span><span class="p">(</span><span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;submissions:pool&#39;</span><span class="p">))</span></div>
+
+
+<span class="k">class</span> <span class="nc">EICRecommendationView</span><span class="p">(</span><span class="n">SubmissionAdminViewMixin</span><span class="p">,</span> <span class="n">DetailView</span><span class="p">):</span>
+    <span class="n">permission_required</span> <span class="o">=</span> <span class="s1">&#39;scipost.can_fix_College_decision&#39;</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;submissions/pool/recommendation.html&#39;</span>
+    <span class="n">editorial_page</span> <span class="o">=</span> <span class="kc">True</span>
+
+    <span class="k">def</span> <span class="nf">get_context_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="sd">&quot;&quot;&quot; Get the EICRecommendation as a submission-related instance. &quot;&quot;&quot;</span>
+        <span class="n">ctx</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_context_data</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
+        <span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;recommendation&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_object_or_404</span><span class="p">(</span>
+            <span class="n">ctx</span><span class="p">[</span><span class="s1">&#39;submission&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">eicrecommendations</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="nb">id</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;rec_id&#39;</span><span class="p">])</span>
+        <span class="k">return</span> <span class="n">ctx</span>
+
+
+<span class="k">class</span> <span class="nc">PlagiarismView</span><span class="p">(</span><span class="n">SubmissionAdminViewMixin</span><span class="p">,</span> <span class="n">UpdateView</span><span class="p">):</span>
+    <span class="n">permission_required</span> <span class="o">=</span> <span class="s1">&#39;scipost.can_do_plagiarism_checks&#39;</span>
+    <span class="n">template_name</span> <span class="o">=</span> <span class="s1">&#39;submissions/admin/plagiarism_report.html&#39;</span>
+    <span class="n">editorial_page</span> <span class="o">=</span> <span class="kc">True</span>
+    <span class="n">form_class</span> <span class="o">=</span> <span class="n">iThenticateReportForm</span>
+
+    <span class="k">def</span> <span class="nf">get_object</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_object</span><span class="p">()</span>
+        <span class="k">return</span> <span class="n">submission</span><span class="o">.</span><span class="n">plagiarism_report</span>
+
+
+<span class="k">class</span> <span class="nc">PlagiarismReportPDFView</span><span class="p">(</span><span class="n">SubmissionAdminViewMixin</span><span class="p">,</span> <span class="n">SingleObjectMixin</span><span class="p">,</span> <span class="n">RedirectView</span><span class="p">):</span>
+    <span class="n">permission_required</span> <span class="o">=</span> <span class="s1">&#39;scipost.can_do_plagiarism_checks&#39;</span>
+    <span class="n">editorial_page</span> <span class="o">=</span> <span class="kc">True</span>
+
+    <span class="k">def</span> <span class="nf">get_redirect_url</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
+        <span class="n">submission</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_object</span><span class="p">()</span>
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">submission</span><span class="o">.</span><span class="n">plagiarism_report</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">Http404</span>
+        <span class="n">url</span> <span class="o">=</span> <span class="n">submission</span><span class="o">.</span><span class="n">plagiarism_report</span><span class="o">.</span><span class="n">get_report_url</span><span class="p">()</span>
+
+        <span class="k">if</span> <span class="ow">not</span> <span class="n">url</span><span class="p">:</span>
+            <span class="k">raise</span> <span class="n">Http404</span>
+        <span class="k">return</span> <span class="n">url</span>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_modules/theses/models.html b/docs/codebase/_build/html/_modules/theses/models.html
new file mode 100644
index 0000000000000000000000000000000000000000..ef9217ba5a4e4b0be5002415bfb54332391d095a
--- /dev/null
+++ b/docs/codebase/_build/html/_modules/theses/models.html
@@ -0,0 +1,263 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>theses.models &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../../genindex.html"/>
+        <link rel="search" title="Search" href="../../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../../index.html"/>
+        <link rel="up" title="Module code" href="../index.html"/> 
+
+  
+  <script src="../../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="../../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="../../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../index.html">Module code</a> &raquo;</li>
+      
+    <li>theses.models</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <h1>Source code for theses.models</h1><div class="highlight"><pre>
+<span></span><span class="kn">from</span> <span class="nn">django.db</span> <span class="k">import</span> <span class="n">models</span>
+<span class="kn">from</span> <span class="nn">django.contrib.contenttypes.fields</span> <span class="k">import</span> <span class="n">GenericRelation</span>
+<span class="kn">from</span> <span class="nn">django.urls</span> <span class="k">import</span> <span class="n">reverse</span>
+<span class="kn">from</span> <span class="nn">django.utils</span> <span class="k">import</span> <span class="n">timezone</span>
+
+<span class="kn">from</span> <span class="nn">journals.constants</span> <span class="k">import</span> <span class="n">SCIPOST_JOURNALS_DOMAINS</span>
+<span class="kn">from</span> <span class="nn">scipost.constants</span> <span class="k">import</span> <span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span> <span class="n">SCIPOST_SUBJECT_AREAS</span>
+
+<span class="kn">from</span> <span class="nn">.constants</span> <span class="k">import</span> <span class="n">THESIS_TYPES</span>
+<span class="kn">from</span> <span class="nn">.managers</span> <span class="k">import</span> <span class="n">ThesisLinkManager</span>
+
+
+<div class="viewcode-block" id="ThesisLink"><a class="viewcode-back" href="../../apps/theses.html#theses.models.ThesisLink">[docs]</a><span class="k">class</span> <span class="nc">ThesisLink</span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
+    <span class="sd">&quot;&quot;&quot; An URL pointing to a thesis &quot;&quot;&quot;</span>
+    <span class="n">requested_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;requested_theses&#39;</span><span class="p">,</span>
+        <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="n">vetted</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">vetted_by</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">on_delete</span><span class="o">=</span><span class="n">models</span><span class="o">.</span><span class="n">CASCADE</span><span class="p">)</span>
+    <span class="nb">type</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">choices</span><span class="o">=</span><span class="n">THESIS_TYPES</span><span class="p">,</span> <span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
+    <span class="n">discipline</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
+        <span class="n">max_length</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_DISCIPLINES</span><span class="p">,</span>
+        <span class="n">default</span><span class="o">=</span><span class="s1">&#39;physics&#39;</span><span class="p">)</span>
+    <span class="n">domain</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
+        <span class="n">max_length</span><span class="o">=</span><span class="mi">3</span><span class="p">,</span> <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_JOURNALS_DOMAINS</span><span class="p">,</span>
+        <span class="n">blank</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
+    <span class="n">subject_area</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
+        <span class="n">max_length</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
+        <span class="n">choices</span><span class="o">=</span><span class="n">SCIPOST_SUBJECT_AREAS</span><span class="p">,</span>
+        <span class="n">default</span><span class="o">=</span><span class="s1">&#39;Phys:QP&#39;</span><span class="p">)</span>
+    <span class="n">open_for_commenting</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">BooleanField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
+    <span class="n">title</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;title&#39;</span><span class="p">)</span>
+    <span class="n">pub_link</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">URLField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;URL (external repository)&#39;</span><span class="p">)</span>
+    <span class="n">author</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
+    <span class="n">author_as_cont</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;theses&#39;</span><span class="p">)</span>
+    <span class="n">author_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;claimed_theses&#39;</span><span class="p">)</span>
+    <span class="n">author_false_claims</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;false_claimed_theses&#39;</span><span class="p">)</span>
+    <span class="n">supervisor</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mi">1000</span><span class="p">)</span>
+    <span class="n">supervisor_as_cont</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
+        <span class="s1">&#39;scipost.Contributor&#39;</span><span class="p">,</span> <span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
+        <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;supervisor(s)&#39;</span><span class="p">,</span>
+        <span class="n">related_name</span><span class="o">=</span><span class="s1">&#39;supervised_theses&#39;</span><span class="p">)</span>
+    <span class="n">institution</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span>
+        <span class="n">max_length</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span>
+        <span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;degree granting institution&#39;</span><span class="p">)</span>
+    <span class="n">defense_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;date of thesis defense&#39;</span><span class="p">)</span>
+    <span class="n">abstract</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">TextField</span><span class="p">(</span><span class="n">verbose_name</span><span class="o">=</span><span class="s1">&#39;abstract, outline or summary&#39;</span><span class="p">)</span>
+    <span class="n">latest_activity</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="n">timezone</span><span class="o">.</span><span class="n">now</span><span class="p">)</span>
+
+    <span class="c1"># Comments can be added to a ThesisLink</span>
+    <span class="n">comments</span> <span class="o">=</span> <span class="n">GenericRelation</span><span class="p">(</span><span class="s1">&#39;comments.Comment&#39;</span><span class="p">,</span> <span class="n">related_query_name</span><span class="o">=</span><span class="s1">&#39;theses&#39;</span><span class="p">)</span>
+
+    <span class="n">objects</span> <span class="o">=</span> <span class="n">ThesisLinkManager</span><span class="p">()</span>
+
+    <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">title</span>
+
+    <span class="k">def</span> <span class="nf">get_absolute_url</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
+        <span class="k">return</span> <span class="n">reverse</span><span class="p">(</span><span class="s1">&#39;theses:thesis&#39;</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">id</span><span class="p">])</span></div>
+</pre></div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../../_static/jquery.js"></script>
+      <script type="text/javascript" src="../../_static/underscore.js"></script>
+      <script type="text/javascript" src="../../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_sources/apps.txt b/docs/codebase/_build/html/_sources/apps.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ecdef2c3e7a0d0ee28a9823e55739f2567aff948
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps.txt
@@ -0,0 +1,12 @@
+Apps
+====
+
+.. toctree::
+   :maxdepth: 2
+
+   apps/scipost
+   apps/submissions
+   apps/journals
+   apps/comments
+   apps/commentaries
+   apps/theses
diff --git a/docs/codebase/_build/html/_sources/apps/commentaries.txt b/docs/codebase/_build/html/_sources/apps/commentaries.txt
new file mode 100644
index 0000000000000000000000000000000000000000..acefed34c3d484ec30d2131cd358d67852dcbfce
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/commentaries.txt
@@ -0,0 +1,14 @@
+commentaries
+=======
+
+
+Models
+------
+.. automodule:: commentaries.models
+   :members:
+
+Views
+-----
+
+.. automodule:: commentaries.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/apps/comments.txt b/docs/codebase/_build/html/_sources/apps/comments.txt
new file mode 100644
index 0000000000000000000000000000000000000000..094ca88c5a51cba59d6fcb48a222e6a14ebea8ab
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/comments.txt
@@ -0,0 +1,14 @@
+comments
+=======
+
+
+Models
+------
+.. automodule:: comments.models
+   :members:
+
+Views
+-----
+
+.. automodule:: comments.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/apps/journals.txt b/docs/codebase/_build/html/_sources/apps/journals.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8efd0bc2564af42a3db5f824c5bbfc38082943f7
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/journals.txt
@@ -0,0 +1,14 @@
+journals
+=======
+
+
+Models
+------
+.. automodule:: journals.models
+   :members:
+
+Views
+-----
+
+.. automodule:: journals.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/apps/scipost.txt b/docs/codebase/_build/html/_sources/apps/scipost.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e8eed73e92bdee22d0bde919634365cc3e2dd174
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/scipost.txt
@@ -0,0 +1,14 @@
+scipost
+=======
+
+
+Models
+------
+.. automodule:: scipost.models
+   :members:
+
+Views
+-----
+
+.. automodule:: scipost.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/apps/submissions.txt b/docs/codebase/_build/html/_sources/apps/submissions.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ab7a7fa2c9bcac1a43e33e723d72086131fd166c
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/submissions.txt
@@ -0,0 +1,14 @@
+submissions
+=======
+
+
+Models
+------
+.. automodule:: submissions.models
+   :members:
+
+Views
+-----
+
+.. automodule:: submissions.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/apps/theses.txt b/docs/codebase/_build/html/_sources/apps/theses.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4dd9f1ee8d2ae4394723950256a5c935b0faa170
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/apps/theses.txt
@@ -0,0 +1,14 @@
+theses
+=======
+
+
+Models
+------
+.. automodule:: theses.models
+   :members:
+
+Views
+-----
+
+.. automodule:: theses.views
+   :members:
diff --git a/docs/codebase/_build/html/_sources/index.txt b/docs/codebase/_build/html/_sources/index.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1b16b88b3e58574aefa91938304c57c313104def
--- /dev/null
+++ b/docs/codebase/_build/html/_sources/index.txt
@@ -0,0 +1,18 @@
+Welcome to SciPost's codebase documentation
+===========================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   maintenance
+   apps
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/guides/maintenance/maintenance.rst b/docs/codebase/_build/html/_sources/maintenance.txt
similarity index 67%
rename from docs/guides/maintenance/maintenance.rst
rename to docs/codebase/_build/html/_sources/maintenance.txt
index 82ab83716d571b416716ac03deafe5d6eaa82247..97d1c9fe0edbe3243494ff48819fa53e02b7d65f 100644
--- a/docs/guides/maintenance/maintenance.rst
+++ b/docs/codebase/_build/html/_sources/maintenance.txt
@@ -5,4 +5,4 @@ Maintenance
 .. toctree::
    :maxdepth: 2
 
-   maintenance/maintenance
+   maintenance/docs
diff --git a/docs/developers/maintenance/docs.rst b/docs/codebase/_build/html/_sources/maintenance/docs.txt
similarity index 88%
rename from docs/developers/maintenance/docs.rst
rename to docs/codebase/_build/html/_sources/maintenance/docs.txt
index 784ada5758831940930019f828c95c6c354d8de4..dcd7a6a13df65f9590cd490db1d854a90196cf50 100644
--- a/docs/developers/maintenance/docs.rst
+++ b/docs/codebase/_build/html/_sources/maintenance/docs.txt
@@ -19,4 +19,4 @@ Sphinxdoc-generated docs (viewable online)
 Updating the docs:
 ~~~~~~~~~~~~~~~~~~
 
-Use the management command ``python manage.py updatedoc -b <project-slug>`` with slug scipost.
+Use the management command ``python manage.py updatedoc -b <project-slug>`` with slugs `codebase`, `admin` and `users`.
diff --git a/docs/codebase/_build/html/_static/ajax-loader.gif b/docs/codebase/_build/html/_static/ajax-loader.gif
new file mode 100644
index 0000000000000000000000000000000000000000..61faf8cab23993bd3e1560bff0668bd628642330
Binary files /dev/null and b/docs/codebase/_build/html/_static/ajax-loader.gif differ
diff --git a/docs/codebase/_build/html/_static/basic.css b/docs/codebase/_build/html/_static/basic.css
new file mode 100644
index 0000000000000000000000000000000000000000..0b79414a16adfcf062bf14fc3c040bc335eb79ad
--- /dev/null
+++ b/docs/codebase/_build/html/_static/basic.css
@@ -0,0 +1,611 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 170px;
+}
+
+img {
+    border: 0;
+    max-width: 100%;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable {
+    width: 100%;
+}
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+div.modindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+div.genindex-jumpbox {
+    border-top: 1px solid #ddd;
+    border-bottom: 1px solid #ddd;
+    margin: 1em 0 1em 0;
+    padding: 0.4em;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+img.align-left, .figure.align-left, object.align-left {
+    clear: left;
+    float: left;
+    margin-right: 1em;
+}
+
+img.align-right, .figure.align-right, object.align-right {
+    clear: right;
+    float: right;
+    margin-left: 1em;
+}
+
+img.align-center, .figure.align-center, object.align-center {
+  display: block;
+  margin-left: auto;
+  margin-right: auto;
+}
+
+.align-left {
+    text-align: left;
+}
+
+.align-center {
+    text-align: center;
+}
+
+.align-right {
+    text-align: right;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 5px;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+table.citation {
+    border-left: solid 1px gray;
+    margin-left: 1px;
+}
+
+table.citation td {
+    border-bottom: none;
+}
+
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+
+/* -- other body styles ----------------------------------------------------- */
+
+ol.arabic {
+    list-style: decimal;
+}
+
+ol.loweralpha {
+    list-style: lower-alpha;
+}
+
+ol.upperalpha {
+    list-style: upper-alpha;
+}
+
+ol.lowerroman {
+    list-style: lower-roman;
+}
+
+ol.upperroman {
+    list-style: upper-roman;
+}
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlighted {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.sig-paren {
+    font-size: larger;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa;
+}
+
+.line-block {
+    display: block;
+    margin-top: 1em;
+    margin-bottom: 1em;
+}
+
+.line-block .line-block {
+    margin-top: 0;
+    margin-bottom: 0;
+    margin-left: 1.5em;
+}
+
+.guilabel, .menuselection {
+    font-family: sans-serif;
+}
+
+.accelerator {
+    text-decoration: underline;
+}
+
+.classifier {
+    font-style: oblique;
+}
+
+abbr, acronym {
+    border-bottom: dotted 1px;
+    cursor: help;
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+    overflow-y: hidden;  /* fixes display issues on Chrome browsers */
+}
+
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+div.code-block-caption {
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+    margin-top: 0;
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+    margin: 0;
+}
+
+code.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+code.descclassname {
+    background-color: transparent;
+}
+
+code.xref, a code {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
+    background-color: transparent;
+}
+
+.viewcode-link {
+    float: right;
+}
+
+.viewcode-back {
+    float: right;
+    font-family: sans-serif;
+}
+
+div.viewcode-block:target {
+    margin: -1px -10px;
+    padding: 0 10px;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.body div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+@media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0 !important;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_static/comment-bright.png b/docs/codebase/_build/html/_static/comment-bright.png
new file mode 100644
index 0000000000000000000000000000000000000000..551517b8c83b76f734ff791f847829a760ad1903
Binary files /dev/null and b/docs/codebase/_build/html/_static/comment-bright.png differ
diff --git a/docs/codebase/_build/html/_static/comment-close.png b/docs/codebase/_build/html/_static/comment-close.png
new file mode 100644
index 0000000000000000000000000000000000000000..09b54be46da3f0d4a5061da289dc91d8a2cdbc9c
Binary files /dev/null and b/docs/codebase/_build/html/_static/comment-close.png differ
diff --git a/docs/codebase/_build/html/_static/comment.png b/docs/codebase/_build/html/_static/comment.png
new file mode 100644
index 0000000000000000000000000000000000000000..92feb52b8824c6b0f59b658b1196c61de9162a95
Binary files /dev/null and b/docs/codebase/_build/html/_static/comment.png differ
diff --git a/docs/codebase/_build/html/_static/css/badge_only.css b/docs/codebase/_build/html/_static/css/badge_only.css
new file mode 100644
index 0000000000000000000000000000000000000000..7e17fb148c63fa9780c3dd65cef5b7593927ef62
--- /dev/null
+++ b/docs/codebase/_build/html/_static/css/badge_only.css
@@ -0,0 +1,2 @@
+.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../font/fontawesome_webfont.eot");src:url("../font/fontawesome_webfont.eot?#iefix") format("embedded-opentype"),url("../font/fontawesome_webfont.woff") format("woff"),url("../font/fontawesome_webfont.ttf") format("truetype"),url("../font/fontawesome_webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:0.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}
+/*# sourceMappingURL=badge_only.css.map */
diff --git a/docs/codebase/_build/html/_static/css/theme.css b/docs/codebase/_build/html/_static/css/theme.css
new file mode 100644
index 0000000000000000000000000000000000000000..7be93399a4f530da7eb43e2c214ec42cea89a6c3
--- /dev/null
+++ b/docs/codebase/_build/html/_static/css/theme.css
@@ -0,0 +1,5 @@
+*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:0.2em 0;background:#ccc;color:#000;padding:0.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:0.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*!
+ *  Font Awesome 4.2.0 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("../fonts/fontawesome-webfont.eot?v=4.2.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.2.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff?v=4.2.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.2.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{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.33333em;line-height:0.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.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:0.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-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{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-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:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:0.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:0.5;-webkit-transition:opacity 0.05s ease-in;-moz-transition:opacity 0.05s ease-in;transition:opacity 0.05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all 0.3s ease-in;-moz-transition:all 0.3s ease-in;transition:all 0.3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all 0.1s linear;-moz-transition:all 0.1s linear;transition:all 0.1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:0.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 0.3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.35765%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:0.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:0.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}input[type="datetime-local"]{padding:0.34375em 0.625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:0.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:0.5em 0.625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border 0.3s linear;-moz-transition:border 0.3s linear;transition:border 0.3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{width:36px;height:12px;margin:12px 0;position:relative;border-radius:4px;background:#ccc;cursor:pointer;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:before{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all 0.2s ease-in-out;-moz-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.wy-switch:after{content:"false";position:absolute;left:48px;display:block;font-size:12px;color:#ccc}.wy-switch.active{background:#1e8449}.wy-switch.active:before{left:24px;background:#27AE60}.wy-switch.active:after{content:"true"}.wy-switch.disabled,.wy-switch.active.disabled{cursor:not-allowed}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:0.5em 0.625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:0.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0.3em;display:block}.wy-form label{margin-bottom:0.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:0.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.codeblock-example{border:1px solid #e1e4e5;border-bottom:none;padding:24px;padding-top:48px;font-weight:500;background:#fff;position:relative}.codeblock-example:after{content:"Example";position:absolute;top:0px;left:0px;background:#9B59B6;color:#fff;padding:6px 12px}.codeblock-example.prettyprint-example-only{border:1px solid #e1e4e5;margin-bottom:24px}.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;background:#fff;margin:1px 0 24px 0}.codeblock div[class^='highlight'],pre.literal-block div[class^='highlight'],.rst-content .literal-block div[class^='highlight'],div[class^='highlight'] div[class^='highlight']{border:none;background:none;margin:0}div[class^='highlight'] td.code{width:100%}.linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;color:#d9d9d9}div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:12px;line-height:1.5;display:block;overflow:auto;color:#404040}@media print{.codeblock,pre.literal-block,.rst-content .literal-block,.rst-content pre.literal-block,div[class^='highlight'],div[class^='highlight'] pre{white-space:pre-wrap}}.hll{background-color:#ffc;margin:0 -12px;padding:0 12px;display:block}.c{color:#998;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{font-weight:bold}.o{font-weight:bold}.cm{color:#998;font-style:italic}.cp{color:#999;font-weight:bold}.c1{color:#998;font-style:italic}.cs{color:#999;font-weight:bold;font-style:italic}.gd{color:#000;background-color:#fdd}.gd .x{color:#000;background-color:#faa}.ge{font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000;background-color:#dfd}.gi .x{color:#000;background-color:#afa}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:purple;font-weight:bold}.gt{color:#a00}.kc{font-weight:bold}.kd{font-weight:bold}.kn{font-weight:bold}.kp{font-weight:bold}.kr{font-weight:bold}.kt{color:#458;font-weight:bold}.m{color:#099}.s{color:#d14}.n{color:#333}.na{color:teal}.nb{color:#0086b3}.nc{color:#458;font-weight:bold}.no{color:teal}.ni{color:purple}.ne{color:#900;font-weight:bold}.nf{color:#900;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d14}.sc{color:#d14}.sd{color:#d14}.s2{color:#d14}.se{color:#d14}.sh{color:#d14}.si{color:#d14}.sx{color:#d14}.sr{color:#009926}.s1{color:#d14}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}.gc{color:#999;background-color:#EAF2F5}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#555;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:0.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:0.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:0.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:0.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:0.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:0.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:0.4045em 5.663em;border-top:none;border-bottom:none}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:0.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical .local-toc li ul{display:block}.wy-menu-vertical li ul li a{margin-bottom:0;color:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:0.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:0.809em;margin-bottom:0.809em;z-index:200;background-color:#2980B9;text-align:center;padding:0.809em;display:block;color:#fcfcfc;margin-bottom:0.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto 0.809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:0.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:0.85em}.wy-side-nav-search>div.version{margin-top:-0.4045em;margin-bottom:0.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all 0.2s ease-in;-moz-transition:all 0.2s ease-in;transition:all 0.2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:left repeat-y #fcfcfc;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxOERBMTRGRDBFMUUxMUUzODUwMkJCOThDMEVFNURFMCIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDoxOERBMTRGRTBFMUUxMUUzODUwMkJCOThDMEVFNURFMCI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjE4REExNEZCMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjE4REExNEZDMEUxRTExRTM4NTAyQkI5OEMwRUU1REUwIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+EwrlwAAAAA5JREFUeNpiMDU0BAgwAAE2AJgB9BnaAAAAAElFTkSuQmCC);background-size:300px 1px}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:0.4045em 0.809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:#999}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:#999}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1400px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;border-top:solid 10px #343131;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}img{width:100%;height:auto}}.rst-content img{max-width:100%;height:auto !important}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:24px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink{display:none;visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after{visibility:visible;content:"";font-family:FontAwesome;display:inline-block}.rst-content h1:hover .headerlink,.rst-content h2:hover .headerlink,.rst-content .toctree-wrapper p.caption:hover .headerlink,.rst-content h3:hover .headerlink,.rst-content h4:hover .headerlink,.rst-content h5:hover .headerlink,.rst-content h6:hover .headerlink,.rst-content dl dt:hover .headerlink,.rst-content p.caption:hover .headerlink{display:inline-block}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:super;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:#999}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none;padding-top:5px}.rst-content table.field-list td>strong{display:inline-block;margin-top:3px}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left;padding-left:0}.rst-content tt,.rst-content tt,.rst-content code{color:#000;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:inline-block;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),local("Inconsolata-Regular"),url(../fonts/Inconsolata-Regular.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")}
+/*# sourceMappingURL=theme.css.map */
diff --git a/docs/codebase/_build/html/_static/doctools.js b/docs/codebase/_build/html/_static/doctools.js
new file mode 100644
index 0000000000000000000000000000000000000000..816349563588e87ca99c7cf2d6e54268e52e761d
--- /dev/null
+++ b/docs/codebase/_build/html/_static/doctools.js
@@ -0,0 +1,287 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/**
+ * select a different prefix for underscore
+ */
+$u = _.noConflict();
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
+    "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
+    "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {};
+}
+ */
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+  return decodeURIComponent(x).replace(/\+/g, ' ');
+};
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s == 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+};
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node) {
+    if (node.nodeType == 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
+        var span = document.createElement("span");
+        span.className = className;
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this);
+      });
+    }
+  }
+  return this.each(function() {
+    highlight(this);
+  });
+};
+
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  jQuery.uaMatch = function(ua) {
+    ua = ua.toLowerCase();
+
+    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+      /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+      /(msie) ([\w.]+)/.exec(ua) ||
+      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+      [];
+
+    return {
+      browser: match[ 1 ] || "",
+      version: match[ 2 ] || "0"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initIndexTable();
+    
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can safely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated == 'undefined')
+      return string;
+    return (typeof translated == 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated == 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      if (!body.length) {
+        body = $('body');
+      }
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlighted');
+        });
+      }, 10);
+      $('<p class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
+          .appendTo($('#searchbox'));
+    }
+  },
+
+  /**
+   * init the domain index toggle buttons
+   */
+  initIndexTable : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      $('tr.cg-' + idnum).toggle();
+      if (src.substr(-9) == 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('#searchbox .highlight-link').fadeOut(300);
+    $('span.highlighted').removeClass('highlighted');
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this == '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    $(document).keyup(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box or textarea
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
+        switch (event.keyCode) {
+          case 37: // left
+            var prevHref = $('link[rel="prev"]').prop('href');
+            if (prevHref) {
+              window.location.href = prevHref;
+              return false;
+            }
+          case 39: // right
+            var nextHref = $('link[rel="next"]').prop('href');
+            if (nextHref) {
+              window.location.href = nextHref;
+              return false;
+            }
+        }
+      }
+    });
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_static/down-pressed.png b/docs/codebase/_build/html/_static/down-pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c30d004b71b32bb2fc06b3bd4dc8278baab0946
Binary files /dev/null and b/docs/codebase/_build/html/_static/down-pressed.png differ
diff --git a/docs/codebase/_build/html/_static/down.png b/docs/codebase/_build/html/_static/down.png
new file mode 100644
index 0000000000000000000000000000000000000000..f48098a43b0c36342db9e1a9a7372e79b2484a59
Binary files /dev/null and b/docs/codebase/_build/html/_static/down.png differ
diff --git a/docs/codebase/_build/html/_static/file.png b/docs/codebase/_build/html/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..254c60bfbe2715ae2edca48ebccfd074deb8031d
Binary files /dev/null and b/docs/codebase/_build/html/_static/file.png differ
diff --git a/docs/codebase/_build/html/_static/fonts/Inconsolata-Bold.ttf b/docs/codebase/_build/html/_static/fonts/Inconsolata-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..58c9fef3a01c899867e280f49283fbb8e57d631d
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/Inconsolata-Bold.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/Inconsolata-Regular.ttf b/docs/codebase/_build/html/_static/fonts/Inconsolata-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..a87ffba6bef48195c8cf4e3ccb42ea77034f7cbc
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/Inconsolata-Regular.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/Lato-Bold.ttf b/docs/codebase/_build/html/_static/fonts/Lato-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..74343694e2b2114272f38b1124813b972cb592e5
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/Lato-Bold.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/Lato-Regular.ttf b/docs/codebase/_build/html/_static/fonts/Lato-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..04ea8efb1367727b081dea87e63818be0a4d02f0
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/Lato-Regular.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/RobotoSlab-Bold.ttf b/docs/codebase/_build/html/_static/fonts/RobotoSlab-Bold.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..df5d1df2730433013f41bf2698cbe249b075aa02
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/RobotoSlab-Bold.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/RobotoSlab-Regular.ttf b/docs/codebase/_build/html/_static/fonts/RobotoSlab-Regular.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..eb52a7907362cc3392eb74892883f5d9e260b638
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/RobotoSlab-Regular.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.eot b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..84677bc0c5f37f1fac9d87548c4554b5c91717cf
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.eot differ
diff --git a/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.svg b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d907b25ae60ec7e3d32e4027aa6e6b7595de97af
--- /dev/null
+++ b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.svg
@@ -0,0 +1,520 @@
+<?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 " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1536 160q0 -119 -84.5 -203.5t-203.5 -84.5h-192v608h203l30 224h-233v143q0 54 28 83t96 29l132 1v207q-96 9 -180 9q-136 0 -218 -80.5t-82 -225.5v-166h-224v-224h224v-608h-544q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5v-960z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-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 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-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.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -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.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 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.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="&#xf15c;" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
+<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="&#xf174;" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="&#xf198;" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="&#xf199;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
+<glyph unicode="&#xf1a1;" horiz-adv-x="1984" d="M831 572q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41t96.5 -41t40.5 -98zM1292 711q56 0 96.5 -41t40.5 -98q0 -56 -40.5 -96t-96.5 -40q-57 0 -98 40t-41 96q0 57 41.5 98t97.5 41zM1984 722q0 -62 -31 -114t-83 -82q5 -33 5 -61 q0 -121 -68.5 -230.5t-197.5 -193.5q-125 -82 -285.5 -125.5t-335.5 -43.5q-176 0 -336.5 43.5t-284.5 125.5q-129 84 -197.5 193t-68.5 231q0 29 5 66q-48 31 -77 81.5t-29 109.5q0 94 66 160t160 66q83 0 148 -55q248 158 592 164l134 423q4 14 17.5 21.5t28.5 4.5 l347 -82q22 50 68.5 81t102.5 31q77 0 131.5 -54.5t54.5 -131.5t-54.5 -132t-131.5 -55q-76 0 -130.5 54t-55.5 131l-315 74l-116 -366q327 -14 560 -166q64 58 151 58q94 0 160 -66t66 -160zM1664 1459q-45 0 -77 -32t-32 -77t32 -77t77 -32t77 32t32 77t-32 77t-77 32z M77 722q0 -67 51 -111q49 131 180 235q-36 25 -82 25q-62 0 -105.5 -43.5t-43.5 -105.5zM1567 105q112 73 171.5 166t59.5 194t-59.5 193.5t-171.5 165.5q-116 75 -265.5 115.5t-313.5 40.5t-313.5 -40.5t-265.5 -115.5q-112 -73 -171.5 -165.5t-59.5 -193.5t59.5 -194 t171.5 -166q116 -75 265.5 -115.5t313.5 -40.5t313.5 40.5t265.5 115.5zM1850 605q57 46 57 117q0 62 -43.5 105.5t-105.5 43.5q-49 0 -86 -28q131 -105 178 -238zM1258 237q11 11 27 11t27 -11t11 -27.5t-11 -27.5q-99 -99 -319 -99h-2q-220 0 -319 99q-11 11 -11 27.5 t11 27.5t27 11t27 -11q77 -77 265 -77h2q188 0 265 77z" />
+<glyph unicode="&#xf1a2;" d="M950 393q7 7 17.5 7t17.5 -7t7 -18t-7 -18q-65 -64 -208 -64h-1h-1q-143 0 -207 64q-8 7 -8 18t8 18q7 7 17.5 7t17.5 -7q49 -51 172 -51h1h1q122 0 173 51zM671 613q0 -37 -26 -64t-63 -27t-63 27t-26 64t26 63t63 26t63 -26t26 -63zM1214 1049q-29 0 -50 21t-21 50 q0 30 21 51t50 21q30 0 51 -21t21 -51q0 -29 -21 -50t-51 -21zM1216 1408q132 0 226 -94t94 -227v-894q0 -133 -94 -227t-226 -94h-896q-132 0 -226 94t-94 227v894q0 133 94 227t226 94h896zM1321 596q35 14 57 45.5t22 70.5q0 51 -36 87.5t-87 36.5q-60 0 -98 -48 q-151 107 -375 115l83 265l206 -49q1 -50 36.5 -85t84.5 -35q50 0 86 35.5t36 85.5t-36 86t-86 36q-36 0 -66 -20.5t-45 -53.5l-227 54q-9 2 -17.5 -2.5t-11.5 -14.5l-95 -302q-224 -4 -381 -113q-36 43 -93 43q-51 0 -87 -36.5t-36 -87.5q0 -37 19.5 -67.5t52.5 -45.5 q-7 -25 -7 -54q0 -98 74 -181.5t201.5 -132t278.5 -48.5q150 0 277.5 48.5t201.5 132t74 181.5q0 27 -6 54zM971 702q37 0 63 -26t26 -63t-26 -64t-63 -27t-63 27t-26 64t26 63t63 26z" />
+<glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="&#xf1a5;" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="&#xf1a7;" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="&#xf1a9;" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="&#xf1aa;" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="&#xf1ab;" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="&#xf1ad;" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="&#xf1b5;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="&#xf1b6;" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="&#xf1b7;" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="&#xf1b9;" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1ba;" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="&#xf1bb;" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="&#xf1bc;" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1bd;" d="M1397 1408q58 0 98.5 -40.5t40.5 -98.5v-1258q0 -58 -40.5 -98.5t-98.5 -40.5h-1258q-58 0 -98.5 40.5t-40.5 98.5v1258q0 58 40.5 98.5t98.5 40.5h1258zM1465 11v1258q0 28 -20 48t-48 20h-1258q-28 0 -48 -20t-20 -48v-1258q0 -28 20 -48t48 -20h1258q28 0 48 20t20 48 zM694 749l188 -387l533 145v-496q0 -7 -5.5 -12.5t-12.5 -5.5h-1258q-7 0 -12.5 5.5t-5.5 12.5v141l711 195l-212 439q4 1 12 2.5t12 1.5q170 32 303.5 21.5t221 -46t143.5 -94.5q27 -28 -25 -42q-64 -16 -256 -62l-97 198q-111 7 -240 -16zM1397 1287q7 0 12.5 -5.5 t5.5 -12.5v-428q-85 30 -188 52q-294 64 -645 12l-18 -3l-65 134h-233l85 -190q-132 -51 -230 -137v560q0 7 5.5 12.5t12.5 5.5h1258zM286 387q-14 -3 -26 4.5t-14 21.5q-24 203 166 305l129 -270z" />
+<glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="&#xf1c0;" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="&#xf1c1;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="&#xf1c2;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="&#xf1c3;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="&#xf1c4;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="&#xf1c5;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="&#xf1c6;" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="&#xf1c7;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="&#xf1c8;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="&#xf1c9;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="&#xf1ca;" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="&#xf1d4;" d="M825 547l343 588h-150q-21 -39 -63.5 -118.5t-68 -128.5t-59.5 -118.5t-60 -128.5h-3q-21 48 -44.5 97t-52 105.5t-46.5 92t-54 104.5t-49 95h-150l323 -589v-435h134v436zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="&#xf1da;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1db;" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="&#xf1de;" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="&#xf1e0;" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="&#xf1e1;" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf1e3;" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="&#xf1e4;" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="&#xf1e5;" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="&#xf1e7;" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="&#xf1e8;" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="&#xf1e9;" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1ed;" horiz-adv-x="1792" d="M1112 1090q0 159 -237 159h-70q-32 0 -59.5 -21.5t-34.5 -52.5l-63 -276q-2 -5 -2 -16q0 -24 17 -39.5t41 -15.5h53q69 0 128.5 13t112.5 41t83.5 81.5t30.5 126.5zM1716 938q0 -265 -220 -428q-219 -161 -612 -161h-61q-32 0 -59 -21.5t-34 -52.5l-73 -316 q-8 -36 -40.5 -61.5t-69.5 -25.5h-213q-31 0 -53 20t-22 51q0 10 13 65h151q34 0 64 23.5t38 56.5l73 316q8 33 37.5 57t63.5 24h61q390 0 607 160t217 421q0 129 -51 207q183 -92 183 -335zM1533 1123q0 -264 -221 -428q-218 -161 -612 -161h-60q-32 0 -59.5 -22t-34.5 -53 l-73 -315q-8 -36 -40 -61.5t-69 -25.5h-214q-31 0 -52.5 19.5t-21.5 51.5q0 8 2 20l300 1301q8 36 40.5 61.5t69.5 25.5h444q68 0 125 -4t120.5 -15t113.5 -30t96.5 -50.5t77.5 -74t49.5 -103.5t18.5 -136z" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
+<glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="&#xf1f3;" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="&#xf1f4;" horiz-adv-x="2304" d="M322 689h-15q-19 0 -19 18q0 28 19 85q5 15 15 19.5t28 4.5q77 0 77 -49q0 -41 -30.5 -59.5t-74.5 -18.5zM664 528q-47 0 -47 29q0 62 123 62l3 -3q-5 -88 -79 -88zM1438 687h-15q-19 0 -19 19q0 28 19 85q5 15 14.5 19t28.5 4q77 0 77 -49q0 -41 -30.5 -59.5 t-74.5 -18.5zM1780 527q-47 0 -47 30q0 62 123 62l3 -3q-5 -89 -79 -89zM373 894h-128q-8 0 -14.5 -4t-8.5 -7.5t-7 -12.5q-3 -7 -45 -190t-42 -192q0 -7 5.5 -12.5t13.5 -5.5h62q25 0 32.5 34.5l15 69t32.5 34.5q47 0 87.5 7.5t80.5 24.5t63.5 52.5t23.5 84.5 q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM719 798q-38 0 -74 -6q-2 0 -8.5 -1t-9 -1.5l-7.5 -1.5t-7.5 -2t-6.5 -3t-6.5 -4t-5 -5t-4.5 -7t-4 -9q-9 -29 -9 -39t9 -10q5 0 21.5 5t19.5 6q30 8 58 8q74 0 74 -36q0 -11 -10 -14q-8 -2 -18 -3t-21.5 -1.5t-17.5 -1.5 q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5q0 -38 26 -59.5t64 -21.5q24 0 45.5 6.5t33 13t38.5 23.5q-3 -7 -3 -15t5.5 -13.5t12.5 -5.5h56q1 1 7 3.5t7.5 3.5t5 3.5t5 5.5t2.5 8l45 194q4 13 4 30q0 81 -145 81zM1247 793h-74q-22 0 -39 -23q-5 -7 -29.5 -51 t-46.5 -81.5t-26 -38.5l-5 4q0 77 -27 166q-1 5 -3.5 8.5t-6 6.5t-6.5 5t-8.5 3t-8.5 1.5t-9.5 1t-9 0.5h-10h-8.5q-38 0 -38 -21l1 -5q5 -53 25 -151t25 -143q2 -16 2 -24q0 -19 -30.5 -61.5t-30.5 -58.5q0 -13 40 -13q61 0 76 25l245 415q10 20 10 26q0 9 -8 9zM1489 892 h-129q-18 0 -29 -23q-6 -13 -46.5 -191.5t-40.5 -190.5q0 -20 43 -20h7.5h9h9t9.5 1t8.5 2t8.5 3t6.5 4.5t5.5 6t3 8.5l21 91q2 10 10.5 17t19.5 7q47 0 87.5 7t80.5 24.5t63.5 52.5t23.5 84q0 36 -14.5 61t-41 36.5t-53.5 15.5t-62 4zM1835 798q-26 0 -74 -6 q-38 -6 -48 -16q-7 -8 -11 -19q-8 -24 -8 -39q0 -10 8 -10q1 0 41 12q30 8 58 8q74 0 74 -36q0 -12 -10 -14q-4 -1 -57 -7q-38 -4 -64.5 -10t-56.5 -19.5t-45.5 -39t-15.5 -62.5t26 -58.5t64 -21.5q24 0 45 6t34 13t38 24q-3 -15 -3 -16q0 -5 2 -8.5t6.5 -5.5t8 -3.5 t10.5 -2t9.5 -0.5h9.5h8q42 0 48 25l45 194q3 15 3 31q0 81 -145 81zM2157 889h-55q-25 0 -33 -40q-10 -44 -36.5 -167t-42.5 -190v-5q0 -16 16 -18h1h57q10 0 18.5 6.5t10.5 16.5l83 374h-1l1 5q0 7 -5.5 12.5t-13.5 5.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048 q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f5;" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f6;" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f7;" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f8;" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1f9;" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1fa;" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="&#xf1fb;" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="&#xf1fc;" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="&#xf1fd;" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="&#xf1fe;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="&#xf200;" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf201;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf202;" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="&#xf203;" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf204;" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="&#xf205;" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="&#xf206;" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf207;" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="&#xf208;" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="&#xf209;" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="&#xf20a;" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="&#xf20b;" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf20c;" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="&#xf20d;" horiz-adv-x="1792" />
+<glyph unicode="&#xf20e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.ttf b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..96a3639cdde5e8ab459c6380e3b9524ee81641dc
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.ttf differ
diff --git a/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.woff b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..628b6a52a87e62c6f22426e17c01f6a303aa194e
Binary files /dev/null and b/docs/codebase/_build/html/_static/fonts/fontawesome-webfont.woff differ
diff --git a/docs/codebase/_build/html/_static/jquery-1.11.1.js b/docs/codebase/_build/html/_static/jquery-1.11.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4b67f7e6c1a94df167f31657769717a71581066
--- /dev/null
+++ b/docs/codebase/_build/html/_static/jquery-1.11.1.js
@@ -0,0 +1,10308 @@
+/*!
+ * jQuery JavaScript Library v1.11.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-05-01T17:42Z
+ */
+
+(function( global, factory ) {
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper window is present,
+		// execute the factory and get jQuery
+		// For environments that do not inherently posses a window with a document
+		// (such as Node.js), expose a jQuery-making factory as module.exports
+		// This accentuates the need for the creation of a real window
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Can't do this because several apps including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+// Support: Firefox 18+
+//
+
+var deletedIds = [];
+
+var slice = deletedIds.slice;
+
+var concat = deletedIds.concat;
+
+var push = deletedIds.push;
+
+var indexOf = deletedIds.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	version = "1.11.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1, IE<9
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	// (You can seed the arguments with an array of args, but this is
+	// only used internally.)
+	each: function( callback, args ) {
+		return jQuery.each( this, callback, args );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map(this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		}));
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor(null);
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: deletedIds.sort,
+	splice: deletedIds.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var src, copyIsArray, copy, name, options, clone,
+		target = arguments[0] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+		// Only deal with non-null/undefined values
+		if ( (options = arguments[ i ]) != null ) {
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray(src) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject(src) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend({
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type(obj) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type(obj) === "array";
+	},
+
+	isWindow: function( obj ) {
+		/* jshint eqeqeq: false */
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	isPlainObject: function( obj ) {
+		var key;
+
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!hasOwn.call(obj, "constructor") &&
+				!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
+				return false;
+			}
+		} catch ( e ) {
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Support: IE<9
+		// Handle iteration over inherited properties before own properties.
+		if ( support.ownLast ) {
+			for ( key in obj ) {
+				return hasOwn.call( obj, key );
+			}
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call(obj) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data );
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	// args is for internal usage only
+	each: function( obj, callback, args ) {
+		var value,
+			i = 0,
+			length = obj.length,
+			isArray = isArraylike( obj );
+
+		if ( args ) {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.apply( obj[ i ], args );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+
+		// A special, fast, case for the most common use of each
+		} else {
+			if ( isArray ) {
+				for ( ; i < length; i++ ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			} else {
+				for ( i in obj ) {
+					value = callback.call( obj[ i ], i, obj[ i ] );
+
+					if ( value === false ) {
+						break;
+					}
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1, IE<9
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArraylike( Object(arr) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( indexOf ) {
+				return indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		while ( j < len ) {
+			first[ i++ ] = second[ j++ ];
+		}
+
+		// Support: IE<9
+		// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
+		if ( len !== len ) {
+			while ( second[j] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var value,
+			i = 0,
+			length = elems.length,
+			isArray = isArraylike( elems ),
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArray ) {
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var args, proxy, tmp;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: function() {
+		return +( new Date() );
+	},
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+});
+
+// Populate the class2type map
+jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+});
+
+function isArraylike( obj ) {
+	var length = obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	if ( obj.nodeType === 1 && length ) {
+		return true;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v1.10.19
+ * http://sizzlejs.com/
+ *
+ * Copyright 2013 jQuery Foundation, Inc. and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2014-04-18
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + -(new Date()),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	strundefined = typeof undefined,
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf if we can't use a native one
+	indexOf = arr.indexOf || function( elem ) {
+		var i = 0,
+			len = this.length;
+		for ( ; i < len; i++ ) {
+			if ( this[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+	// http://www.w3.org/TR/css3-syntax/#characters
+	characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Loosely modeled on CSS identifier characters
+	// An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
+	// Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = characterEncoding.replace( "w", "w#" ),
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + characterEncoding + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + characterEncoding + ")" ),
+		"CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
+		"TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var match, elem, m, nodeType,
+		// QSA vars
+		i, groups, old, nid, newContext, newSelector;
+
+	if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+		setDocument( context );
+	}
+
+	context = context || document;
+	results = results || [];
+
+	if ( !selector || typeof selector !== "string" ) {
+		return results;
+	}
+
+	if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
+		return [];
+	}
+
+	if ( documentIsHTML && !seed ) {
+
+		// Shortcuts
+		if ( (match = rquickExpr.exec( selector )) ) {
+			// Speed-up: Sizzle("#ID")
+			if ( (m = match[1]) ) {
+				if ( nodeType === 9 ) {
+					elem = context.getElementById( m );
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document (jQuery #6963)
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE, Opera, and Webkit return items
+						// by name instead of ID
+						if ( elem.id === m ) {
+							results.push( elem );
+							return results;
+						}
+					} else {
+						return results;
+					}
+				} else {
+					// Context is not a document
+					if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
+						contains( context, elem ) && elem.id === m ) {
+						results.push( elem );
+						return results;
+					}
+				}
+
+			// Speed-up: Sizzle("TAG")
+			} else if ( match[2] ) {
+				push.apply( results, context.getElementsByTagName( selector ) );
+				return results;
+
+			// Speed-up: Sizzle(".CLASS")
+			} else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
+				push.apply( results, context.getElementsByClassName( m ) );
+				return results;
+			}
+		}
+
+		// QSA path
+		if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+			nid = old = expando;
+			newContext = context;
+			newSelector = nodeType === 9 && selector;
+
+			// qSA works strangely on Element-rooted queries
+			// We can work around this by specifying an extra ID on the root
+			// and working up from there (Thanks to Andrew Dupont for the technique)
+			// IE 8 doesn't work on object elements
+			if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
+				groups = tokenize( selector );
+
+				if ( (old = context.getAttribute("id")) ) {
+					nid = old.replace( rescape, "\\$&" );
+				} else {
+					context.setAttribute( "id", nid );
+				}
+				nid = "[id='" + nid + "'] ";
+
+				i = groups.length;
+				while ( i-- ) {
+					groups[i] = nid + toSelector( groups[i] );
+				}
+				newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
+				newSelector = groups.join(",");
+			}
+
+			if ( newSelector ) {
+				try {
+					push.apply( results,
+						newContext.querySelectorAll( newSelector )
+					);
+					return results;
+				} catch(qsaError) {
+				} finally {
+					if ( !old ) {
+						context.removeAttribute("id");
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = attrs.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== strundefined && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare,
+		doc = node ? node.ownerDocument || node : preferredDoc,
+		parent = doc.defaultView;
+
+	// If no document and documentElement is available, return
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Set our document
+	document = doc;
+	docElem = doc.documentElement;
+
+	// Support tests
+	documentIsHTML = !isXML( doc );
+
+	// Support: IE>8
+	// If iframe document is assigned to "document" variable and if iframe has been reloaded,
+	// IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
+	// IE6-8 do not support the defaultView property so parent will be undefined
+	if ( parent && parent !== parent.top ) {
+		// IE11 does not have attachEvent, so all must suffer
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", function() {
+				setDocument();
+			}, false );
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", function() {
+				setDocument();
+			});
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( doc.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Check if getElementsByClassName can be trusted
+	support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
+		div.innerHTML = "<div class='a'></div><div class='a i'></div>";
+
+		// Support: Safari<4
+		// Catch class over-caching
+		div.firstChild.className = "i";
+		// Support: Opera<10
+		// Catch gEBCN failure to find non-leading classes
+		return div.getElementsByClassName("i").length === 2;
+	});
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
+				var m = context.getElementById( id );
+				// Check parentNode to catch when Blackberry 4.6 returns
+				// nodes that are no longer in the document #6963
+				return m && m.parentNode ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== strundefined ) {
+				return context.getElementsByTagName( tag );
+			}
+		} :
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowclip^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = doc.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully does not implement inclusive descendent
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === doc ? -1 :
+				b === doc ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return doc;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch(e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, outerCache, node, diff, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+							// Seek `elem` from a previously-cached index
+							outerCache = parent[ expando ] || (parent[ expando ] = {});
+							cache = outerCache[ type ] || [];
+							nodeIndex = cache[0] === dirruns && cache[1];
+							diff = cache[0] === dirruns && cache[2];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									outerCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						// Use previously-cached element index if available
+						} else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
+							diff = cache[1];
+
+						// xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
+						} else {
+							// Use the same loop as above to seek `elem` from the start
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
+									// Cache the index of each encountered element
+									if ( useCache ) {
+										(node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
+									}
+
+									if ( node === elem ) {
+										break;
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf.call( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+						if ( (oldCache = outerCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							outerCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf.call( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context !== document && context;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Keep `i` a string if there are no elements so `matchedCount` will be "00" below
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context, xml ) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// Apply set filters to unmatched elements
+			matchedCount += i;
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is no seed and only one group
+	if ( match.length === 1 ) {
+
+		// Take a shortcut and set the context if the root selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome<14
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[":"] = jQuery.expr.pseudos;
+jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		});
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		});
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
+	});
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		}));
+};
+
+jQuery.fn.extend({
+	find: function( selector ) {
+		var i,
+			ret = [],
+			self = this,
+			len = self.length;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter(function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			}) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], false) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow(this, selector || [], true) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+});
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// Use the correct document accordingly with window argument (sandbox)
+	document = window.document,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && (match[1] || !context) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[1] ) {
+					context = context instanceof jQuery ? context[0] : context;
+
+					// scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[1],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[2] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[2] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[0] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || rootjQuery ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[0] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return typeof rootjQuery.ready !== "undefined" ?
+				rootjQuery.ready( selector ) :
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.extend({
+	dir: function( elem, dir, until ) {
+		var matched = [],
+			cur = elem[ dir ];
+
+		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
+			if ( cur.nodeType === 1 ) {
+				matched.push( cur );
+			}
+			cur = cur[dir];
+		}
+		return matched;
+	},
+
+	sibling: function( n, elem ) {
+		var r = [];
+
+		for ( ; n; n = n.nextSibling ) {
+			if ( n.nodeType === 1 && n !== elem ) {
+				r.push( n );
+			}
+		}
+
+		return r;
+	}
+});
+
+jQuery.fn.extend({
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter(function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[i] ) ) {
+					return true;
+				}
+			}
+		});
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && (pos ?
+					pos.index(cur) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector(cur, selectors)) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[0], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[0] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.unique(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter(selector)
+		);
+	}
+});
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each({
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return jQuery.dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return jQuery.dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return jQuery.dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return jQuery.dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return jQuery.sibling( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		if ( this.length > 1 ) {
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				ret = jQuery.unique( ret );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				ret = ret.reverse();
+			}
+		}
+
+		return this.pushStack( ret );
+	};
+});
+var rnotwhite = (/\S+/g);
+
+
+
+// String to Object options format cache
+var optionsCache = {};
+
+// Convert String-formatted options into Object-formatted ones and store in cache
+function createOptions( options ) {
+	var object = optionsCache[ options ] = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	});
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		( optionsCache[ options ] || createOptions( options ) ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+		// Last fire value (for non-forgettable lists)
+		memory,
+		// Flag to know if list was already fired
+		fired,
+		// End of the loop when firing
+		firingLength,
+		// Index of currently firing callback (modified by remove if needed)
+		firingIndex,
+		// First callback to fire (used internally by add and fireWith)
+		firingStart,
+		// Actual callback list
+		list = [],
+		// Stack of fire calls for repeatable lists
+		stack = !options.once && [],
+		// Fire callbacks
+		fire = function( data ) {
+			memory = options.memory && data;
+			fired = true;
+			firingIndex = firingStart || 0;
+			firingStart = 0;
+			firingLength = list.length;
+			firing = true;
+			for ( ; list && firingIndex < firingLength; firingIndex++ ) {
+				if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
+					memory = false; // To prevent further calls using add
+					break;
+				}
+			}
+			firing = false;
+			if ( list ) {
+				if ( stack ) {
+					if ( stack.length ) {
+						fire( stack.shift() );
+					}
+				} else if ( memory ) {
+					list = [];
+				} else {
+					self.disable();
+				}
+			}
+		},
+		// Actual Callbacks object
+		self = {
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+					// First, we save the current length
+					var start = list.length;
+					(function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							var type = jQuery.type( arg );
+							if ( type === "function" ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && type !== "string" ) {
+								// Inspect recursively
+								add( arg );
+							}
+						});
+					})( arguments );
+					// Do we need to add the callbacks to the
+					// current firing batch?
+					if ( firing ) {
+						firingLength = list.length;
+					// With memory, if we're not firing then
+					// we should call right away
+					} else if ( memory ) {
+						firingStart = start;
+						fire( memory );
+					}
+				}
+				return this;
+			},
+			// Remove a callback from the list
+			remove: function() {
+				if ( list ) {
+					jQuery.each( arguments, function( _, arg ) {
+						var index;
+						while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+							list.splice( index, 1 );
+							// Handle firing indexes
+							if ( firing ) {
+								if ( index <= firingLength ) {
+									firingLength--;
+								}
+								if ( index <= firingIndex ) {
+									firingIndex--;
+								}
+							}
+						}
+					});
+				}
+				return this;
+			},
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
+			},
+			// Remove all callbacks from the list
+			empty: function() {
+				list = [];
+				firingLength = 0;
+				return this;
+			},
+			// Have the list do nothing anymore
+			disable: function() {
+				list = stack = memory = undefined;
+				return this;
+			},
+			// Is it disabled?
+			disabled: function() {
+				return !list;
+			},
+			// Lock the list in its current state
+			lock: function() {
+				stack = undefined;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			// Is it locked?
+			locked: function() {
+				return !stack;
+			},
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( list && ( !fired || stack ) ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					if ( firing ) {
+						stack.push( args );
+					} else {
+						fire( args );
+					}
+				}
+				return this;
+			},
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend({
+
+	Deferred: function( func ) {
+		var tuples = [
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks("memory") ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred(function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[1] ](function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.done( newDefer.resolve )
+										.fail( newDefer.reject )
+										.progress( newDefer.notify );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
+								}
+							});
+						});
+						fns = null;
+					}).promise();
+				},
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[1] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(function() {
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[0] ] = function() {
+				deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[0] + "With" ] = list.fireWith;
+		});
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred. If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+
+					} else if ( !(--remaining) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject )
+						.progress( updateFunc( i, progressContexts, progressValues ) );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+});
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend({
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
+		if ( !document.body ) {
+			return setTimeout( jQuery.ready );
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+});
+
+/**
+ * Clean-up method for dom ready events
+ */
+function detach() {
+	if ( document.addEventListener ) {
+		document.removeEventListener( "DOMContentLoaded", completed, false );
+		window.removeEventListener( "load", completed, false );
+
+	} else {
+		document.detachEvent( "onreadystatechange", completed );
+		window.detachEvent( "onload", completed );
+	}
+}
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+	// readyState === "complete" is good enough for us to call the dom ready in oldIE
+	if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
+		detach();
+		jQuery.ready();
+	}
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called after the browser event has already occurred.
+		// we once tried to use readyState "interactive" here, but it caused issues like the one
+		// discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
+		if ( document.readyState === "complete" ) {
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed, false );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed, false );
+
+		// If IE event model is used
+		} else {
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", completed );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", completed );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch(e) {}
+
+			if ( top && top.doScroll ) {
+				(function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll("left");
+						} catch(e) {
+							return setTimeout( doScrollCheck, 50 );
+						}
+
+						// detach all dom ready events
+						detach();
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				})();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+
+var strundefined = typeof undefined;
+
+
+
+// Support: IE<9
+// Iteration over object's inherited properties before its own
+var i;
+for ( i in jQuery( support ) ) {
+	break;
+}
+support.ownLast = i !== "0";
+
+// Note: most support tests are defined in their respective modules.
+// false until the test is run
+support.inlineBlockNeedsLayout = false;
+
+// Execute ASAP in case we need to set body.style.zoom
+jQuery(function() {
+	// Minified: var a,b,c,d
+	var val, div, body, container;
+
+	body = document.getElementsByTagName( "body" )[ 0 ];
+	if ( !body || !body.style ) {
+		// Return for frameset docs that don't have a body
+		return;
+	}
+
+	// Setup
+	div = document.createElement( "div" );
+	container = document.createElement( "div" );
+	container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+	body.appendChild( container ).appendChild( div );
+
+	if ( typeof div.style.zoom !== strundefined ) {
+		// Support: IE<8
+		// Check if natively block-level elements act like inline-block
+		// elements when setting their display to 'inline' and giving
+		// them layout
+		div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+
+		support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
+		if ( val ) {
+			// Prevent IE 6 from affecting layout for positioned elements #11048
+			// Prevent IE from shrinking the body in IE 7 mode #12869
+			// Support: IE<8
+			body.style.zoom = 1;
+		}
+	}
+
+	body.removeChild( container );
+});
+
+
+
+
+(function() {
+	var div = document.createElement( "div" );
+
+	// Execute the test only if not already executed in another module.
+	if (support.deleteExpando == null) {
+		// Support: IE<9
+		support.deleteExpando = true;
+		try {
+			delete div.test;
+		} catch( e ) {
+			support.deleteExpando = false;
+		}
+	}
+
+	// Null elements to avoid leaks in IE.
+	div = null;
+})();
+
+
+/**
+ * Determines whether an object can have data
+ */
+jQuery.acceptData = function( elem ) {
+	var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
+		nodeType = +elem.nodeType || 1;
+
+	// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
+	return nodeType !== 1 && nodeType !== 9 ?
+		false :
+
+		// Nodes accept data unless otherwise specified; rejection can be conditional
+		!noData || noData !== true && elem.getAttribute("classid") === noData;
+};
+
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var ret, thisCache,
+		internalKey = jQuery.expando,
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
+		return;
+	}
+
+	if ( !id ) {
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+		// Avoid exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( typeof name === "string" ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+	if ( !jQuery.acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, i,
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split(" ");
+					}
+				}
+			} else {
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			i = name.length;
+			while ( i-- ) {
+				delete thisCache[ name[i] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	/* jshint eqeqeq: false */
+	} else if ( support.deleteExpando || cache != cache.window ) {
+		/* jshint eqeqeq: true */
+		delete cache[ id ];
+
+	// When all else fails, null
+	} else {
+		cache[ id ] = null;
+	}
+}
+
+jQuery.extend({
+	cache: {},
+
+	// The following elements (space-suffixed to avoid Object.prototype collisions)
+	// throw uncatchable exceptions if you attempt to set expando properties
+	noData: {
+		"applet ": true,
+		"embed ": true,
+		// ...but Flash objects (which have this classid) *can* handle expandos
+		"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	}
+});
+
+jQuery.fn.extend({
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[0],
+			attrs = elem && elem.attributes;
+
+		// Special expections of .data basically thwart jQuery.access,
+		// so implement the relevant behavior ourselves
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice(5) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each(function() {
+				jQuery.data( this, key );
+			});
+		}
+
+		return arguments.length > 1 ?
+
+			// Sets one value
+			this.each(function() {
+				jQuery.data( this, key, value );
+			}) :
+
+			// Gets one value
+			// Try to fetch any internally stored data first
+			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
+	},
+
+	removeData: function( key ) {
+		return this.each(function() {
+			jQuery.removeData( this, key );
+		});
+	}
+});
+
+
+jQuery.extend({
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray(data) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray(data) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object, or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks("once memory").add(function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			})
+		});
+	}
+});
+
+jQuery.fn.extend({
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[0], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each(function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[0] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			});
+	},
+	dequeue: function( type ) {
+		return this.each(function() {
+			jQuery.dequeue( this, type );
+		});
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+});
+var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
+	};
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		length = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < length; i++ ) {
+				fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			length ? fn( elems[0], key ) : emptyGet;
+};
+var rcheckableType = (/^(?:checkbox|radio)$/i);
+
+
+
+(function() {
+	// Minified: var a,b,c
+	var input = document.createElement( "input" ),
+		div = document.createElement( "div" ),
+		fragment = document.createDocumentFragment();
+
+	// Setup
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// IE strips leading whitespace when .innerHTML is used
+	support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+	// Make sure that tbody elements aren't automatically inserted
+	// IE will insert them into empty tables
+	support.tbody = !div.getElementsByTagName( "tbody" ).length;
+
+	// Make sure that link elements get serialized correctly by innerHTML
+	// This requires a wrapper element in IE
+	support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
+
+	// Makes sure cloning an html5 element does not cause problems
+	// Where outerHTML is undefined, this still works
+	support.html5Clone =
+		document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	input.type = "checkbox";
+	input.checked = true;
+	fragment.appendChild( input );
+	support.appendChecked = input.checked;
+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	// Support: IE6-IE11+
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	fragment.appendChild( div );
+	div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
+
+	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+	// old WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Opera does not clone events (and typeof div.attachEvent === undefined).
+	// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
+	support.noCloneEvent = true;
+	if ( div.attachEvent ) {
+		div.attachEvent( "onclick", function() {
+			support.noCloneEvent = false;
+		});
+
+		div.cloneNode( true ).click();
+	}
+
+	// Execute the test only if not already executed in another module.
+	if (support.deleteExpando == null) {
+		// Support: IE<9
+		support.deleteExpando = true;
+		try {
+			delete div.test;
+		} catch( e ) {
+			support.deleteExpando = false;
+		}
+	}
+})();
+
+
+(function() {
+	var i, eventName,
+		div = document.createElement( "div" );
+
+	// Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
+	for ( i in { submit: true, change: true, focusin: true }) {
+		eventName = "on" + i;
+
+		if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
+			// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+			div.setAttribute( eventName, "t" );
+			support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
+		}
+	}
+
+	// Null elements to avoid leaks in IE.
+	div = null;
+})();
+
+
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+		var tmp, events, t, handleObjIn,
+			special, eventHandle, handleObj,
+			handlers, type, namespaces, origType,
+			elemData = jQuery._data( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !(events = elemData.events) ) {
+			events = elemData.events = {};
+		}
+		if ( !(eventHandle = elemData.handle) ) {
+			eventHandle = elemData.handle = function( e ) {
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+			// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend({
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join(".")
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !(handlers = events[ type ]) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+		var j, handleObj, tmp,
+			origCount, t, events,
+			special, handlers, type,
+			namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !(events = elemData.events) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[t] ) || [];
+			type = origType = tmp[1];
+			namespaces = ( tmp[2] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		var handle, ontype, cur,
+			bubbleType, special, tmp, i,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf(".") >= 0 ) {
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split(".");
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf(":") < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join(".");
+		event.namespace_re = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === (elem.ownerDocument || document) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
+				jQuery.acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, ret, handleObj, matched, j,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[0] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or
+				// 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
+							.apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( (event.result = ret) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var sel, handleObj, matches, i,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		// Avoid non-left-click bubbling in Firefox (#3861)
+		if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
+
+			/* jshint eqeqeq: false */
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+				/* jshint eqeqeq: true */
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) >= 0 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push({ elem: cur, handlers: matches });
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Chrome 23+, Safari?
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	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( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
+		filter: function( event, original ) {
+			var body, eventDoc, doc,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY + ( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) - ( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	simulate: function( type, elem, event, bubble ) {
+		// Piggyback on a donor event to simulate a different one.
+		// Fake originalEvent to avoid donor's stopPropagation, but if the
+		// simulated event prevents default then we do the same on the donor.
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true,
+				originalEvent: {}
+			}
+		);
+		if ( bubble ) {
+			jQuery.event.trigger( e, null, elem );
+		} else {
+			jQuery.event.dispatch.call( elem, e );
+		}
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle, false );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event, to properly expose it to GC
+			if ( typeof elem[ name ] === strundefined ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+	// Allow instantiation without the 'new' keyword
+	if ( !(this instanceof jQuery.Event) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+				// Support: IE < 9, Android < 4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+		if ( !e ) {
+			return;
+		}
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && e.stopImmediatePropagation ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+jQuery.each({
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mousenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+});
+
+// IE submit delegation
+if ( !support.submitBubbles ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
+				if ( form && !jQuery._data( form, "submitBubbles" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submit_bubble = true;
+					});
+					jQuery._data( form, "submitBubbles", true );
+				}
+			});
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submit_bubble ) {
+				delete event._submit_bubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event, true );
+				}
+			}
+		},
+
+		teardown: function() {
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !support.changeBubbles ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._just_changed = true;
+						}
+					});
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._just_changed && !event.isTrigger ) {
+							this._just_changed = false;
+						}
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event, true );
+					});
+				}
+				return false;
+			}
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event, true );
+						}
+					});
+					jQuery._data( elem, "changeBubbles", true );
+				}
+			});
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Create "bubbling" focus and blur events
+if ( !support.focusinBubbles ) {
+	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+				jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
+			};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = jQuery._data( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = jQuery._data( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					jQuery._removeData( doc, fix );
+				} else {
+					jQuery._data( doc, fix, attaches );
+				}
+			}
+		};
+	});
+}
+
+jQuery.fn.extend({
+
+	on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
+		var type, origFn;
+
+		// Types can be a map of types/handlers
+		if ( typeof types === "object" ) {
+			// ( types-Object, selector, data )
+			if ( typeof selector !== "string" ) {
+				// ( types-Object, data )
+				data = data || selector;
+				selector = undefined;
+			}
+			for ( type in types ) {
+				this.on( type, selector, data, types[ type ], one );
+			}
+			return this;
+		}
+
+		if ( data == null && fn == null ) {
+			// ( types, fn )
+			fn = selector;
+			data = selector = undefined;
+		} else if ( fn == null ) {
+			if ( typeof selector === "string" ) {
+				// ( types, selector, fn )
+				fn = data;
+				data = undefined;
+			} else {
+				// ( types, data, fn )
+				fn = data;
+				data = selector;
+				selector = undefined;
+			}
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		} else if ( !fn ) {
+			return this;
+		}
+
+		if ( one === 1 ) {
+			origFn = fn;
+			fn = function( event ) {
+				// Can use an empty set, since event contains the info
+				jQuery().off( event );
+				return origFn.apply( this, arguments );
+			};
+			// Use same guid so caller can remove using origFn
+			fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+		}
+		return this.each( function() {
+			jQuery.event.add( this, types, fn, data, selector );
+		});
+	},
+	one: function( types, selector, data, fn ) {
+		return this.on( types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each(function() {
+			jQuery.event.remove( this, types, fn, selector );
+		});
+	},
+
+	trigger: function( type, data ) {
+		return this.each(function() {
+			jQuery.event.trigger( type, data, this );
+		});
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[0];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+});
+
+
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
+		"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
+	rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
+	rleadingWhitespace = /^\s+/,
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
+	rtagName = /<([\w:]+)/,
+	rtbody = /<tbody/i,
+	rhtml = /<|&#?\w+;/,
+	rnoInnerhtml = /<(?:script|style|link)/i,
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptType = /^$|\/(?:java|ecma)script/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+
+	// We have to close these tags to support XHTML (#13200)
+	wrapMap = {
+		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>" ],
+
+		// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+		// unless wrapped in a div with non-breaking characters in front of it.
+		_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>"  ]
+	},
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement("div") );
+
+wrapMap.optgroup = wrapMap.option;
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
+			undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+// Used in buildFragment, fixes the defaultChecked property
+function fixDefaultChecked( elem ) {
+	if ( rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName("tbody")[0] ||
+			elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[1];
+	} else {
+		elem.removeAttribute("type");
+	}
+	return elem;
+}
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; (elem = elems[i]) != null; i++ ) {
+		jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
+	}
+}
+
+function cloneCopyEvent( src, dest ) {
+
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, e, data;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+jQuery.extend({
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, node, clone, i, srcElements,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( (!support.noCloneEvent || !support.noCloneChecked) &&
+				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; (node = srcElements[i]) != null; ++i ) {
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[i] ) {
+					fixCloneNodeIssues( node, destElements[i] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; (node = srcElements[i]) != null; i++ ) {
+					cloneCopyEvent( node, destElements[i] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	buildFragment: function( elems, context, scripts, selection ) {
+		var j, elem, contains,
+			tmp, tag, tbody, wrap,
+			l = elems.length,
+
+			// Ensure a safe fragment
+			safe = createSafeFragment( context ),
+
+			nodes = [],
+			i = 0;
+
+		for ( ; i < l; i++ ) {
+			elem = elems[ i ];
+
+			if ( elem || elem === 0 ) {
+
+				// Add nodes directly
+				if ( jQuery.type( elem ) === "object" ) {
+					jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+				// Convert non-html into a text node
+				} else if ( !rhtml.test( elem ) ) {
+					nodes.push( context.createTextNode( elem ) );
+
+				// Convert html into DOM nodes
+				} else {
+					tmp = tmp || safe.appendChild( context.createElement("div") );
+
+					// Deserialize a standard representation
+					tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
+					wrap = wrapMap[ tag ] || wrapMap._default;
+
+					tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
+
+					// Descend through wrappers to the right content
+					j = wrap[0];
+					while ( j-- ) {
+						tmp = tmp.lastChild;
+					}
+
+					// Manually add leading whitespace removed by IE
+					if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+						nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
+					}
+
+					// Remove IE's autoinserted <tbody> from table fragments
+					if ( !support.tbody ) {
+
+						// String was a <table>, *may* have spurious <tbody>
+						elem = tag === "table" && !rtbody.test( elem ) ?
+							tmp.firstChild :
+
+							// String was a bare <thead> or <tfoot>
+							wrap[1] === "<table>" && !rtbody.test( elem ) ?
+								tmp :
+								0;
+
+						j = elem && elem.childNodes.length;
+						while ( j-- ) {
+							if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
+								elem.removeChild( tbody );
+							}
+						}
+					}
+
+					jQuery.merge( nodes, tmp.childNodes );
+
+					// Fix #12392 for WebKit and IE > 9
+					tmp.textContent = "";
+
+					// Fix #12392 for oldIE
+					while ( tmp.firstChild ) {
+						tmp.removeChild( tmp.firstChild );
+					}
+
+					// Remember the top-level container for proper cleanup
+					tmp = safe.lastChild;
+				}
+			}
+		}
+
+		// Fix #11356: Clear elements from fragment
+		if ( tmp ) {
+			safe.removeChild( tmp );
+		}
+
+		// Reset defaultChecked for any radios and checkboxes
+		// about to be appended to the DOM in IE 6/7 (#8060)
+		if ( !support.appendChecked ) {
+			jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+		}
+
+		i = 0;
+		while ( (elem = nodes[ i++ ]) ) {
+
+			// #4087 - If origin and destination elements are the same, and this is
+			// that element, do not do anything
+			if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
+				continue;
+			}
+
+			contains = jQuery.contains( elem.ownerDocument, elem );
+
+			// Append to fragment
+			tmp = getAll( safe.appendChild( elem ), "script" );
+
+			// Preserve script evaluation history
+			if ( contains ) {
+				setGlobalEval( tmp );
+			}
+
+			// Capture executables
+			if ( scripts ) {
+				j = 0;
+				while ( (elem = tmp[ j++ ]) ) {
+					if ( rscriptType.test( elem.type || "" ) ) {
+						scripts.push( elem );
+					}
+				}
+			}
+		}
+
+		tmp = null;
+
+		return safe;
+	},
+
+	cleanData: function( elems, /* internal */ acceptData ) {
+		var elem, type, id, data,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			deleteExpando = support.deleteExpando,
+			special = jQuery.event.special;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+			if ( acceptData || jQuery.acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// IE does not allow us to delete expando properties from nodes,
+						// nor does it have a removeAttribute function on Document nodes;
+						// we must handle all of these cases
+						if ( deleteExpando ) {
+							delete elem[ internalKey ];
+
+						} else if ( typeof elem.removeAttribute !== strundefined ) {
+							elem.removeAttribute( internalKey );
+
+						} else {
+							elem[ internalKey ] = null;
+						}
+
+						deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+});
+
+jQuery.fn.extend({
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		});
+	},
+
+	prepend: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		});
+	},
+
+	before: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		});
+	},
+
+	after: function() {
+		return this.domManip( arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		});
+	},
+
+	remove: function( selector, keepData /* Internal Use Only */ ) {
+		var elem,
+			elems = selector ? jQuery.filter( selector, this ) : this,
+			i = 0;
+
+		for ( ; (elem = elems[i]) != null; i++ ) {
+
+			if ( !keepData && elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem ) );
+			}
+
+			if ( elem.parentNode ) {
+				if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
+					setGlobalEval( getAll( elem, "script" ) );
+				}
+				elem.parentNode.removeChild( elem );
+			}
+		}
+
+		return this;
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; (elem = this[i]) != null; i++ ) {
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map(function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		});
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
+
+				value = value.replace( rxhtmlTag, "<$1></$2>" );
+
+				try {
+					for (; i < l; i++ ) {
+						// Remove element nodes and prevent memory leaks
+						elem = this[i] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch(e) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var arg = arguments[ 0 ];
+
+		// Make the changes, replacing each context element with the new content
+		this.domManip( arguments, function( elem ) {
+			arg = this.parentNode;
+
+			jQuery.cleanData( getAll( this ) );
+
+			if ( arg ) {
+				arg.replaceChild( elem, this );
+			}
+		});
+
+		// Force removal if there was no new content (e.g., from empty arguments)
+		return arg && (arg.length || arg.nodeType) ? this : this.remove();
+	},
+
+	detach: function( selector ) {
+		return this.remove( selector, true );
+	},
+
+	domManip: function( args, callback ) {
+
+		// Flatten any nested arrays
+		args = concat.apply( [], args );
+
+		var first, node, hasScripts,
+			scripts, doc, fragment,
+			i = 0,
+			l = this.length,
+			set = this,
+			iNoClone = l - 1,
+			value = args[0],
+			isFunction = jQuery.isFunction( value );
+
+		// We can't cloneNode fragments that contain checked, in WebKit
+		if ( isFunction ||
+				( l > 1 && typeof value === "string" &&
+					!support.checkClone && rchecked.test( value ) ) ) {
+			return this.each(function( index ) {
+				var self = set.eq( index );
+				if ( isFunction ) {
+					args[0] = value.call( this, index, self.html() );
+				}
+				self.domManip( args, callback );
+			});
+		}
+
+		if ( l ) {
+			fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
+			first = fragment.firstChild;
+
+			if ( fragment.childNodes.length === 1 ) {
+				fragment = first;
+			}
+
+			if ( first ) {
+				scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+				hasScripts = scripts.length;
+
+				// Use the original fragment for the last item instead of the first because it can end up
+				// being emptied incorrectly in certain situations (#8070).
+				for ( ; i < l; i++ ) {
+					node = fragment;
+
+					if ( i !== iNoClone ) {
+						node = jQuery.clone( node, true, true );
+
+						// Keep references to cloned scripts for later restoration
+						if ( hasScripts ) {
+							jQuery.merge( scripts, getAll( node, "script" ) );
+						}
+					}
+
+					callback.call( this[i], node, i );
+				}
+
+				if ( hasScripts ) {
+					doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+					// Reenable scripts
+					jQuery.map( scripts, restoreScript );
+
+					// Evaluate executable scripts on first document insertion
+					for ( i = 0; i < hasScripts; i++ ) {
+						node = scripts[ i ];
+						if ( rscriptType.test( node.type || "" ) &&
+							!jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
+
+							if ( node.src ) {
+								// Optional AJAX dependency, but won't run scripts if not present
+								if ( jQuery._evalUrl ) {
+									jQuery._evalUrl( node.src );
+								}
+							} else {
+								jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
+							}
+						}
+					}
+				}
+
+				// Fix #11809: Avoid leaking memory
+				fragment = first = null;
+			}
+		}
+
+		return this;
+	}
+});
+
+jQuery.each({
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone(true);
+			jQuery( insert[i] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+});
+
+
+var iframe,
+	elemdisplay = {};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var style,
+		elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		// getDefaultComputedStyle might be reliably used only on attached element
+		display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
+
+			// Use of this method is a temporary fix (more like optmization) until something better comes along,
+			// since it was removed from specification and supported only in FF
+			style.display : jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+
+
+(function() {
+	var shrinkWrapBlocksVal;
+
+	support.shrinkWrapBlocks = function() {
+		if ( shrinkWrapBlocksVal != null ) {
+			return shrinkWrapBlocksVal;
+		}
+
+		// Will be changed later if needed.
+		shrinkWrapBlocksVal = false;
+
+		// Minified: var b,c,d
+		var div, body, container;
+
+		body = document.getElementsByTagName( "body" )[ 0 ];
+		if ( !body || !body.style ) {
+			// Test fired too early or in an unsupported environment, exit.
+			return;
+		}
+
+		// Setup
+		div = document.createElement( "div" );
+		container = document.createElement( "div" );
+		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE6
+		// Check if elements with layout shrink-wrap their children
+		if ( typeof div.style.zoom !== strundefined ) {
+			// Reset CSS: box-sizing; display; margin; border
+			div.style.cssText =
+				// Support: Firefox<29, Android 2.3
+				// Vendor-prefix box-sizing
+				"-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";
+			div.appendChild( document.createElement( "div" ) ).style.width = "5px";
+			shrinkWrapBlocksVal = div.offsetWidth !== 3;
+		}
+
+		body.removeChild( container );
+
+		return shrinkWrapBlocksVal;
+	};
+
+})();
+var rmargin = (/^margin/);
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+
+
+var getStyles, curCSS,
+	rposition = /^(top|right|bottom|left)$/;
+
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+		return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
+	};
+
+	curCSS = function( elem, name, computed ) {
+		var width, minWidth, maxWidth, ret,
+			style = elem.style;
+
+		computed = computed || getStyles( elem );
+
+		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+
+		if ( computed ) {
+
+			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+				ret = jQuery.style( elem, name );
+			}
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
+			// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		return ret === undefined ?
+			ret :
+			ret + "";
+	};
+} else if ( document.documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, computed ) {
+		var left, rs, rsLeft, ret,
+			style = elem.style;
+
+		computed = computed || getStyles( elem );
+		ret = computed ? computed[ name ] : undefined;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are proportional to the parent element instead
+		// and we can't measure the parent instead because it might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		return ret === undefined ?
+			ret :
+			ret + "" || "auto";
+	};
+}
+
+
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			var condition = conditionFn();
+
+			if ( condition == null ) {
+				// The test was not ready at this point; screw the hook this time
+				// but check again when needed next time.
+				return;
+			}
+
+			if ( condition ) {
+				// Hook not needed (or it's not possible to use it due to missing dependency),
+				// remove it.
+				// Since there are no other hooks for marginRight, remove the whole object.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+
+			return (this.get = hookFn).apply( this, arguments );
+		}
+	};
+}
+
+
+(function() {
+	// Minified: var b,c,d,e,f,g, h,i
+	var div, style, a, pixelPositionVal, boxSizingReliableVal,
+		reliableHiddenOffsetsVal, reliableMarginRightVal;
+
+	// Setup
+	div = document.createElement( "div" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+	a = div.getElementsByTagName( "a" )[ 0 ];
+	style = a && a.style;
+
+	// Finish early in limited (non-browser) environments
+	if ( !style ) {
+		return;
+	}
+
+	style.cssText = "float:left;opacity:.5";
+
+	// Support: IE<9
+	// Make sure that element opacity exists (as opposed to filter)
+	support.opacity = style.opacity === "0.5";
+
+	// Verify style float existence
+	// (IE uses styleFloat instead of cssFloat)
+	support.cssFloat = !!style.cssFloat;
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	// Support: Firefox<29, Android 2.3
+	// Vendor-prefix box-sizing
+	support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
+		style.WebkitBoxSizing === "";
+
+	jQuery.extend(support, {
+		reliableHiddenOffsets: function() {
+			if ( reliableHiddenOffsetsVal == null ) {
+				computeStyleTests();
+			}
+			return reliableHiddenOffsetsVal;
+		},
+
+		boxSizingReliable: function() {
+			if ( boxSizingReliableVal == null ) {
+				computeStyleTests();
+			}
+			return boxSizingReliableVal;
+		},
+
+		pixelPosition: function() {
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return pixelPositionVal;
+		},
+
+		// Support: Android 2.3
+		reliableMarginRight: function() {
+			if ( reliableMarginRightVal == null ) {
+				computeStyleTests();
+			}
+			return reliableMarginRightVal;
+		}
+	});
+
+	function computeStyleTests() {
+		// Minified: var b,c,d,j
+		var div, body, container, contents;
+
+		body = document.getElementsByTagName( "body" )[ 0 ];
+		if ( !body || !body.style ) {
+			// Test fired too early or in an unsupported environment, exit.
+			return;
+		}
+
+		// Setup
+		div = document.createElement( "div" );
+		container = document.createElement( "div" );
+		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+		body.appendChild( container ).appendChild( div );
+
+		div.style.cssText =
+			// Support: Firefox<29, Android 2.3
+			// Vendor-prefix box-sizing
+			"-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";
+
+		// Support: IE<9
+		// Assume reasonable values in the absence of getComputedStyle
+		pixelPositionVal = boxSizingReliableVal = false;
+		reliableMarginRightVal = true;
+
+		// Check for getComputedStyle so that this code is not run in IE<9.
+		if ( window.getComputedStyle ) {
+			pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
+			boxSizingReliableVal =
+				( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
+
+			// Support: Android 2.3
+			// Div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container (#3333)
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			contents = div.appendChild( document.createElement( "div" ) );
+
+			// Reset CSS: box-sizing; display; margin; border; padding
+			contents.style.cssText = div.style.cssText =
+				// Support: Firefox<29, Android 2.3
+				// Vendor-prefix box-sizing
+				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+				"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+			contents.style.marginRight = contents.style.width = "0";
+			div.style.width = "1px";
+
+			reliableMarginRightVal =
+				!parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
+		}
+
+		// Support: IE8
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+		contents = div.getElementsByTagName( "td" );
+		contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
+		reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+		if ( reliableHiddenOffsetsVal ) {
+			contents[ 0 ].style.display = "";
+			contents[ 1 ].style.display = "none";
+			reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+		}
+
+		body.removeChild( container );
+	}
+
+})();
+
+
+// A method for quickly swapping in/out CSS properties to get correct calculations.
+jQuery.swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var
+		ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/,
+
+	// swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
+	// see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+	rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
+
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( style, name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in style ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt(0).toUpperCase() + name.slice(1),
+		origName = name,
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in style ) {
+			return name;
+		}
+	}
+
+	return origName;
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display && display !== "none" || !hidden ) {
+				jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+		// If we already have the right measurement, avoid augmentation
+		4 :
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test(val) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+jQuery.extend({
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		// normalize float css property
+		"float": support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// convert relative number strings (+= or -=) to relative numbers. #7345
+			if ( type === "string" && (ret = rrelNum.exec( value )) ) {
+				value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set. See: #7116
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add 'px' to the (except for certain CSS properties)
+			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
+				value += "px";
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight (for every problematic property) identical functions
+			if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
+
+				// Support: IE
+				// Swallow errors from 'invalid' CSS values (#5509)
+				try {
+					style[ name ] = value;
+				} catch(e) {}
+			}
+
+		} else {
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var num, val, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+});
+
+jQuery.each([ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
+					jQuery.swap( elem, cssShow, function() {
+						return getWidthOrHeight( elem, name, extra );
+					}) :
+					getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+});
+
+if ( !support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+			// IE uses filters for opacity
+			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
+				( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+				computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			// Work around by temporarily setting element display to inline-block
+			return jQuery.swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each({
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split(" ") : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+});
+
+jQuery.fn.extend({
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each(function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		});
+	}
+});
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || "swing";
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			if ( tween.elem[ tween.prop ] != null &&
+				(!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	}
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
+	rrun = /queueHooks$/,
+	animationPrefilters = [ defaultPrefilter ],
+	tweeners = {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value ),
+				target = tween.cur(),
+				parts = rfxnum.exec( value ),
+				unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+				// Starting value computation is required for potential unit mismatches
+				start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
+					rfxnum.exec( jQuery.css( tween.elem, prop ) ),
+				scale = 1,
+				maxIterations = 20;
+
+			if ( start && start[ 3 ] !== unit ) {
+				// Trust units reported by jQuery.css
+				unit = unit || start[ 3 ];
+
+				// Make sure we update the tween properties later on
+				parts = parts || [];
+
+				// Iteratively approximate from a nonzero starting point
+				start = +target || 1;
+
+				do {
+					// If previous iteration zeroed out, double until we get *something*
+					// Use a string for doubling factor so we don't accidentally see scale as unchanged below
+					scale = scale || ".5";
+
+					// Adjust and apply
+					start = start / scale;
+					jQuery.style( tween.elem, prop, start + unit );
+
+				// Update scale, tolerating zero or NaN from tween.cur()
+				// And breaking the loop if scale is unchanged or perfect, or if we've just had enough
+				} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
+			}
+
+			// Update tween properties
+			if ( parts ) {
+				start = tween.start = +start || +target || 0;
+				tween.unit = unit;
+				// If a +=/-= token was provided, we're doing a relative animation
+				tween.end = parts[ 1 ] ?
+					start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
+					+parts[ 2 ];
+			}
+
+			return tween;
+		} ]
+	};
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	setTimeout(function() {
+		fxNow = undefined;
+	});
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( (tween = collection[ index ].call( animation, prop, value )) ) {
+
+			// we're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = jQuery._data( elem, "fxshow" );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always(function() {
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always(function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			});
+		});
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !support.shrinkWrapBlocks() ) {
+			anim.always(function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			});
+		}
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = jQuery._data( elem, "fxshow", {} );
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done(function() {
+				jQuery( elem ).hide();
+			});
+		}
+		anim.done(function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		});
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = animationPrefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		}),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+				// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ]);
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise({
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, { specialEasing: {} }, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		}),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		})
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.split(" ");
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			tweeners[ prop ] = tweeners[ prop ] || [];
+			tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			animationPrefilters.unshift( callback );
+		} else {
+			animationPrefilters.push( callback );
+		}
+	}
+});
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend({
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate({ opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each(function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		});
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each(function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		});
+	}
+});
+
+jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+});
+
+// Generate shortcuts for custom animations
+jQuery.each({
+	slideDown: genFx("show"),
+	slideUp: genFx("hide"),
+	slideToggle: genFx("toggle"),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+});
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = setTimeout( next, time );
+		hooks.stop = function() {
+			clearTimeout( timeout );
+		};
+	});
+};
+
+
+(function() {
+	// Minified: var a,b,c,d,e
+	var input, div, select, a, opt;
+
+	// Setup
+	div = document.createElement( "div" );
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+	a = div.getElementsByTagName("a")[ 0 ];
+
+	// First batch of tests.
+	select = document.createElement("select");
+	opt = select.appendChild( document.createElement("option") );
+	input = div.getElementsByTagName("input")[ 0 ];
+
+	a.style.cssText = "top:1px";
+
+	// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+	support.getSetAttribute = div.className !== "t";
+
+	// Get the style information from getAttribute
+	// (IE uses .cssText instead)
+	support.style = /top/.test( a.getAttribute("style") );
+
+	// Make sure that URLs aren't manipulated
+	// (IE normalizes it by default)
+	support.hrefNormalized = a.getAttribute("href") === "/a";
+
+	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+	support.checkOn = !!input.value;
+
+	// Make sure that a selected-by-default option has a working selected property.
+	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+	support.optSelected = opt.selected;
+
+	// Tests for enctype support on a form (#6743)
+	support.enctype = !!document.createElement("form").enctype;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE8 only
+	// Check if we can trust getAttribute("value")
+	input = document.createElement( "input" );
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+})();
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend({
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[0];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+					// handle most common string cases
+					ret.replace(rreturn, "") :
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each(function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				});
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		});
+	}
+});
+
+jQuery.extend({
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					jQuery.trim( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
+							( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
+
+						// Support: IE6
+						// When new option element is added to select box we need to
+						// force reflow of newly added node in order to workaround delay
+						// of initialization properties
+						try {
+							option.selected = optionSet = true;
+
+						} catch ( _ ) {
+
+							// Will be executed only in IE6
+							option.scrollHeight;
+						}
+
+					} else {
+						option.selected = false;
+					}
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+
+				return options;
+			}
+		}
+	}
+});
+
+// Radios and checkboxes getter/setter
+jQuery.each([ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			// Support: Webkit
+			// "" is returned instead of "on" if a value isn't specified
+			return elem.getAttribute("value") === null ? "on" : elem.value;
+		};
+	}
+});
+
+
+
+
+var nodeHook, boolHook,
+	attrHandle = jQuery.expr.attrHandle,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = support.getSetAttribute,
+	getSetInput = support.input;
+
+jQuery.fn.extend({
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each(function() {
+			jQuery.removeAttr( this, name );
+		});
+	}
+});
+
+jQuery.extend({
+	attr: function( elem, name, value ) {
+		var hooks, ret,
+			nType = elem.nodeType;
+
+		// don't get/set attributes on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === strundefined ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+
+			} else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
+				return ret;
+
+			} else {
+				elem.setAttribute( name, value + "" );
+				return value;
+			}
+
+		} else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
+			return ret;
+
+		} else {
+			ret = jQuery.find.attr( elem, name );
+
+			// Non-existent attributes return null, we normalize to undefined
+			return ret == null ?
+				undefined :
+				ret;
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( (name = attrNames[i++]) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+					// Set corresponding property to false
+					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+						elem[ propName ] = false;
+					// Support: IE<9
+					// Also clear defaultChecked/defaultSelected (if appropriate)
+					} else {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
+					// Setting the type on a radio button after the value resets the value in IE6-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	}
+});
+
+// Hook for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		// Use defaultChecked and defaultSelected for oldIE
+		} else {
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+
+		return name;
+	}
+};
+
+// Retrieve booleans specially
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
+		function( elem, name, isXML ) {
+			var ret, handle;
+			if ( !isXML ) {
+				// Avoid an infinite loop by temporarily removing this function from the getter
+				handle = attrHandle[ name ];
+				attrHandle[ name ] = ret;
+				ret = getter( elem, name, isXML ) != null ?
+					name.toLowerCase() :
+					null;
+				attrHandle[ name ] = handle;
+			}
+			return ret;
+		} :
+		function( elem, name, isXML ) {
+			if ( !isXML ) {
+				return elem[ jQuery.camelCase( "default-" + name ) ] ?
+					name.toLowerCase() :
+					null;
+			}
+		};
+});
+
+// fix oldIE attroperties
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = {
+		set: function( elem, value, name ) {
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					(ret = elem.ownerDocument.createAttribute( name ))
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			if ( name === "value" || value === elem.getAttribute( name ) ) {
+				return value;
+			}
+		}
+	};
+
+	// Some attributes are constructed with empty-string values when not defined
+	attrHandle.id = attrHandle.name = attrHandle.coords =
+		function( elem, name, isXML ) {
+			var ret;
+			if ( !isXML ) {
+				return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
+					ret.value :
+					null;
+			}
+		};
+
+	// Fixing value retrieval on a button requires this module
+	jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			if ( ret && ret.specified ) {
+				return ret.value;
+			}
+		},
+		set: nodeHook.set
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each([ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		};
+	});
+}
+
+if ( !support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case senstitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend({
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each(function() {
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch( e ) {}
+		});
+	}
+});
+
+jQuery.extend({
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	},
+
+	prop: function( elem, name, value ) {
+		var ret, hooks, notxml,
+			nType = elem.nodeType;
+
+		// don't get/set properties on text, comment and attribute nodes
+		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
+
+		if ( notxml ) {
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
+				ret :
+				( elem[ name ] = value );
+
+		} else {
+			return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
+				ret :
+				elem[ name ];
+		}
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
+						0 :
+						-1;
+			}
+		}
+	}
+});
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !support.hrefNormalized ) {
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each([ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	});
+}
+
+// Support: Safari, IE9+
+// mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	};
+}
+
+jQuery.each([
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+});
+
+// IE6/7 call enctype encoding
+if ( !support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+jQuery.fn.extend({
+	addClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			i = 0,
+			len = this.length,
+			proceed = typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).addClass( value.call( this, j, this.className ) );
+			});
+		}
+
+		if ( proceed ) {
+			// The disjunction here is for better compressibility (see removeClass)
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					" "
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, clazz, j, finalValue,
+			i = 0,
+			len = this.length,
+			proceed = arguments.length === 0 || typeof value === "string" && value;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, this.className ) );
+			});
+		}
+		if ( proceed ) {
+			classes = ( value || "" ).match( rnotwhite ) || [];
+
+			for ( ; i < len; i++ ) {
+				elem = this[ i ];
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 && ( elem.className ?
+					( " " + elem.className + " " ).replace( rclass, " " ) :
+					""
+				);
+
+				if ( cur ) {
+					j = 0;
+					while ( (clazz = classes[j++]) ) {
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = value ? jQuery.trim( cur ) : "";
+					if ( elem.className !== finalValue ) {
+						elem.className = finalValue;
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each(function( i ) {
+				jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
+			});
+		}
+
+		return this.each(function() {
+			if ( type === "string" ) {
+				// toggle individual class names
+				var className,
+					i = 0,
+					self = jQuery( this ),
+					classNames = value.match( rnotwhite ) || [];
+
+				while ( (className = classNames[ i++ ]) ) {
+					// check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( type === strundefined || type === "boolean" ) {
+				if ( this.className ) {
+					// store className if set
+					jQuery._data( this, "__className__", this.className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
+			}
+		});
+	},
+
+	hasClass: function( selector ) {
+		var className = " " + selector + " ",
+			i = 0,
+			l = this.length;
+		for ( ; i < l; i++ ) {
+			if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+});
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.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( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+});
+
+jQuery.fn.extend({
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	},
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
+	}
+});
+
+
+var nonce = jQuery.now();
+
+var rquery = (/\?/);
+
+
+
+var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+
+jQuery.parseJSON = function( data ) {
+	// Attempt to parse using the native JSON parser first
+	if ( window.JSON && window.JSON.parse ) {
+		// Support: Android 2.3
+		// Workaround failure to string-cast null input
+		return window.JSON.parse( data + "" );
+	}
+
+	var requireNonComma,
+		depth = null,
+		str = jQuery.trim( data + "" );
+
+	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
+	// after removing valid tokens
+	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
+
+		// Force termination if we see a misplaced comma
+		if ( requireNonComma && comma ) {
+			depth = 0;
+		}
+
+		// Perform no more replacements after returning to outermost depth
+		if ( depth === 0 ) {
+			return token;
+		}
+
+		// Commas must not follow "[", "{", or ","
+		requireNonComma = open || comma;
+
+		// Determine new depth
+		// array/object open ("[" or "{"): depth += true - false (increment)
+		// array/object close ("]" or "}"): depth += false - true (decrement)
+		// other cases ("," or primitive): depth += true - true (numeric cast)
+		depth += !close - !open;
+
+		// Remove this token
+		return "";
+	}) ) ?
+		( Function( "return " + str ) )() :
+		jQuery.error( "Invalid JSON: " + data );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml, tmp;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	try {
+		if ( window.DOMParser ) { // Standard
+			tmp = new DOMParser();
+			xml = tmp.parseFromString( data, "text/xml" );
+		} else { // IE
+			xml = new ActiveXObject( "Microsoft.XMLDOM" );
+			xml.async = "false";
+			xml.loadXML( data );
+		}
+	} catch( e ) {
+		xml = undefined;
+	}
+	if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	// Document location
+	ajaxLocParts,
+	ajaxLocation,
+
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat("*");
+
+// #8138, IE may throw an exception when accessing
+// a field from window.location if document.domain has been set
+try {
+	ajaxLocation = location.href;
+} catch( e ) {
+	// Use the href attribute of an A element
+	// since IE will modify it given document.location
+	ajaxLocation = document.createElement( "a" );
+	ajaxLocation.href = "";
+	ajaxLocation = ajaxLocation.href;
+}
+
+// Segment location into parts
+ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+			// For each dataType in the dataTypeExpression
+			while ( (dataType = dataTypes[i++]) ) {
+				// Prepend if requested
+				if ( dataType.charAt( 0 ) === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					(structure[ dataType ] = structure[ dataType ] || []).unshift( func );
+
+				// Otherwise append
+				} else {
+					(structure[ dataType ] = structure[ dataType ] || []).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		});
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var deep, key,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+	var firstDataType, ct, finalDataType, type,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s[ "throws" ] ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend({
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			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"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var // Cross-domain detection vars
+			parts,
+			// Loop variable
+			i,
+			// URL without anti-cache param
+			cacheURL,
+			// Response headers as string
+			responseHeadersString,
+			// timeout handle
+			timeoutTimer,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			transport,
+			// Response headers
+			responseHeaders,
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+			// Callbacks context
+			callbackContext = s.context || s,
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
+				jQuery( callbackContext ) :
+				jQuery.event,
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks("once memory"),
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+			// The jqXHR state
+			state = 0,
+			// Default abort message
+			strAbort = "canceled",
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( (match = rheaders.exec( responseHeadersString )) ) {
+								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		fireGlobals = s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger("ajaxStart");
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
+				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = setTimeout(function() {
+					jqXHR.abort("timeout");
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader("Last-Modified");
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader("etag");
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger("ajaxStop");
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+});
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		return jQuery.ajax({
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		});
+	};
+});
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+});
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax({
+		url: url,
+		type: "GET",
+		dataType: "script",
+		async: false,
+		global: false,
+		"throws": true
+	});
+};
+
+
+jQuery.fn.extend({
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapAll( html.call(this, i) );
+			});
+		}
+
+		if ( this[0] ) {
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
+
+			if ( this[0].parentNode ) {
+				wrap.insertBefore( this[0] );
+			}
+
+			wrap.map(function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			}).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each(function(i) {
+				jQuery(this).wrapInner( html.call(this, i) );
+			});
+		}
+
+		return this.each(function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		});
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each(function(i) {
+			jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
+		});
+	},
+
+	unwrap: function() {
+		return this.parent().each(function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		}).end();
+	}
+});
+
+
+jQuery.expr.filters.hidden = function( elem ) {
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
+		(!support.reliableHiddenOffsets() &&
+			((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
+};
+
+jQuery.expr.filters.visible = function( elem ) {
+	return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
+			}
+		});
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		});
+
+	} else {
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend({
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map(function() {
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		})
+		.filter(function() {
+			var type = this.type;
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		})
+		.map(function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					}) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		}).get();
+	}
+});
+
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
+	// Support: IE6+
+	function() {
+
+		// XHR cannot access local files, always use ActiveX for that case
+		return !this.isLocal &&
+
+			// Support: IE7-8
+			// oldIE XHR does not support non-RFC2616 methods (#13240)
+			// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
+			// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
+			// Although this check for six methods instead of eight
+			// since IE also does not support "trace" and "connect"
+			/^(get|post|head|put|delete|options)$/i.test( this.type ) &&
+
+			createStandardXHR() || createActiveXHR();
+	} :
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+var xhrId = 0,
+	xhrCallbacks = {},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE<10
+// Open requests must be manually aborted on unload (#5280)
+if ( window.ActiveXObject ) {
+	jQuery( window ).on( "unload", function() {
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	});
+}
+
+// Determine support properties
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport(function( options ) {
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !options.crossDomain || support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+					var i,
+						xhr = options.xhr(),
+						id = ++xhrId;
+
+					// Open the socket
+					xhr.open( options.type, options.url, options.async, options.username, options.password );
+
+					// Apply custom fields if provided
+					if ( options.xhrFields ) {
+						for ( i in options.xhrFields ) {
+							xhr[ i ] = options.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( options.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( options.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !options.crossDomain && !headers["X-Requested-With"] ) {
+						headers["X-Requested-With"] = "XMLHttpRequest";
+					}
+
+					// Set headers
+					for ( i in headers ) {
+						// Support: IE<9
+						// IE's ActiveXObject throws a 'Type Mismatch' exception when setting
+						// request header to a null-value.
+						//
+						// To keep consistent with other XHR implementations, cast the value
+						// to string and ignore `undefined`.
+						if ( headers[ i ] !== undefined ) {
+							xhr.setRequestHeader( i, headers[ i ] + "" );
+						}
+					}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( options.hasContent && options.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+						var status, statusText, responses;
+
+						// Was never called and is aborted or complete
+						if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+							// Clean up
+							delete xhrCallbacks[ id ];
+							callback = undefined;
+							xhr.onreadystatechange = jQuery.noop;
+
+							// Abort manually if needed
+							if ( isAbort ) {
+								if ( xhr.readyState !== 4 ) {
+									xhr.abort();
+								}
+							} else {
+								responses = {};
+								status = xhr.status;
+
+								// Support: IE<10
+								// Accessing binary-data responseText throws an exception
+								// (#11426)
+								if ( typeof xhr.responseText === "string" ) {
+									responses.text = xhr.responseText;
+								}
+
+								// Firefox throws an exception when accessing
+								// statusText for faulty cross-domain requests
+								try {
+									statusText = xhr.statusText;
+								} catch( e ) {
+									// We normalize with Webkit giving an empty statusText
+									statusText = "";
+								}
+
+								// Filter status for non standard behaviors
+
+								// If the request is local and we have data: assume a success
+								// (success with no data won't get notified, that's the best we
+								// can do given current implementations)
+								if ( !status && options.isLocal && !options.crossDomain ) {
+									status = responses.text ? 200 : 404;
+								// IE - #1450: sometimes returns 1223 when it should be 204
+								} else if ( status === 1223 ) {
+									status = 204;
+								}
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, xhr.getAllResponseHeaders() );
+						}
+					};
+
+					if ( !options.async ) {
+						// if we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						setTimeout( callback );
+					} else {
+						// Add to the list of active xhr callbacks
+						xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	});
+}
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch( e ) {}
+}
+
+
+
+
+// Install script dataType
+jQuery.ajaxSetup({
+	accepts: {
+		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /(?:java|ecma)script/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+});
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+});
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function(s) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery("head")[0] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement("script");
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+});
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup({
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+});
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters["script json"] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always(function() {
+			// Restore preexisting value
+			window[ callbackName ] = overwritten;
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		});
+
+		// Delegate to script
+		return "script";
+	}
+});
+
+
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context, defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+	context = context || document;
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[1] ) ];
+	}
+
+	parsed = jQuery.buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, response, type,
+		self = this,
+		off = url.indexOf(" ");
+
+	if ( off >= 0 ) {
+		selector = jQuery.trim( url.slice( off, url.length ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax({
+			url: url,
+
+			// if "type" variable is undefined, then "GET" method will be used
+			type: type,
+			dataType: "html",
+			data: params
+		}).done(function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		}).complete( callback && function( jqXHR, status ) {
+			self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
+		});
+	}
+
+	return this;
+};
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep(jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	}).length;
+};
+
+
+
+
+
+var docElem = window.document.documentElement;
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
+
+		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+			options = options.call( elem, i, curOffset );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend({
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each(function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				});
+		}
+
+		var docElem, win,
+			box = { top: 0, left: 0 },
+			elem = this[ 0 ],
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		// If we don't have gBCR, just use 0,0 rather than error
+		// BlackBerry 5, iOS 3 (original iPhone)
+		if ( typeof elem.getBoundingClientRect !== strundefined ) {
+			box = elem.getBoundingClientRect();
+		}
+		win = getWindow( doc );
+		return {
+			top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+			left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
+		};
+	},
+
+	offsetParent: function() {
+		return this.map(function() {
+			var offsetParent = this.offsetParent || docElem;
+
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || docElem;
+		});
+	}
+});
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? (prop in win) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+});
+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// getComputedStyle returns percent when specified for top/left/bottom/right
+// rather than make the css module depend on the offset module, we just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+				// if curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+});
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	});
+});
+
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+	return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	});
+}
+
+
+
+
+var
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( typeof noGlobal === strundefined ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+
+
+return jQuery;
+
+}));
diff --git a/docs/codebase/_build/html/_static/jquery.js b/docs/codebase/_build/html/_static/jquery.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab28a24729b320bffd3d2f60302af949db39ab85
--- /dev/null
+++ b/docs/codebase/_build/html/_static/jquery.js
@@ -0,0 +1,4 @@
+/*! jQuery v1.11.1 | (c) 2005, 2014 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.1",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)>=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=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"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=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)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(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||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(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 I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(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 ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(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 typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),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))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),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===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(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?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.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 fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.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},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.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=fb.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=fb.selectors={cacheLength:50,createPseudo:hb,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(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===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]||fb.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]&&fb.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(cb,db).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("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.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+" ").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()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(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),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).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:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(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]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.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?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(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 sb(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 tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(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 vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(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?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(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 vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(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]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.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(cb,db),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(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(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 ab(){return!0}function bb(){return!1}function cb(){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!==cb()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===cb()&&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?ab:bb):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:bb,isPropagationStopped:bb,isImmediatePropagationStopped:bb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=ab,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=ab,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=ab,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=bb;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=bb),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 db(a){var b=eb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var eb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",fb=/ jQuery\d+="(?:null|\d+)"/g,gb=new RegExp("<(?:"+eb+")[\\s/>]","i"),hb=/^\s+/,ib=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,jb=/<([\w:]+)/,kb=/<tbody/i,lb=/<|&#?\w+;/,mb=/<(?:script|style|link)/i,nb=/checked\s*(?:[^=]|=\s*.checked.)/i,ob=/^$|\/(?:java|ecma)script/i,pb=/^true\/(.*)/,qb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,rb={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>"]},sb=db(y),tb=sb.appendChild(y.createElement("div"));rb.optgroup=rb.option,rb.tbody=rb.tfoot=rb.colgroup=rb.caption=rb.thead,rb.th=rb.td;function ub(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,ub(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function vb(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wb(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 xb(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function yb(a){var b=pb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function zb(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Ab(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 Bb(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?(xb(b).text=a.text,yb(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)||!gb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(tb.innerHTML=a.outerHTML,tb.removeChild(f=tb.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ub(f),h=ub(a),g=0;null!=(e=h[g]);++g)d[g]&&Bb(e,d[g]);if(b)if(c)for(h=h||ub(a),d=d||ub(f),g=0;null!=(e=h[g]);g++)Ab(e,d[g]);else Ab(a,f);return d=ub(f,"script"),d.length>0&&zb(d,!i&&ub(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=db(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(lb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(jb.exec(f)||["",""])[1].toLowerCase(),l=rb[i]||rb._default,h.innerHTML=l[1]+f.replace(ib,"<$1></$2>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&hb.test(f)&&p.push(b.createTextNode(hb.exec(f)[0])),!k.tbody){f="table"!==i||kb.test(f)?"<table>"!==l[1]||kb.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(ub(p,"input"),vb),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ub(o.appendChild(f),"script"),g&&zb(h),c)){e=0;while(f=h[e++])ob.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=wb(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=wb(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(ub(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&zb(ub(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(ub(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(fb,""):void 0;if(!("string"!=typeof a||mb.test(a)||!k.htmlSerialize&&gb.test(a)||!k.leadingWhitespace&&hb.test(a)||rb[(jb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ib,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ub(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(ub(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&&nb.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(ub(i,"script"),xb),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ub(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,yb),j=0;f>j;j++)d=g[j],ob.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(qb,"")));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 Cb,Db={};function Eb(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 Fb(a){var b=y,c=Db[a];return c||(c=Eb(a,b),"none"!==c&&c||(Cb=(Cb||m("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Cb[0].contentWindow||Cb[0].contentDocument).document,b.write(),b.close(),c=Eb(a,b),Cb.detach()),Db[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 Gb=/^margin/,Hb=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ib,Jb,Kb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ib=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Hb.test(g)&&Gb.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&&(Ib=function(a){return a.currentStyle},Jb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ib(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Hb.test(g)&&!Kb.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 Lb(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.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 Mb=/alpha\([^)]*\)/i,Nb=/opacity\s*=\s*([^)]*)/,Ob=/^(none|table(?!-c[ea]).+)/,Pb=new RegExp("^("+S+")(.*)$","i"),Qb=new RegExp("^([+-])=("+S+")","i"),Rb={position:"absolute",visibility:"hidden",display:"block"},Sb={letterSpacing:"0",fontWeight:"400"},Tb=["Webkit","O","Moz","ms"];function Ub(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Tb.length;while(e--)if(b=Tb[e]+c,b in a)return b;return d}function Vb(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",Fb(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 Wb(a,b,c){var d=Pb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xb(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 Yb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ib(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Jb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Hb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xb(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Jb(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]=Ub(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=Qb.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]=Ub(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Jb(a,b,d)),"normal"===f&&b in Sb&&(f=Sb[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?Ob.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Rb,function(){return Yb(a,b,d)}):Yb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ib(a);return Wb(a,c,d?Xb(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 Nb.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(Mb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Mb.test(f)?f.replace(Mb,e):f+" "+e)}}),m.cssHooks.marginRight=Lb(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Jb,[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}},Gb.test(a)||(m.cssHooks[a+b].set=Wb)}),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=Ib(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 Vb(this,!0)},hide:function(){return Vb(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 Zb(a,b,c,d,e){return new Zb.prototype.init(a,b,c,d,e)}m.Tween=Zb,Zb.prototype={constructor:Zb,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=Zb.propHooks[this.prop];return a&&a.get?a.get(this):Zb.propHooks._default.get(this)},run:function(a){var b,c=Zb.propHooks[this.prop];return this.pos=b=this.options.duration?m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):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):Zb.propHooks._default.set(this),this}},Zb.prototype.init.prototype=Zb.prototype,Zb.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}}},Zb.propHooks.scrollTop=Zb.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=Zb.prototype.init,m.fx.step={};var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cc=/queueHooks$/,dc=[ic],ec={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bc.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 fc(){return setTimeout(function(){$b=void 0}),$b=m.now()}function gc(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 hc(a,b,c){for(var d,e=(ec[b]||[]).concat(ec["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ic(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")||Fb(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fb(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],ac.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?Fb(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=hc(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 jc(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 kc(a,b,c){var d,e,f=0,g=dc.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||fc(),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:$b||fc(),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(jc(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return m.map(k,hc,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(kc,{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],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.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=kc(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&&cc.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(gc(b,!0),a,d,e)}}),m.each({slideDown:gc("show"),slideUp:gc("hide"),slideToggle:gc("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($b=m.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||m.fx.stop(),$b=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(){_b||(_b=setInterval(m.fx.tick,m.fx.interval))},m.fx.stop=function(){clearInterval(_b),_b=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 lc=/\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(lc,""):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 mc,nc,oc=m.expr.attrHandle,pc=/^(?:checked|selected)$/i,qc=k.getSetAttribute,rc=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)?nc:mc)),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)?rc&&qc||!pc.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qc?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}}}}}),nc={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rc&&qc||!pc.test(c)?a.setAttribute(!qc&&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=oc[b]||m.find.attr;oc[b]=rc&&qc||!pc.test(b)?function(a,b,d){var e,f;return d||(f=oc[b],oc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,oc[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rc&&qc||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mc&&mc.set(a,b,c)}}),qc||(mc={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}},oc.id=oc.name=oc.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:mc.set},m.attrHooks.contenteditable={set:function(a,b,c){mc.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 sc=/^(?:input|select|textarea|button|object)$/i,tc=/^(?: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):sc.test(a.nodeName)||tc.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 uc=/[\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(uc," "):" ")){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(uc," "):"")){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(uc," ").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 vc=m.now(),wc=/\?/,xc=/(,)|(\[|{)|(}|])|"(?:[^"\\\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(xc,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 yc,zc,Ac=/#.*$/,Bc=/([?&])_=[^&]*/,Cc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Dc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ec=/^(?:GET|HEAD)$/,Fc=/^\/\//,Gc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hc={},Ic={},Jc="*/".concat("*");try{zc=location.href}catch(Kc){zc=y.createElement("a"),zc.href="",zc=zc.href}yc=Gc.exec(zc.toLowerCase())||[];function Lc(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 Mc(a,b,c,d){var e={},f=a===Ic;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 Nc(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 Oc(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 Pc(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:zc,type:"GET",isLocal:Dc.test(yc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jc,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?Nc(Nc(a,m.ajaxSettings),b):Nc(m.ajaxSettings,a)},ajaxPrefilter:Lc(Hc),ajaxTransport:Lc(Ic),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=Cc.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||zc)+"").replace(Ac,"").replace(Fc,yc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yc[1]&&c[2]===yc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yc[3]||("http:"===yc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mc(Hc,k,b,v),2===t)return v;h=k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Ec.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bc.test(e)?e.replace(Bc,"$1_="+vc++):e+(wc.test(e)?"&":"?")+"_="+vc++)),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]?", "+Jc+"; 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=Mc(Ic,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=Oc(k,v,c)),u=Pc(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.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){m.fn[b]=function(a){return this.on(b,a)}}),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 Qc=/%20/g,Rc=/\[\]$/,Sc=/\r?\n/g,Tc=/^(?:submit|button|image|reset|file)$/i,Uc=/^(?:input|select|textarea|keygen)/i;function Vc(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rc.test(a)?d(a,e):Vc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vc(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)Vc(c,a[c],b,e);return d.join("&").replace(Qc,"+")},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")&&Uc.test(this.nodeName)&&!Tc.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(Sc,"\r\n")}}):{name:b.name,value:c.replace(Sc,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zc()||$c()}:Zc;var Wc=0,Xc={},Yc=m.ajaxSettings.xhr();a.ActiveXObject&&m(a).on("unload",function(){for(var a in Xc)Xc[a](void 0,!0)}),k.cors=!!Yc&&"withCredentials"in Yc,Yc=k.ajax=!!Yc,Yc&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wc;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 Xc[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=Xc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zc(){try{return new a.XMLHttpRequest}catch(b){}}function $c(){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 _c=[],ad=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_c.pop()||m.expando+"_"+vc++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ad.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ad.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(ad,"$1"+e):b.jsonp!==!1&&(b.url+=(wc.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,_c.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 bd=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bd)return bd.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.expr.filters.animated=function(a){return m.grep(m.timers,function(b){return a===b.elem}).length};var cd=a.document.documentElement;function dd(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=dd(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||cd;while(a&&!m.nodeName(a,"html")&&"static"===m.css(a,"position"))a=a.offsetParent;return a||cd})}}),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=dd(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]=Lb(k.pixelPosition,function(a,c){return c?(c=Jb(a,b),Hb.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 ed=a.jQuery,fd=a.$;return m.noConflict=function(b){return a.$===m&&(a.$=fd),b&&a.jQuery===m&&(a.jQuery=ed),m},typeof b===K&&(a.jQuery=a.$=m),m});
diff --git a/docs/codebase/_build/html/_static/js/modernizr.min.js b/docs/codebase/_build/html/_static/js/modernizr.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..f65d47974786ee51c258f680bd9be621629244f5
--- /dev/null
+++ b/docs/codebase/_build/html/_static/js/modernizr.min.js
@@ -0,0 +1,4 @@
+/* Modernizr 2.6.2 (Custom Build) | MIT & BSD
+ * Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
+ */
+;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=F(e[d],"function"),F(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=w.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function p(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return r.shivMethods?n(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+l().join().replace(/\w+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(r,b.frag)}function q(a){a||(a=b);var c=m(a);return r.shivCSS&&!f&&!c.hasCSS&&(c.hasCSS=!!k(a,"article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}")),j||p(a,c),a}var c=a.html5||{},d=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,e=/^(?: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,f,g="_html5shiv",h=0,i={},j;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
diff --git a/docs/codebase/_build/html/_static/js/theme.js b/docs/codebase/_build/html/_static/js/theme.js
new file mode 100644
index 0000000000000000000000000000000000000000..48a9f06b5b893afd1afca05d880273eb6cbaf941
--- /dev/null
+++ b/docs/codebase/_build/html/_static/js/theme.js
@@ -0,0 +1,153 @@
+require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({"sphinx-rtd-theme":[function(require,module,exports){
+var jQuery = (typeof(window) != 'undefined') ? window.jQuery : require('jquery');
+
+// Sphinx theme nav state
+function ThemeNav () {
+
+    var nav = {
+        navBar: null,
+        win: null,
+        winScroll: false,
+        winResize: false,
+        linkScroll: false,
+        winPosition: 0,
+        winHeight: null,
+        docHeight: null,
+        isRunning: null
+    };
+
+    nav.enable = function () {
+        var self = this;
+
+        jQuery(function ($) {
+            self.init($);
+
+            self.reset();
+            self.win.on('hashchange', self.reset);
+
+            // Set scroll monitor
+            self.win.on('scroll', function () {
+                if (!self.linkScroll) {
+                    self.winScroll = true;
+                }
+            });
+            setInterval(function () { if (self.winScroll) self.onScroll(); }, 25);
+
+            // Set resize monitor
+            self.win.on('resize', function () {
+                self.winResize = true;
+            });
+            setInterval(function () { if (self.winResize) self.onResize(); }, 25);
+            self.onResize();
+        });
+    };
+
+    nav.init = function ($) {
+        var doc = $(document),
+            self = this;
+
+        this.navBar = $('div.wy-side-scroll:first');
+        this.win = $(window);
+
+        // Set up javascript UX bits
+        $(document)
+            // Shift nav in mobile when clicking the menu.
+            .on('click', "[data-toggle='wy-nav-top']", function() {
+                $("[data-toggle='wy-nav-shift']").toggleClass("shift");
+                $("[data-toggle='rst-versions']").toggleClass("shift");
+            })
+
+            // Nav menu link click operations
+            .on('click', ".wy-menu-vertical .current ul li a", function() {
+                var target = $(this);
+                // Close menu when you click a link.
+                $("[data-toggle='wy-nav-shift']").removeClass("shift");
+                $("[data-toggle='rst-versions']").toggleClass("shift");
+                // Handle dynamic display of l3 and l4 nav lists
+                self.toggleCurrent(target);
+                self.hashChange();
+            })
+            .on('click', "[data-toggle='rst-current-version']", function() {
+                $("[data-toggle='rst-versions']").toggleClass("shift-up");
+            })
+
+        // Make tables responsive
+        $("table.docutils:not(.field-list)")
+            .wrap("<div class='wy-table-responsive'></div>");
+
+        // Add expand links to all parents of nested ul
+        $('.wy-menu-vertical ul').not('.simple').siblings('a').each(function () {
+            var link = $(this);
+                expand = $('<span class="toctree-expand"></span>');
+            expand.on('click', function (ev) {
+                self.toggleCurrent(link);
+                ev.stopPropagation();
+                return false;
+            });
+            link.prepend(expand);
+        });
+    };
+
+    nav.reset = function () {
+        // Get anchor from URL and open up nested nav
+        var anchor = encodeURI(window.location.hash);
+        if (anchor) {
+            try {
+                var link = $('.wy-menu-vertical')
+                    .find('[href="' + anchor + '"]');
+                $('.wy-menu-vertical li.toctree-l1 li.current')
+                    .removeClass('current');
+                link.closest('li.toctree-l2').addClass('current');
+                link.closest('li.toctree-l3').addClass('current');
+                link.closest('li.toctree-l4').addClass('current');
+            }
+            catch (err) {
+                console.log("Error expanding nav for anchor", err);
+            }
+        }
+    };
+
+    nav.onScroll = function () {
+        this.winScroll = false;
+        var newWinPosition = this.win.scrollTop(),
+            winBottom = newWinPosition + this.winHeight,
+            navPosition = this.navBar.scrollTop(),
+            newNavPosition = navPosition + (newWinPosition - this.winPosition);
+        if (newWinPosition < 0 || winBottom > this.docHeight) {
+            return;
+        }
+        this.navBar.scrollTop(newNavPosition);
+        this.winPosition = newWinPosition;
+    };
+
+    nav.onResize = function () {
+        this.winResize = false;
+        this.winHeight = this.win.height();
+        this.docHeight = $(document).height();
+    };
+
+    nav.hashChange = function () {
+        this.linkScroll = true;
+        this.win.one('hashchange', function () {
+            this.linkScroll = false;
+        });
+    };
+
+    nav.toggleCurrent = function (elem) {
+        var parent_li = elem.closest('li');
+        parent_li.siblings('li.current').removeClass('current');
+        parent_li.siblings().find('li.current').removeClass('current');
+        parent_li.find('> ul li.current').removeClass('current');
+        parent_li.toggleClass('current');
+    }
+
+    return nav;
+};
+
+module.exports.ThemeNav = ThemeNav();
+
+if (typeof(window) != 'undefined') {
+    window.SphinxRtdTheme = { StickyNav: module.exports.ThemeNav };
+}
+
+},{"jquery":"jquery"}]},{},["sphinx-rtd-theme"]);
diff --git a/docs/codebase/_build/html/_static/minus.png b/docs/codebase/_build/html/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..0f22b16b038f9578a40314ff2b5acb88402a1496
Binary files /dev/null and b/docs/codebase/_build/html/_static/minus.png differ
diff --git a/docs/codebase/_build/html/_static/plus.png b/docs/codebase/_build/html/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..0cfe084cfc8d10d7151a0f00faee3667afe0b24b
Binary files /dev/null and b/docs/codebase/_build/html/_static/plus.png differ
diff --git a/docs/codebase/_build/html/_static/pygments.css b/docs/codebase/_build/html/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..20c4814dcf0d3f437ee9a46f5957e3165aa5fb17
--- /dev/null
+++ b/docs/codebase/_build/html/_static/pygments.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #eeffcc; }
+.highlight .c { color: #408090; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #333333 } /* Generic.Output */
+.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #007020 } /* Keyword.Pseudo */
+.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #902000 } /* Keyword.Type */
+.highlight .m { color: #208050 } /* Literal.Number */
+.highlight .s { color: #4070a0 } /* Literal.String */
+.highlight .na { color: #4070a0 } /* Name.Attribute */
+.highlight .nb { color: #007020 } /* Name.Builtin */
+.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.highlight .no { color: #60add5 } /* Name.Constant */
+.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #007020 } /* Name.Exception */
+.highlight .nf { color: #06287e } /* Name.Function */
+.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #bb60d5 } /* Name.Variable */
+.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #208050 } /* Literal.Number.Bin */
+.highlight .mf { color: #208050 } /* Literal.Number.Float */
+.highlight .mh { color: #208050 } /* Literal.Number.Hex */
+.highlight .mi { color: #208050 } /* Literal.Number.Integer */
+.highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
+.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
+.highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
+.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
+.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { color: #c65d09 } /* Literal.String.Other */
+.highlight .sr { color: #235388 } /* Literal.String.Regex */
+.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
+.highlight .ss { color: #517918 } /* Literal.String.Symbol */
+.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287e } /* Name.Function.Magic */
+.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
+.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
+.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
+.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_static/searchtools.js b/docs/codebase/_build/html/_static/searchtools.js
new file mode 100644
index 0000000000000000000000000000000000000000..ba82ad4877ca5803883434a08f1aea6afb43f3b6
--- /dev/null
+++ b/docs/codebase/_build/html/_static/searchtools.js
@@ -0,0 +1,751 @@
+/*
+ * searchtools.js_t
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+
+/* Non-minified version JS is _stemmer.js if file is provided */ 
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+
+/**
+ * Simple result scoring code.
+ */
+var Scorer = {
+  // Implement the following function to further tweak the score for each result
+  // The function takes a result array [filename, title, anchor, descr, score]
+  // and returns the new score.
+  /*
+  score: function(result) {
+    return result[4];
+  },
+  */
+
+  // query matches the full name of an object
+  objNameMatch: 11,
+  // or matches in the last dotted part of the object name
+  objPartialMatch: 6,
+  // Additive scores depending on the priority of the object
+  objPrio: {0:  15,   // used to be importantResults
+            1:  5,   // used to be objectResults
+            2: -5},  // used to be unimportantResults
+  //  Used when the priority is not in the mapping.
+  objPrioDefault: 0,
+
+  // query found in title
+  title: 15,
+  // query found in terms
+  term: 5
+};
+
+
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
+
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  loadIndex : function(url) {
+    $.ajax({type: "GET", url: url, data: null,
+            dataType: "script", cache: true,
+            complete: function(jqxhr, textstatus) {
+              if (textstatus != "success") {
+                document.getElementById("searchindexloader").src = url;
+              }
+            }});
+  },
+
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      var i;
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    }
+    pulse();
+  },
+
+  /**
+   * perform a search for something (or wait until index is loaded)
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p style="display: none"></p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query : function(query) {
+    var i;
+    var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
+
+    // stem the searchterms and add them to the correct list
+    var stemmer = new Stemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = splitQuery(query);
+    var objectterms = [];
+    for (i = 0; i < tmp.length; i++) {
+      if (tmp[i] !== "") {
+          objectterms.push(tmp[i].toLowerCase());
+      }
+
+      if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i].match(/^\d+$/) ||
+          tmp[i] === "") {
+        // skip this "word"
+        continue;
+      }
+      // stem the word
+      var word = stemmer.stemWord(tmp[i].toLowerCase());
+      var toAppend;
+      // select the correct list
+      if (word[0] == '-') {
+        toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$u.contains(toAppend, word))
+        toAppend.push(word);
+    }
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    // console.debug('SEARCH: searching for:');
+    // console.info('required: ', searchterms);
+    // console.info('excluded: ', excluded);
+
+    // prepare search
+    var terms = this._index.terms;
+    var titleterms = this._index.titleterms;
+
+    // array of [filename, title, anchor, descr, score]
+    var results = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    for (i = 0; i < objectterms.length; i++) {
+      var others = [].concat(objectterms.slice(0, i),
+                             objectterms.slice(i+1, objectterms.length));
+      results = results.concat(this.performObjectSearch(objectterms[i], others));
+    }
+
+    // lookup as search terms in fulltext
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) {
+      for (i = 0; i < results.length; i++)
+        results[i][4] = Scorer.score(results[i]);
+    }
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort(function(a, b) {
+      var left = a[4];
+      var right = b[4];
+      if (left > right) {
+        return 1;
+      } else if (left < right) {
+        return -1;
+      } else {
+        // same score: sort alphabetically
+        left = a[1].toLowerCase();
+        right = b[1].toLowerCase();
+        return (left > right) ? -1 : ((left < right) ? 1 : 0);
+      }
+    });
+
+    // for debugging
+    //Search.lastresults = results.slice();  // a copy
+    //console.info('search results:', Search.lastresults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li style="display:none"></li>');
+        if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') {
+          // dirhtml builder
+          var dirname = item[0] + '/';
+          if (dirname.match(/\/index\/$/)) {
+            dirname = dirname.substring(0, dirname.length-6);
+          } else if (dirname == 'index/') {
+            dirname = '';
+          }
+          listItem.append($('<a/>').attr('href',
+            DOCUMENTATION_OPTIONS.URL_ROOT + dirname +
+            highlightstring + item[2]).html(item[1]));
+        } else {
+          // normal html builders
+          listItem.append($('<a/>').attr('href',
+            item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
+            highlightstring + item[2]).html(item[1]));
+        }
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
+          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
+                  dataType: "text",
+                  complete: function(jqxhr, textstatus) {
+                    var data = jqxhr.responseText;
+                    if (data !== '' && data !== undefined) {
+                      listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
+                    }
+                    Search.output.append(listItem);
+                    listItem.slideDown(5, function() {
+                      displayNextItem();
+                    });
+                  }});
+        } else {
+          // no source available, just display title
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  },
+
+  /**
+   * search for object names
+   */
+  performObjectSearch : function(object, otherterms) {
+    var filenames = this._index.filenames;
+    var objects = this._index.objects;
+    var objnames = this._index.objnames;
+    var titles = this._index.titles;
+
+    var i;
+    var results = [];
+
+    for (var prefix in objects) {
+      for (var name in objects[prefix]) {
+        var fullname = (prefix ? prefix + '.' : '') + name;
+        if (fullname.toLowerCase().indexOf(object) > -1) {
+          var score = 0;
+          var parts = fullname.split('.');
+          // check for different match types: exact matches of full name or
+          // "last name" (i.e. last dotted part)
+          if (fullname == object || parts[parts.length - 1] == object) {
+            score += Scorer.objNameMatch;
+          // matches in last name
+          } else if (parts[parts.length - 1].indexOf(object) > -1) {
+            score += Scorer.objPartialMatch;
+          }
+          var match = objects[prefix][name];
+          var objname = objnames[match[1]][2];
+          var title = titles[match[0]];
+          // If more than one term searched for, we require other words to be
+          // found in the name/title/description
+          if (otherterms.length > 0) {
+            var haystack = (prefix + ' ' + name + ' ' +
+                            objname + ' ' + title).toLowerCase();
+            var allfound = true;
+            for (i = 0; i < otherterms.length; i++) {
+              if (haystack.indexOf(otherterms[i]) == -1) {
+                allfound = false;
+                break;
+              }
+            }
+            if (!allfound) {
+              continue;
+            }
+          }
+          var descr = objname + _(', in ') + title;
+
+          var anchor = match[3];
+          if (anchor === '')
+            anchor = fullname;
+          else if (anchor == '-')
+            anchor = objnames[match[1]][1] + '-' + fullname;
+          // add custom score for some objects according to scorer
+          if (Scorer.objPrio.hasOwnProperty(match[2])) {
+            score += Scorer.objPrio[match[2]];
+          } else {
+            score += Scorer.objPrioDefault;
+          }
+          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
+        }
+      }
+    }
+
+    return results;
+  },
+
+  /**
+   * search for full-text terms in the index
+   */
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+
+    var i, j, file;
+    var fileMap = {};
+    var scoreMap = {};
+    var results = [];
+
+    // perform the search on the required terms
+    for (i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+
+      // no match but word was a required one
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
+        break;
+      }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {}
+          scoreMap[file][word] = o.score;
+        }
+      });
+
+      // create the mapping
+      for (j = 0; j < files.length; j++) {
+        file = files[j];
+        if (file in fileMap)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      if (fileMap[file].length != searchterms.length)
+          continue;
+
+      // ensure that none of the excluded terms is in the search result
+      for (i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it to the result list
+      if (valid) {
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([filenames[file], titles[file], '', null, score]);
+      }
+    }
+    return results;
+  },
+
+  /**
+   * helper function to return a node containing the
+   * search summary for a given text. keywords is a list
+   * of stemmed words, hlwords is the list of normal, unstemmed
+   * words. the first one is used to find the occurrence, the
+   * latter for highlighting it.
+   */
+  makeSearchSummary : function(text, keywords, hlwords) {
+    var textLower = text.toLowerCase();
+    var start = 0;
+    $.each(keywords, function() {
+      var i = textLower.indexOf(this.toLowerCase());
+      if (i > -1)
+        start = i;
+    });
+    start = Math.max(start - 120, 0);
+    var excerpt = ((start > 0) ? '...' : '') +
+      $.trim(text.substr(start, 240)) +
+      ((start + 240 - text.length) ? '...' : '');
+    var rv = $('<div class="context"></div>').text(excerpt);
+    $.each(hlwords, function() {
+      rv = rv.highlightText(this, 'highlighted');
+    });
+    return rv;
+  }
+};
+
+$(document).ready(function() {
+  Search.init();
+});
\ No newline at end of file
diff --git a/docs/codebase/_build/html/_static/underscore-1.3.1.js b/docs/codebase/_build/html/_static/underscore-1.3.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..208d4cd890c3183d946092ebe982738ade565061
--- /dev/null
+++ b/docs/codebase/_build/html/_static/underscore-1.3.1.js
@@ -0,0 +1,999 @@
+//     Underscore.js 1.3.1
+//     (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+//     Underscore is freely distributable under the MIT license.
+//     Portions of Underscore are inspired or borrowed from Prototype,
+//     Oliver Steele's Functional, and John Resig's Micro-Templating.
+//     For all details and documentation:
+//     http://documentcloud.github.com/underscore
+
+(function() {
+
+  // Baseline setup
+  // --------------
+
+  // Establish the root object, `window` in the browser, or `global` on the server.
+  var root = this;
+
+  // Save the previous value of the `_` variable.
+  var previousUnderscore = root._;
+
+  // Establish the object that gets returned to break out of a loop iteration.
+  var breaker = {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var slice            = ArrayProto.slice,
+      unshift          = ArrayProto.unshift,
+      toString         = ObjProto.toString,
+      hasOwnProperty   = ObjProto.hasOwnProperty;
+
+  // All **ECMAScript 5** native function implementations that we hope to use
+  // are declared here.
+  var
+    nativeForEach      = ArrayProto.forEach,
+    nativeMap          = ArrayProto.map,
+    nativeReduce       = ArrayProto.reduce,
+    nativeReduceRight  = ArrayProto.reduceRight,
+    nativeFilter       = ArrayProto.filter,
+    nativeEvery        = ArrayProto.every,
+    nativeSome         = ArrayProto.some,
+    nativeIndexOf      = ArrayProto.indexOf,
+    nativeLastIndexOf  = ArrayProto.lastIndexOf,
+    nativeIsArray      = Array.isArray,
+    nativeKeys         = Object.keys,
+    nativeBind         = FuncProto.bind;
+
+  // Create a safe reference to the Underscore object for use below.
+  var _ = function(obj) { return new wrapper(obj); };
+
+  // Export the Underscore object for **Node.js**, with
+  // backwards-compatibility for the old `require()` API. If we're in
+  // the browser, add `_` as a global object via a string identifier,
+  // for Closure Compiler "advanced" mode.
+  if (typeof exports !== 'undefined') {
+    if (typeof module !== 'undefined' && module.exports) {
+      exports = module.exports = _;
+    }
+    exports._ = _;
+  } else {
+    root['_'] = _;
+  }
+
+  // Current version.
+  _.VERSION = '1.3.1';
+
+  // Collection Functions
+  // --------------------
+
+  // The cornerstone, an `each` implementation, aka `forEach`.
+  // Handles objects with the built-in `forEach`, arrays, and raw objects.
+  // Delegates to **ECMAScript 5**'s native `forEach` if available.
+  var each = _.each = _.forEach = function(obj, iterator, context) {
+    if (obj == null) return;
+    if (nativeForEach && obj.forEach === nativeForEach) {
+      obj.forEach(iterator, context);
+    } else if (obj.length === +obj.length) {
+      for (var i = 0, l = obj.length; i < l; i++) {
+        if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
+      }
+    } else {
+      for (var key in obj) {
+        if (_.has(obj, key)) {
+          if (iterator.call(context, obj[key], key, obj) === breaker) return;
+        }
+      }
+    }
+  };
+
+  // Return the results of applying the iterator to each element.
+  // Delegates to **ECMAScript 5**'s native `map` if available.
+  _.map = _.collect = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+    each(obj, function(value, index, list) {
+      results[results.length] = iterator.call(context, value, index, list);
+    });
+    if (obj.length === +obj.length) results.length = obj.length;
+    return results;
+  };
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduce && obj.reduce === nativeReduce) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+    }
+    each(obj, function(value, index, list) {
+      if (!initial) {
+        memo = value;
+        initial = true;
+      } else {
+        memo = iterator.call(context, memo, value, index, list);
+      }
+    });
+    if (!initial) throw new TypeError('Reduce of empty array with no initial value');
+    return memo;
+  };
+
+  // The right-associative version of reduce, also known as `foldr`.
+  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+    }
+    var reversed = _.toArray(obj).reverse();
+    if (context && !initial) iterator = _.bind(iterator, context);
+    return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
+  };
+
+  // Return the first value which passes a truth test. Aliased as `detect`.
+  _.find = _.detect = function(obj, iterator, context) {
+    var result;
+    any(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) {
+        result = value;
+        return true;
+      }
+    });
+    return result;
+  };
+
+  // Return all the elements that pass a truth test.
+  // Delegates to **ECMAScript 5**'s native `filter` if available.
+  // Aliased as `select`.
+  _.filter = _.select = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+    each(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) results[results.length] = value;
+    });
+    return results;
+  };
+
+  // Return all the elements for which a truth test fails.
+  _.reject = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    each(obj, function(value, index, list) {
+      if (!iterator.call(context, value, index, list)) results[results.length] = value;
+    });
+    return results;
+  };
+
+  // Determine whether all of the elements match a truth test.
+  // Delegates to **ECMAScript 5**'s native `every` if available.
+  // Aliased as `all`.
+  _.every = _.all = function(obj, iterator, context) {
+    var result = true;
+    if (obj == null) return result;
+    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+    each(obj, function(value, index, list) {
+      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+    });
+    return result;
+  };
+
+  // Determine if at least one element in the object matches a truth test.
+  // Delegates to **ECMAScript 5**'s native `some` if available.
+  // Aliased as `any`.
+  var any = _.some = _.any = function(obj, iterator, context) {
+    iterator || (iterator = _.identity);
+    var result = false;
+    if (obj == null) return result;
+    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+    each(obj, function(value, index, list) {
+      if (result || (result = iterator.call(context, value, index, list))) return breaker;
+    });
+    return !!result;
+  };
+
+  // Determine if a given value is included in the array or object using `===`.
+  // Aliased as `contains`.
+  _.include = _.contains = function(obj, target) {
+    var found = false;
+    if (obj == null) return found;
+    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+    found = any(obj, function(value) {
+      return value === target;
+    });
+    return found;
+  };
+
+  // Invoke a method (with arguments) on every item in a collection.
+  _.invoke = function(obj, method) {
+    var args = slice.call(arguments, 2);
+    return _.map(obj, function(value) {
+      return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
+    });
+  };
+
+  // Convenience version of a common use case of `map`: fetching a property.
+  _.pluck = function(obj, key) {
+    return _.map(obj, function(value){ return value[key]; });
+  };
+
+  // Return the maximum element or (element-based computation).
+  _.max = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
+    if (!iterator && _.isEmpty(obj)) return -Infinity;
+    var result = {computed : -Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed >= result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Return the minimum element (or element-based computation).
+  _.min = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
+    if (!iterator && _.isEmpty(obj)) return Infinity;
+    var result = {computed : Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed < result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Shuffle an array.
+  _.shuffle = function(obj) {
+    var shuffled = [], rand;
+    each(obj, function(value, index, list) {
+      if (index == 0) {
+        shuffled[0] = value;
+      } else {
+        rand = Math.floor(Math.random() * (index + 1));
+        shuffled[index] = shuffled[rand];
+        shuffled[rand] = value;
+      }
+    });
+    return shuffled;
+  };
+
+  // Sort the object's values by a criterion produced by an iterator.
+  _.sortBy = function(obj, iterator, context) {
+    return _.pluck(_.map(obj, function(value, index, list) {
+      return {
+        value : value,
+        criteria : iterator.call(context, value, index, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a < b ? -1 : a > b ? 1 : 0;
+    }), 'value');
+  };
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  _.groupBy = function(obj, val) {
+    var result = {};
+    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
+    each(obj, function(value, index) {
+      var key = iterator(value, index);
+      (result[key] || (result[key] = [])).push(value);
+    });
+    return result;
+  };
+
+  // Use a comparator function to figure out at what index an object should
+  // be inserted so as to maintain order. Uses binary search.
+  _.sortedIndex = function(array, obj, iterator) {
+    iterator || (iterator = _.identity);
+    var low = 0, high = array.length;
+    while (low < high) {
+      var mid = (low + high) >> 1;
+      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
+    }
+    return low;
+  };
+
+  // Safely convert anything iterable into a real, live array.
+  _.toArray = function(iterable) {
+    if (!iterable)                return [];
+    if (iterable.toArray)         return iterable.toArray();
+    if (_.isArray(iterable))      return slice.call(iterable);
+    if (_.isArguments(iterable))  return slice.call(iterable);
+    return _.values(iterable);
+  };
+
+  // Return the number of elements in an object.
+  _.size = function(obj) {
+    return _.toArray(obj).length;
+  };
+
+  // Array Functions
+  // ---------------
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. Aliased as `head`. The **guard** check allows it to work
+  // with `_.map`.
+  _.first = _.head = function(array, n, guard) {
+    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+  };
+
+  // Returns everything but the last entry of the array. Especcialy useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N. The **guard** check allows it to work with
+  // `_.map`.
+  _.initial = function(array, n, guard) {
+    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+  };
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  _.last = function(array, n, guard) {
+    if ((n != null) && !guard) {
+      return slice.call(array, Math.max(array.length - n, 0));
+    } else {
+      return array[array.length - 1];
+    }
+  };
+
+  // Returns everything but the first entry of the array. Aliased as `tail`.
+  // Especially useful on the arguments object. Passing an **index** will return
+  // the rest of the values in the array from that index onward. The **guard**
+  // check allows it to work with `_.map`.
+  _.rest = _.tail = function(array, index, guard) {
+    return slice.call(array, (index == null) || guard ? 1 : index);
+  };
+
+  // Trim out all falsy values from an array.
+  _.compact = function(array) {
+    return _.filter(array, function(value){ return !!value; });
+  };
+
+  // Return a completely flattened version of an array.
+  _.flatten = function(array, shallow) {
+    return _.reduce(array, function(memo, value) {
+      if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
+      memo[memo.length] = value;
+      return memo;
+    }, []);
+  };
+
+  // Return a version of the array that does not contain the specified value(s).
+  _.without = function(array) {
+    return _.difference(array, slice.call(arguments, 1));
+  };
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // Aliased as `unique`.
+  _.uniq = _.unique = function(array, isSorted, iterator) {
+    var initial = iterator ? _.map(array, iterator) : array;
+    var result = [];
+    _.reduce(initial, function(memo, el, i) {
+      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
+        memo[memo.length] = el;
+        result[result.length] = array[i];
+      }
+      return memo;
+    }, []);
+    return result;
+  };
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  _.union = function() {
+    return _.uniq(_.flatten(arguments, true));
+  };
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays. (Aliased as "intersect" for back-compat.)
+  _.intersection = _.intersect = function(array) {
+    var rest = slice.call(arguments, 1);
+    return _.filter(_.uniq(array), function(item) {
+      return _.every(rest, function(other) {
+        return _.indexOf(other, item) >= 0;
+      });
+    });
+  };
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  _.difference = function(array) {
+    var rest = _.flatten(slice.call(arguments, 1));
+    return _.filter(array, function(value){ return !_.include(rest, value); });
+  };
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  _.zip = function() {
+    var args = slice.call(arguments);
+    var length = _.max(_.pluck(args, 'length'));
+    var results = new Array(length);
+    for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
+    return results;
+  };
+
+  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+  // we need this function. Return the position of the first occurrence of an
+  // item in an array, or -1 if the item is not included in the array.
+  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  _.indexOf = function(array, item, isSorted) {
+    if (array == null) return -1;
+    var i, l;
+    if (isSorted) {
+      i = _.sortedIndex(array, item);
+      return array[i] === item ? i : -1;
+    }
+    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
+    for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
+    return -1;
+  };
+
+  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+  _.lastIndexOf = function(array, item) {
+    if (array == null) return -1;
+    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
+    var i = array.length;
+    while (i--) if (i in array && array[i] === item) return i;
+    return -1;
+  };
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](http://docs.python.org/library/functions.html#range).
+  _.range = function(start, stop, step) {
+    if (arguments.length <= 1) {
+      stop = start || 0;
+      start = 0;
+    }
+    step = arguments[2] || 1;
+
+    var len = Math.max(Math.ceil((stop - start) / step), 0);
+    var idx = 0;
+    var range = new Array(len);
+
+    while(idx < len) {
+      range[idx++] = start;
+      start += step;
+    }
+
+    return range;
+  };
+
+  // Function (ahem) Functions
+  // ------------------
+
+  // Reusable constructor function for prototype setting.
+  var ctor = function(){};
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally). Binding with arguments is also known as `curry`.
+  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
+  // We check for `func.bind` first, to fail fast when `func` is undefined.
+  _.bind = function bind(func, context) {
+    var bound, args;
+    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+    if (!_.isFunction(func)) throw new TypeError;
+    args = slice.call(arguments, 2);
+    return bound = function() {
+      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
+      ctor.prototype = func.prototype;
+      var self = new ctor;
+      var result = func.apply(self, args.concat(slice.call(arguments)));
+      if (Object(result) === result) return result;
+      return self;
+    };
+  };
+
+  // Bind all of an object's methods to that object. Useful for ensuring that
+  // all callbacks defined on an object belong to it.
+  _.bindAll = function(obj) {
+    var funcs = slice.call(arguments, 1);
+    if (funcs.length == 0) funcs = _.functions(obj);
+    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+    return obj;
+  };
+
+  // Memoize an expensive function by storing its results.
+  _.memoize = function(func, hasher) {
+    var memo = {};
+    hasher || (hasher = _.identity);
+    return function() {
+      var key = hasher.apply(this, arguments);
+      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+    };
+  };
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  _.delay = function(func, wait) {
+    var args = slice.call(arguments, 2);
+    return setTimeout(function(){ return func.apply(func, args); }, wait);
+  };
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  _.defer = function(func) {
+    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+  };
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time.
+  _.throttle = function(func, wait) {
+    var context, args, timeout, throttling, more;
+    var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
+    return function() {
+      context = this; args = arguments;
+      var later = function() {
+        timeout = null;
+        if (more) func.apply(context, args);
+        whenDone();
+      };
+      if (!timeout) timeout = setTimeout(later, wait);
+      if (throttling) {
+        more = true;
+      } else {
+        func.apply(context, args);
+      }
+      whenDone();
+      throttling = true;
+    };
+  };
+
+  // Returns a function, that, as long as it continues to be invoked, will not
+  // be triggered. The function will be called after it stops being called for
+  // N milliseconds.
+  _.debounce = function(func, wait) {
+    var timeout;
+    return function() {
+      var context = this, args = arguments;
+      var later = function() {
+        timeout = null;
+        func.apply(context, args);
+      };
+      clearTimeout(timeout);
+      timeout = setTimeout(later, wait);
+    };
+  };
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  _.once = function(func) {
+    var ran = false, memo;
+    return function() {
+      if (ran) return memo;
+      ran = true;
+      return memo = func.apply(this, arguments);
+    };
+  };
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  _.wrap = function(func, wrapper) {
+    return function() {
+      var args = [func].concat(slice.call(arguments, 0));
+      return wrapper.apply(this, args);
+    };
+  };
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  _.compose = function() {
+    var funcs = arguments;
+    return function() {
+      var args = arguments;
+      for (var i = funcs.length - 1; i >= 0; i--) {
+        args = [funcs[i].apply(this, args)];
+      }
+      return args[0];
+    };
+  };
+
+  // Returns a function that will only be executed after being called N times.
+  _.after = function(times, func) {
+    if (times <= 0) return func();
+    return function() {
+      if (--times < 1) { return func.apply(this, arguments); }
+    };
+  };
+
+  // Object Functions
+  // ----------------
+
+  // Retrieve the names of an object's properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`
+  _.keys = nativeKeys || function(obj) {
+    if (obj !== Object(obj)) throw new TypeError('Invalid object');
+    var keys = [];
+    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+    return keys;
+  };
+
+  // Retrieve the values of an object's properties.
+  _.values = function(obj) {
+    return _.map(obj, _.identity);
+  };
+
+  // Return a sorted list of the function names available on the object.
+  // Aliased as `methods`
+  _.functions = _.methods = function(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (_.isFunction(obj[key])) names.push(key);
+    }
+    return names.sort();
+  };
+
+  // Extend a given object with all the properties in passed-in object(s).
+  _.extend = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      for (var prop in source) {
+        obj[prop] = source[prop];
+      }
+    });
+    return obj;
+  };
+
+  // Fill in a given object with default properties.
+  _.defaults = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      for (var prop in source) {
+        if (obj[prop] == null) obj[prop] = source[prop];
+      }
+    });
+    return obj;
+  };
+
+  // Create a (shallow-cloned) duplicate of an object.
+  _.clone = function(obj) {
+    if (!_.isObject(obj)) return obj;
+    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+  };
+
+  // Invokes interceptor with the obj, and then returns obj.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  _.tap = function(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  };
+
+  // Internal recursive comparison function.
+  function eq(a, b, stack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+    if (a === b) return a !== 0 || 1 / a == 1 / b;
+    // A strict comparison is necessary because `null == undefined`.
+    if (a == null || b == null) return a === b;
+    // Unwrap any wrapped objects.
+    if (a._chain) a = a._wrapped;
+    if (b._chain) b = b._wrapped;
+    // Invoke a custom `isEqual` method if one is provided.
+    if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
+    if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className != toString.call(b)) return false;
+    switch (className) {
+      // Strings, numbers, dates, and booleans are compared by value.
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return a == String(b);
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+        // other numeric values.
+        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a == +b;
+      // RegExps are compared by their source patterns and flags.
+      case '[object RegExp]':
+        return a.source == b.source &&
+               a.global == b.global &&
+               a.multiline == b.multiline &&
+               a.ignoreCase == b.ignoreCase;
+    }
+    if (typeof a != 'object' || typeof b != 'object') return false;
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+    var length = stack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (stack[length] == a) return true;
+    }
+    // Add the first object to the stack of traversed objects.
+    stack.push(a);
+    var size = 0, result = true;
+    // Recursively compare objects and arrays.
+    if (className == '[object Array]') {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      size = a.length;
+      result = size == b.length;
+      if (result) {
+        // Deep compare the contents, ignoring non-numeric properties.
+        while (size--) {
+          // Ensure commutative equality for sparse arrays.
+          if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
+        }
+      }
+    } else {
+      // Objects with different constructors are not equivalent.
+      if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
+      // Deep compare objects.
+      for (var key in a) {
+        if (_.has(a, key)) {
+          // Count the expected number of properties.
+          size++;
+          // Deep compare each member.
+          if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
+        }
+      }
+      // Ensure that both objects contain the same number of properties.
+      if (result) {
+        for (key in b) {
+          if (_.has(b, key) && !(size--)) break;
+        }
+        result = !size;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    stack.pop();
+    return result;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  _.isEqual = function(a, b) {
+    return eq(a, b, []);
+  };
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  _.isEmpty = function(obj) {
+    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+    for (var key in obj) if (_.has(obj, key)) return false;
+    return true;
+  };
+
+  // Is a given value a DOM element?
+  _.isElement = function(obj) {
+    return !!(obj && obj.nodeType == 1);
+  };
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native Array.isArray
+  _.isArray = nativeIsArray || function(obj) {
+    return toString.call(obj) == '[object Array]';
+  };
+
+  // Is a given variable an object?
+  _.isObject = function(obj) {
+    return obj === Object(obj);
+  };
+
+  // Is a given variable an arguments object?
+  _.isArguments = function(obj) {
+    return toString.call(obj) == '[object Arguments]';
+  };
+  if (!_.isArguments(arguments)) {
+    _.isArguments = function(obj) {
+      return !!(obj && _.has(obj, 'callee'));
+    };
+  }
+
+  // Is a given value a function?
+  _.isFunction = function(obj) {
+    return toString.call(obj) == '[object Function]';
+  };
+
+  // Is a given value a string?
+  _.isString = function(obj) {
+    return toString.call(obj) == '[object String]';
+  };
+
+  // Is a given value a number?
+  _.isNumber = function(obj) {
+    return toString.call(obj) == '[object Number]';
+  };
+
+  // Is the given value `NaN`?
+  _.isNaN = function(obj) {
+    // `NaN` is the only value for which `===` is not reflexive.
+    return obj !== obj;
+  };
+
+  // Is a given value a boolean?
+  _.isBoolean = function(obj) {
+    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+  };
+
+  // Is a given value a date?
+  _.isDate = function(obj) {
+    return toString.call(obj) == '[object Date]';
+  };
+
+  // Is the given value a regular expression?
+  _.isRegExp = function(obj) {
+    return toString.call(obj) == '[object RegExp]';
+  };
+
+  // Is a given value equal to null?
+  _.isNull = function(obj) {
+    return obj === null;
+  };
+
+  // Is a given variable undefined?
+  _.isUndefined = function(obj) {
+    return obj === void 0;
+  };
+
+  // Has own property?
+  _.has = function(obj, key) {
+    return hasOwnProperty.call(obj, key);
+  };
+
+  // Utility Functions
+  // -----------------
+
+  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+  // previous owner. Returns a reference to the Underscore object.
+  _.noConflict = function() {
+    root._ = previousUnderscore;
+    return this;
+  };
+
+  // Keep the identity function around for default iterators.
+  _.identity = function(value) {
+    return value;
+  };
+
+  // Run a function **n** times.
+  _.times = function (n, iterator, context) {
+    for (var i = 0; i < n; i++) iterator.call(context, i);
+  };
+
+  // Escape a string for HTML interpolation.
+  _.escape = function(string) {
+    return (''+string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
+  };
+
+  // Add your own custom functions to the Underscore object, ensuring that
+  // they're correctly added to the OOP wrapper as well.
+  _.mixin = function(obj) {
+    each(_.functions(obj), function(name){
+      addToWrapper(name, _[name] = obj[name]);
+    });
+  };
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  _.uniqueId = function(prefix) {
+    var id = idCounter++;
+    return prefix ? prefix + id : id;
+  };
+
+  // By default, Underscore uses ERB-style template delimiters, change the
+  // following template settings to use alternative delimiters.
+  _.templateSettings = {
+    evaluate    : /<%([\s\S]+?)%>/g,
+    interpolate : /<%=([\s\S]+?)%>/g,
+    escape      : /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /.^/;
+
+  // Within an interpolation, evaluation, or escaping, remove HTML escaping
+  // that had been previously added.
+  var unescape = function(code) {
+    return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
+  };
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  _.template = function(str, data) {
+    var c  = _.templateSettings;
+    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
+      'with(obj||{}){__p.push(\'' +
+      str.replace(/\\/g, '\\\\')
+         .replace(/'/g, "\\'")
+         .replace(c.escape || noMatch, function(match, code) {
+           return "',_.escape(" + unescape(code) + "),'";
+         })
+         .replace(c.interpolate || noMatch, function(match, code) {
+           return "'," + unescape(code) + ",'";
+         })
+         .replace(c.evaluate || noMatch, function(match, code) {
+           return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
+         })
+         .replace(/\r/g, '\\r')
+         .replace(/\n/g, '\\n')
+         .replace(/\t/g, '\\t')
+         + "');}return __p.join('');";
+    var func = new Function('obj', '_', tmpl);
+    if (data) return func(data, _);
+    return function(data) {
+      return func.call(this, data, _);
+    };
+  };
+
+  // Add a "chain" function, which will delegate to the wrapper.
+  _.chain = function(obj) {
+    return _(obj).chain();
+  };
+
+  // The OOP Wrapper
+  // ---------------
+
+  // If Underscore is called as a function, it returns a wrapped object that
+  // can be used OO-style. This wrapper holds altered versions of all the
+  // underscore functions. Wrapped objects may be chained.
+  var wrapper = function(obj) { this._wrapped = obj; };
+
+  // Expose `wrapper.prototype` as `_.prototype`
+  _.prototype = wrapper.prototype;
+
+  // Helper function to continue chaining intermediate results.
+  var result = function(obj, chain) {
+    return chain ? _(obj).chain() : obj;
+  };
+
+  // A method to easily add functions to the OOP wrapper.
+  var addToWrapper = function(name, func) {
+    wrapper.prototype[name] = function() {
+      var args = slice.call(arguments);
+      unshift.call(args, this._wrapped);
+      return result(func.apply(_, args), this._chain);
+    };
+  };
+
+  // Add all of the Underscore functions to the wrapper object.
+  _.mixin(_);
+
+  // Add all mutator Array functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    wrapper.prototype[name] = function() {
+      var wrapped = this._wrapped;
+      method.apply(wrapped, arguments);
+      var length = wrapped.length;
+      if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
+      return result(wrapped, this._chain);
+    };
+  });
+
+  // Add all accessor Array functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    wrapper.prototype[name] = function() {
+      return result(method.apply(this._wrapped, arguments), this._chain);
+    };
+  });
+
+  // Start chaining a wrapped Underscore object.
+  wrapper.prototype.chain = function() {
+    this._chain = true;
+    return this;
+  };
+
+  // Extracts the result from a wrapped and chained object.
+  wrapper.prototype.value = function() {
+    return this._wrapped;
+  };
+
+}).call(this);
diff --git a/docs/codebase/_build/html/_static/underscore.js b/docs/codebase/_build/html/_static/underscore.js
new file mode 100644
index 0000000000000000000000000000000000000000..5b55f32beaca186f84cca115514f02cddbd1bbd5
--- /dev/null
+++ b/docs/codebase/_build/html/_static/underscore.js
@@ -0,0 +1,31 @@
+// Underscore.js 1.3.1
+// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
+// Underscore is freely distributable under the MIT license.
+// Portions of Underscore are inspired or borrowed from Prototype,
+// Oliver Steele's Functional, and John Resig's Micro-Templating.
+// For all details and documentation:
+// http://documentcloud.github.com/underscore
+(function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source==
+c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c,
+h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each=
+b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a==
+null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect=
+function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e=
+e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck=
+function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})});
+return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a,
+c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest=
+b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]);
+return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c,
+d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g};
+var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a,
+c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true:
+a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}};
+b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments,
+1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)};
+b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"};
+b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;").replace(/\//g,"&#x2F;")};b.mixin=function(a){j(b.functions(a),
+function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+
+u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]=
+function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain=
+true;return this};m.prototype.value=function(){return this._wrapped}}).call(this);
diff --git a/docs/codebase/_build/html/_static/up-pressed.png b/docs/codebase/_build/html/_static/up-pressed.png
new file mode 100644
index 0000000000000000000000000000000000000000..99e7210962b0667e47408b40fdb5dd14749a156e
Binary files /dev/null and b/docs/codebase/_build/html/_static/up-pressed.png differ
diff --git a/docs/codebase/_build/html/_static/up.png b/docs/codebase/_build/html/_static/up.png
new file mode 100644
index 0000000000000000000000000000000000000000..26de002e85d3f5df53163e80b61af59bc4a6389b
Binary files /dev/null and b/docs/codebase/_build/html/_static/up.png differ
diff --git a/docs/codebase/_build/html/_static/websupport.js b/docs/codebase/_build/html/_static/websupport.js
new file mode 100644
index 0000000000000000000000000000000000000000..98e7f40b6327e673e382068cdfb3bf3674a06cca
--- /dev/null
+++ b/docs/codebase/_build/html/_static/websupport.js
@@ -0,0 +1,808 @@
+/*
+ * websupport.js
+ * ~~~~~~~~~~~~~
+ *
+ * sphinx.websupport utilities for all documentation.
+ *
+ * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+(function($) {
+  $.fn.autogrow = function() {
+    return this.each(function() {
+    var textarea = this;
+
+    $.fn.autogrow.resize(textarea);
+
+    $(textarea)
+      .focus(function() {
+        textarea.interval = setInterval(function() {
+          $.fn.autogrow.resize(textarea);
+        }, 500);
+      })
+      .blur(function() {
+        clearInterval(textarea.interval);
+      });
+    });
+  };
+
+  $.fn.autogrow.resize = function(textarea) {
+    var lineHeight = parseInt($(textarea).css('line-height'), 10);
+    var lines = textarea.value.split('\n');
+    var columns = textarea.cols;
+    var lineCount = 0;
+    $.each(lines, function() {
+      lineCount += Math.ceil(this.length / columns) || 1;
+    });
+    var height = lineHeight * (lineCount + 1);
+    $(textarea).css('height', height);
+  };
+})(jQuery);
+
+(function($) {
+  var comp, by;
+
+  function init() {
+    initEvents();
+    initComparator();
+  }
+
+  function initEvents() {
+    $(document).on("click", 'a.comment-close', function(event) {
+      event.preventDefault();
+      hide($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.vote', function(event) {
+      event.preventDefault();
+      handleVote($(this));
+    });
+    $(document).on("click", 'a.reply', function(event) {
+      event.preventDefault();
+      openReply($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.close-reply', function(event) {
+      event.preventDefault();
+      closeReply($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.sort-option', function(event) {
+      event.preventDefault();
+      handleReSort($(this));
+    });
+    $(document).on("click", 'a.show-proposal', function(event) {
+      event.preventDefault();
+      showProposal($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.hide-proposal', function(event) {
+      event.preventDefault();
+      hideProposal($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.show-propose-change', function(event) {
+      event.preventDefault();
+      showProposeChange($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.hide-propose-change', function(event) {
+      event.preventDefault();
+      hideProposeChange($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.accept-comment', function(event) {
+      event.preventDefault();
+      acceptComment($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.delete-comment', function(event) {
+      event.preventDefault();
+      deleteComment($(this).attr('id').substring(2));
+    });
+    $(document).on("click", 'a.comment-markup', function(event) {
+      event.preventDefault();
+      toggleCommentMarkupBox($(this).attr('id').substring(2));
+    });
+  }
+
+  /**
+   * Set comp, which is a comparator function used for sorting and
+   * inserting comments into the list.
+   */
+  function setComparator() {
+    // If the first three letters are "asc", sort in ascending order
+    // and remove the prefix.
+    if (by.substring(0,3) == 'asc') {
+      var i = by.substring(3);
+      comp = function(a, b) { return a[i] - b[i]; };
+    } else {
+      // Otherwise sort in descending order.
+      comp = function(a, b) { return b[by] - a[by]; };
+    }
+
+    // Reset link styles and format the selected sort option.
+    $('a.sel').attr('href', '#').removeClass('sel');
+    $('a.by' + by).removeAttr('href').addClass('sel');
+  }
+
+  /**
+   * Create a comp function. If the user has preferences stored in
+   * the sortBy cookie, use those, otherwise use the default.
+   */
+  function initComparator() {
+    by = 'rating'; // Default to sort by rating.
+    // If the sortBy cookie is set, use that instead.
+    if (document.cookie.length > 0) {
+      var start = document.cookie.indexOf('sortBy=');
+      if (start != -1) {
+        start = start + 7;
+        var end = document.cookie.indexOf(";", start);
+        if (end == -1) {
+          end = document.cookie.length;
+          by = unescape(document.cookie.substring(start, end));
+        }
+      }
+    }
+    setComparator();
+  }
+
+  /**
+   * Show a comment div.
+   */
+  function show(id) {
+    $('#ao' + id).hide();
+    $('#ah' + id).show();
+    var context = $.extend({id: id}, opts);
+    var popup = $(renderTemplate(popupTemplate, context)).hide();
+    popup.find('textarea[name="proposal"]').hide();
+    popup.find('a.by' + by).addClass('sel');
+    var form = popup.find('#cf' + id);
+    form.submit(function(event) {
+      event.preventDefault();
+      addComment(form);
+    });
+    $('#s' + id).after(popup);
+    popup.slideDown('fast', function() {
+      getComments(id);
+    });
+  }
+
+  /**
+   * Hide a comment div.
+   */
+  function hide(id) {
+    $('#ah' + id).hide();
+    $('#ao' + id).show();
+    var div = $('#sc' + id);
+    div.slideUp('fast', function() {
+      div.remove();
+    });
+  }
+
+  /**
+   * Perform an ajax request to get comments for a node
+   * and insert the comments into the comments tree.
+   */
+  function getComments(id) {
+    $.ajax({
+     type: 'GET',
+     url: opts.getCommentsURL,
+     data: {node: id},
+     success: function(data, textStatus, request) {
+       var ul = $('#cl' + id);
+       var speed = 100;
+       $('#cf' + id)
+         .find('textarea[name="proposal"]')
+         .data('source', data.source);
+
+       if (data.comments.length === 0) {
+         ul.html('<li>No comments yet.</li>');
+         ul.data('empty', true);
+       } else {
+         // If there are comments, sort them and put them in the list.
+         var comments = sortComments(data.comments);
+         speed = data.comments.length * 100;
+         appendComments(comments, ul);
+         ul.data('empty', false);
+       }
+       $('#cn' + id).slideUp(speed + 200);
+       ul.slideDown(speed);
+     },
+     error: function(request, textStatus, error) {
+       showError('Oops, there was a problem retrieving the comments.');
+     },
+     dataType: 'json'
+    });
+  }
+
+  /**
+   * Add a comment via ajax and insert the comment into the comment tree.
+   */
+  function addComment(form) {
+    var node_id = form.find('input[name="node"]').val();
+    var parent_id = form.find('input[name="parent"]').val();
+    var text = form.find('textarea[name="comment"]').val();
+    var proposal = form.find('textarea[name="proposal"]').val();
+
+    if (text == '') {
+      showError('Please enter a comment.');
+      return;
+    }
+
+    // Disable the form that is being submitted.
+    form.find('textarea,input').attr('disabled', 'disabled');
+
+    // Send the comment to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.addCommentURL,
+      dataType: 'json',
+      data: {
+        node: node_id,
+        parent: parent_id,
+        text: text,
+        proposal: proposal
+      },
+      success: function(data, textStatus, error) {
+        // Reset the form.
+        if (node_id) {
+          hideProposeChange(node_id);
+        }
+        form.find('textarea')
+          .val('')
+          .add(form.find('input'))
+          .removeAttr('disabled');
+	var ul = $('#cl' + (node_id || parent_id));
+        if (ul.data('empty')) {
+          $(ul).empty();
+          ul.data('empty', false);
+        }
+        insertComment(data.comment);
+        var ao = $('#ao' + node_id);
+        ao.find('img').attr({'src': opts.commentBrightImage});
+        if (node_id) {
+          // if this was a "root" comment, remove the commenting box
+          // (the user can get it back by reopening the comment popup)
+          $('#ca' + node_id).slideUp();
+        }
+      },
+      error: function(request, textStatus, error) {
+        form.find('textarea,input').removeAttr('disabled');
+        showError('Oops, there was a problem adding the comment.');
+      }
+    });
+  }
+
+  /**
+   * Recursively append comments to the main comment list and children
+   * lists, creating the comment tree.
+   */
+  function appendComments(comments, ul) {
+    $.each(comments, function() {
+      var div = createCommentDiv(this);
+      ul.append($(document.createElement('li')).html(div));
+      appendComments(this.children, div.find('ul.comment-children'));
+      // To avoid stagnating data, don't store the comments children in data.
+      this.children = null;
+      div.data('comment', this);
+    });
+  }
+
+  /**
+   * After adding a new comment, it must be inserted in the correct
+   * location in the comment tree.
+   */
+  function insertComment(comment) {
+    var div = createCommentDiv(comment);
+
+    // To avoid stagnating data, don't store the comments children in data.
+    comment.children = null;
+    div.data('comment', comment);
+
+    var ul = $('#cl' + (comment.node || comment.parent));
+    var siblings = getChildren(ul);
+
+    var li = $(document.createElement('li'));
+    li.hide();
+
+    // Determine where in the parents children list to insert this comment.
+    for(i=0; i < siblings.length; i++) {
+      if (comp(comment, siblings[i]) <= 0) {
+        $('#cd' + siblings[i].id)
+          .parent()
+          .before(li.html(div));
+        li.slideDown('fast');
+        return;
+      }
+    }
+
+    // If we get here, this comment rates lower than all the others,
+    // or it is the only comment in the list.
+    ul.append(li.html(div));
+    li.slideDown('fast');
+  }
+
+  function acceptComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.acceptCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        $('#cm' + id).fadeOut('fast');
+        $('#cd' + id).removeClass('moderate');
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem accepting the comment.');
+      }
+    });
+  }
+
+  function deleteComment(id) {
+    $.ajax({
+      type: 'POST',
+      url: opts.deleteCommentURL,
+      data: {id: id},
+      success: function(data, textStatus, request) {
+        var div = $('#cd' + id);
+        if (data == 'delete') {
+          // Moderator mode: remove the comment and all children immediately
+          div.slideUp('fast', function() {
+            div.remove();
+          });
+          return;
+        }
+        // User mode: only mark the comment as deleted
+        div
+          .find('span.user-id:first')
+          .text('[deleted]').end()
+          .find('div.comment-text:first')
+          .text('[deleted]').end()
+          .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id +
+                ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id)
+          .remove();
+        var comment = div.data('comment');
+        comment.username = '[deleted]';
+        comment.text = '[deleted]';
+        div.data('comment', comment);
+      },
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem deleting the comment.');
+      }
+    });
+  }
+
+  function showProposal(id) {
+    $('#sp' + id).hide();
+    $('#hp' + id).show();
+    $('#pr' + id).slideDown('fast');
+  }
+
+  function hideProposal(id) {
+    $('#hp' + id).hide();
+    $('#sp' + id).show();
+    $('#pr' + id).slideUp('fast');
+  }
+
+  function showProposeChange(id) {
+    $('#pc' + id).hide();
+    $('#hc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val(textarea.data('source'));
+    $.fn.autogrow.resize(textarea[0]);
+    textarea.slideDown('fast');
+  }
+
+  function hideProposeChange(id) {
+    $('#hc' + id).hide();
+    $('#pc' + id).show();
+    var textarea = $('#pt' + id);
+    textarea.val('').removeAttr('disabled');
+    textarea.slideUp('fast');
+  }
+
+  function toggleCommentMarkupBox(id) {
+    $('#mb' + id).toggle();
+  }
+
+  /** Handle when the user clicks on a sort by link. */
+  function handleReSort(link) {
+    var classes = link.attr('class').split(/\s+/);
+    for (var i=0; i<classes.length; i++) {
+      if (classes[i] != 'sort-option') {
+	by = classes[i].substring(2);
+      }
+    }
+    setComparator();
+    // Save/update the sortBy cookie.
+    var expiration = new Date();
+    expiration.setDate(expiration.getDate() + 365);
+    document.cookie= 'sortBy=' + escape(by) +
+                     ';expires=' + expiration.toUTCString();
+    $('ul.comment-ul').each(function(index, ul) {
+      var comments = getChildren($(ul), true);
+      comments = sortComments(comments);
+      appendComments(comments, $(ul).empty());
+    });
+  }
+
+  /**
+   * Function to process a vote when a user clicks an arrow.
+   */
+  function handleVote(link) {
+    if (!opts.voting) {
+      showError("You'll need to login to vote.");
+      return;
+    }
+
+    var id = link.attr('id');
+    if (!id) {
+      // Didn't click on one of the voting arrows.
+      return;
+    }
+    // If it is an unvote, the new vote value is 0,
+    // Otherwise it's 1 for an upvote, or -1 for a downvote.
+    var value = 0;
+    if (id.charAt(1) != 'u') {
+      value = id.charAt(0) == 'u' ? 1 : -1;
+    }
+    // The data to be sent to the server.
+    var d = {
+      comment_id: id.substring(2),
+      value: value
+    };
+
+    // Swap the vote and unvote links.
+    link.hide();
+    $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id)
+      .show();
+
+    // The div the comment is displayed in.
+    var div = $('div#cd' + d.comment_id);
+    var data = div.data('comment');
+
+    // If this is not an unvote, and the other vote arrow has
+    // already been pressed, unpress it.
+    if ((d.value !== 0) && (data.vote === d.value * -1)) {
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide();
+      $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show();
+    }
+
+    // Update the comments rating in the local data.
+    data.rating += (data.vote === 0) ? d.value : (d.value - data.vote);
+    data.vote = d.value;
+    div.data('comment', data);
+
+    // Change the rating text.
+    div.find('.rating:first')
+      .text(data.rating + ' point' + (data.rating == 1 ? '' : 's'));
+
+    // Send the vote information to the server.
+    $.ajax({
+      type: "POST",
+      url: opts.processVoteURL,
+      data: d,
+      error: function(request, textStatus, error) {
+        showError('Oops, there was a problem casting that vote.');
+      }
+    });
+  }
+
+  /**
+   * Open a reply form used to reply to an existing comment.
+   */
+  function openReply(id) {
+    // Swap out the reply link for the hide link
+    $('#rl' + id).hide();
+    $('#cr' + id).show();
+
+    // Add the reply li to the children ul.
+    var div = $(renderTemplate(replyTemplate, {id: id})).hide();
+    $('#cl' + id)
+      .prepend(div)
+      // Setup the submit handler for the reply form.
+      .find('#rf' + id)
+      .submit(function(event) {
+        event.preventDefault();
+        addComment($('#rf' + id));
+        closeReply(id);
+      })
+      .find('input[type=button]')
+      .click(function() {
+        closeReply(id);
+      });
+    div.slideDown('fast', function() {
+      $('#rf' + id).find('textarea').focus();
+    });
+  }
+
+  /**
+   * Close the reply form opened with openReply.
+   */
+  function closeReply(id) {
+    // Remove the reply div from the DOM.
+    $('#rd' + id).slideUp('fast', function() {
+      $(this).remove();
+    });
+
+    // Swap out the hide link for the reply link
+    $('#cr' + id).hide();
+    $('#rl' + id).show();
+  }
+
+  /**
+   * Recursively sort a tree of comments using the comp comparator.
+   */
+  function sortComments(comments) {
+    comments.sort(comp);
+    $.each(comments, function() {
+      this.children = sortComments(this.children);
+    });
+    return comments;
+  }
+
+  /**
+   * Get the children comments from a ul. If recursive is true,
+   * recursively include childrens' children.
+   */
+  function getChildren(ul, recursive) {
+    var children = [];
+    ul.children().children("[id^='cd']")
+      .each(function() {
+        var comment = $(this).data('comment');
+        if (recursive)
+          comment.children = getChildren($(this).find('#cl' + comment.id), true);
+        children.push(comment);
+      });
+    return children;
+  }
+
+  /** Create a div to display a comment in. */
+  function createCommentDiv(comment) {
+    if (!comment.displayed && !opts.moderator) {
+      return $('<div class="moderate">Thank you!  Your comment will show up '
+               + 'once it is has been approved by a moderator.</div>');
+    }
+    // Prettify the comment rating.
+    comment.pretty_rating = comment.rating + ' point' +
+      (comment.rating == 1 ? '' : 's');
+    // Make a class (for displaying not yet moderated comments differently)
+    comment.css_class = comment.displayed ? '' : ' moderate';
+    // Create a div for this comment.
+    var context = $.extend({}, opts, comment);
+    var div = $(renderTemplate(commentTemplate, context));
+
+    // If the user has voted on this comment, highlight the correct arrow.
+    if (comment.vote) {
+      var direction = (comment.vote == 1) ? 'u' : 'd';
+      div.find('#' + direction + 'v' + comment.id).hide();
+      div.find('#' + direction + 'u' + comment.id).show();
+    }
+
+    if (opts.moderator || comment.text != '[deleted]') {
+      div.find('a.reply').show();
+      if (comment.proposal_diff)
+        div.find('#sp' + comment.id).show();
+      if (opts.moderator && !comment.displayed)
+        div.find('#cm' + comment.id).show();
+      if (opts.moderator || (opts.username == comment.username))
+        div.find('#dc' + comment.id).show();
+    }
+    return div;
+  }
+
+  /**
+   * A simple template renderer. Placeholders such as <%id%> are replaced
+   * by context['id'] with items being escaped. Placeholders such as <#id#>
+   * are not escaped.
+   */
+  function renderTemplate(template, context) {
+    var esc = $(document.createElement('div'));
+
+    function handle(ph, escape) {
+      var cur = context;
+      $.each(ph.split('.'), function() {
+        cur = cur[this];
+      });
+      return escape ? esc.text(cur || "").html() : cur;
+    }
+
+    return template.replace(/<([%#])([\w\.]*)\1>/g, function() {
+      return handle(arguments[2], arguments[1] == '%' ? true : false);
+    });
+  }
+
+  /** Flash an error message briefly. */
+  function showError(message) {
+    $(document.createElement('div')).attr({'class': 'popup-error'})
+      .append($(document.createElement('div'))
+               .attr({'class': 'error-message'}).text(message))
+      .appendTo('body')
+      .fadeIn("slow")
+      .delay(2000)
+      .fadeOut("slow");
+  }
+
+  /** Add a link the user uses to open the comments popup. */
+  $.fn.comment = function() {
+    return this.each(function() {
+      var id = $(this).attr('id').substring(1);
+      var count = COMMENT_METADATA[id];
+      var title = count + ' comment' + (count == 1 ? '' : 's');
+      var image = count > 0 ? opts.commentBrightImage : opts.commentImage;
+      var addcls = count == 0 ? ' nocomment' : '';
+      $(this)
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-open' + addcls,
+            id: 'ao' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: image,
+              alt: 'comment',
+              title: title
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              show($(this).attr('id').substring(2));
+            })
+        )
+        .append(
+          $(document.createElement('a')).attr({
+            href: '#',
+            'class': 'sphinx-comment-close hidden',
+            id: 'ah' + id
+          })
+            .append($(document.createElement('img')).attr({
+              src: opts.closeCommentImage,
+              alt: 'close',
+              title: 'close'
+            }))
+            .click(function(event) {
+              event.preventDefault();
+              hide($(this).attr('id').substring(2));
+            })
+        );
+    });
+  };
+
+  var opts = {
+    processVoteURL: '/_process_vote',
+    addCommentURL: '/_add_comment',
+    getCommentsURL: '/_get_comments',
+    acceptCommentURL: '/_accept_comment',
+    deleteCommentURL: '/_delete_comment',
+    commentImage: '/static/_static/comment.png',
+    closeCommentImage: '/static/_static/comment-close.png',
+    loadingImage: '/static/_static/ajax-loader.gif',
+    commentBrightImage: '/static/_static/comment-bright.png',
+    upArrow: '/static/_static/up.png',
+    downArrow: '/static/_static/down.png',
+    upArrowPressed: '/static/_static/up-pressed.png',
+    downArrowPressed: '/static/_static/down-pressed.png',
+    voting: false,
+    moderator: false
+  };
+
+  if (typeof COMMENT_OPTIONS != "undefined") {
+    opts = jQuery.extend(opts, COMMENT_OPTIONS);
+  }
+
+  var popupTemplate = '\
+    <div class="sphinx-comments" id="sc<%id%>">\
+      <p class="sort-options">\
+        Sort by:\
+        <a href="#" class="sort-option byrating">best rated</a>\
+        <a href="#" class="sort-option byascage">newest</a>\
+        <a href="#" class="sort-option byage">oldest</a>\
+      </p>\
+      <div class="comment-header">Comments</div>\
+      <div class="comment-loading" id="cn<%id%>">\
+        loading comments... <img src="<%loadingImage%>" alt="" /></div>\
+      <ul id="cl<%id%>" class="comment-ul"></ul>\
+      <div id="ca<%id%>">\
+      <p class="add-a-comment">Add a comment\
+        (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
+      <div class="comment-markup-box" id="mb<%id%>">\
+        reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
+        <code>``code``</code>, \
+        code blocks: <code>::</code> and an indented block after blank line</div>\
+      <form method="post" id="cf<%id%>" class="comment-form" action="">\
+        <textarea name="comment" cols="80"></textarea>\
+        <p class="propose-button">\
+          <a href="#" id="pc<%id%>" class="show-propose-change">\
+            Propose a change &#9657;\
+          </a>\
+          <a href="#" id="hc<%id%>" class="hide-propose-change">\
+            Propose a change &#9663;\
+          </a>\
+        </p>\
+        <textarea name="proposal" id="pt<%id%>" cols="80"\
+                  spellcheck="false"></textarea>\
+        <input type="submit" value="Add comment" />\
+        <input type="hidden" name="node" value="<%id%>" />\
+        <input type="hidden" name="parent" value="" />\
+      </form>\
+      </div>\
+    </div>';
+
+  var commentTemplate = '\
+    <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\
+      <div class="vote">\
+        <div class="arrow">\
+          <a href="#" id="uv<%id%>" class="vote" title="vote up">\
+            <img src="<%upArrow%>" />\
+          </a>\
+          <a href="#" id="uu<%id%>" class="un vote" title="vote up">\
+            <img src="<%upArrowPressed%>" />\
+          </a>\
+        </div>\
+        <div class="arrow">\
+          <a href="#" id="dv<%id%>" class="vote" title="vote down">\
+            <img src="<%downArrow%>" id="da<%id%>" />\
+          </a>\
+          <a href="#" id="du<%id%>" class="un vote" title="vote down">\
+            <img src="<%downArrowPressed%>" />\
+          </a>\
+        </div>\
+      </div>\
+      <div class="comment-content">\
+        <p class="tagline comment">\
+          <span class="user-id"><%username%></span>\
+          <span class="rating"><%pretty_rating%></span>\
+          <span class="delta"><%time.delta%></span>\
+        </p>\
+        <div class="comment-text comment"><#text#></div>\
+        <p class="comment-opts comment">\
+          <a href="#" class="reply hidden" id="rl<%id%>">reply &#9657;</a>\
+          <a href="#" class="close-reply" id="cr<%id%>">reply &#9663;</a>\
+          <a href="#" id="sp<%id%>" class="show-proposal">proposal &#9657;</a>\
+          <a href="#" id="hp<%id%>" class="hide-proposal">proposal &#9663;</a>\
+          <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\
+          <span id="cm<%id%>" class="moderation hidden">\
+            <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\
+          </span>\
+        </p>\
+        <pre class="proposal" id="pr<%id%>">\
+<#proposal_diff#>\
+        </pre>\
+          <ul class="comment-children" id="cl<%id%>"></ul>\
+        </div>\
+        <div class="clearleft"></div>\
+      </div>\
+    </div>';
+
+  var replyTemplate = '\
+    <li>\
+      <div class="reply-div" id="rd<%id%>">\
+        <form id="rf<%id%>">\
+          <textarea name="comment" cols="80"></textarea>\
+          <input type="submit" value="Add reply" />\
+          <input type="button" value="Cancel" />\
+          <input type="hidden" name="parent" value="<%id%>" />\
+          <input type="hidden" name="node" value="" />\
+        </form>\
+      </div>\
+    </li>';
+
+  $(document).ready(function() {
+    init();
+  });
+})(jQuery);
+
+$(document).ready(function() {
+  // add comment anchors for all paragraphs that are commentable
+  $('.sphinx-has-comment').comment();
+
+  // highlight search words in search results
+  $("div.context").each(function() {
+    var params = $.getQueryParameters();
+    var terms = (params.q) ? params.q[0].split(/\s+/) : [];
+    var result = $(this);
+    $.each(terms, function() {
+      result.highlightText(this.toLowerCase(), 'highlighted');
+    });
+  });
+
+  // directly open comment window if requested
+  var anchor = document.location.hash;
+  if (anchor.substring(0, 9) == '#comment-') {
+    $('#ao' + anchor.substring(9)).click();
+    document.location.hash = '#s' + anchor.substring(9);
+  }
+});
diff --git a/docs/codebase/_build/html/apps.html b/docs/codebase/_build/html/apps.html
new file mode 100644
index 0000000000000000000000000000000000000000..aeaef78f4be8141b68a7f3feb2d6275f4d7e6109
--- /dev/null
+++ b/docs/codebase/_build/html/apps.html
@@ -0,0 +1,249 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Apps &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="genindex.html"/>
+        <link rel="search" title="Search" href="search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="index.html"/>
+        <link rel="next" title="scipost" href="apps/scipost.html"/>
+        <link rel="prev" title="Maintenance of SciPost documentation" href="maintenance/docs.html"/> 
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Apps</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="index.html">Docs</a> &raquo;</li>
+      
+    <li>Apps</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="_sources/apps.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="apps">
+<h1>Apps<a class="headerlink" href="#apps" title="Permalink to this headline">¶</a></h1>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="apps/scipost.html">scipost</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/scipost.html#module-scipost.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/scipost.html#module-scipost.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps/submissions.html">submissions</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/submissions.html#module-submissions.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/submissions.html#module-submissions.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps/journals.html">journals</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/journals.html#module-journals.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/journals.html#module-journals.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps/comments.html">comments</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/comments.html#module-comments.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/comments.html#module-comments.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps/commentaries.html">commentaries</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/commentaries.html#module-commentaries.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/commentaries.html#module-commentaries.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps/theses.html">theses</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/theses.html#module-theses.models">Models</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/theses.html#module-theses.views">Views</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="apps/scipost.html" class="btn btn-neutral float-right" title="scipost" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="maintenance/docs.html" class="btn btn-neutral" title="Maintenance of SciPost documentation" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/commentaries.html b/docs/codebase/_build/html/apps/commentaries.html
new file mode 100644
index 0000000000000000000000000000000000000000..98b8aed7385f248206cac7d14acb0a90476effd5
--- /dev/null
+++ b/docs/codebase/_build/html/apps/commentaries.html
@@ -0,0 +1,259 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>commentaries &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="next" title="theses" href="theses.html"/>
+        <link rel="prev" title="comments" href="comments.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="comments.html">comments</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">commentaries</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-commentaries.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-commentaries.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>commentaries</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/commentaries.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="commentaries">
+<h1>commentaries<a class="headerlink" href="#commentaries" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-commentaries.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-commentaries.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="commentaries.models.Commentary">
+<em class="property">class </em><code class="descclassname">commentaries.models.</code><code class="descname">Commentary</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/commentaries/models.html#Commentary"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#commentaries.models.Commentary" title="Permalink to this definition">¶</a></dt>
+<dd><p>A Commentary contains all the contents of a SciPost Commentary page for a given publication.</p>
+<dl class="method">
+<dt id="commentaries.models.Commentary.parse_links_into_urls">
+<code class="descname">parse_links_into_urls</code><span class="sig-paren">(</span><em>commit=True</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/commentaries/models.html#Commentary.parse_links_into_urls"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#commentaries.models.Commentary.parse_links_into_urls" title="Permalink to this definition">¶</a></dt>
+<dd><p>Takes the arXiv nr or DOI and turns it into the urls</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-commentaries.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-commentaries.views" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="commentaries.views.comment_on_publication">
+<code class="descclassname">commentaries.views.</code><code class="descname">comment_on_publication</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/commentaries/views.html#comment_on_publication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#commentaries.views.comment_on_publication" title="Permalink to this definition">¶</a></dt>
+<dd><p>This will let authors of an SciPost publication comment on their Publication by
+automatically creating a Commentary page if not exist already.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="commentaries.views.modify_commentary_request">
+<code class="descclassname">commentaries.views.</code><code class="descname">modify_commentary_request</code><span class="sig-paren">(</span><em>request</em>, <em>commentary_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/commentaries/views.html#modify_commentary_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#commentaries.views.modify_commentary_request" title="Permalink to this definition">¶</a></dt>
+<dd><p>Modify a commentary request after vetting with status &#8216;modified&#8217;.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="commentaries.views.vet_commentary_requests">
+<code class="descclassname">commentaries.views.</code><code class="descname">vet_commentary_requests</code><span class="sig-paren">(</span><em>request</em>, <em>commentary_id=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/commentaries/views.html#vet_commentary_requests"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#commentaries.views.vet_commentary_requests" title="Permalink to this definition">¶</a></dt>
+<dd><p>Show the first commentary thats awaiting vetting</p>
+</dd></dl>
+
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="theses.html" class="btn btn-neutral float-right" title="theses" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="comments.html" class="btn btn-neutral" title="comments" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/comments.html b/docs/codebase/_build/html/apps/comments.html
new file mode 100644
index 0000000000000000000000000000000000000000..610027f8b47080c29315c553c1890905cab9657a
--- /dev/null
+++ b/docs/codebase/_build/html/apps/comments.html
@@ -0,0 +1,268 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>comments &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="next" title="commentaries" href="commentaries.html"/>
+        <link rel="prev" title="journals" href="journals.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="journals.html">journals</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">comments</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-comments.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-comments.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>comments</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/comments.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="comments">
+<h1>comments<a class="headerlink" href="#comments" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-comments.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-comments.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="comments.models.Comment">
+<em class="property">class </em><code class="descclassname">comments.models.</code><code class="descname">Comment</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/comments/models.html#Comment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#comments.models.Comment" title="Permalink to this definition">¶</a></dt>
+<dd><p>A Comment is an unsollicited note, submitted by a Contributor,
+on a particular publication or in reply to an earlier Comment.</p>
+<dl class="method">
+<dt id="comments.models.Comment.get_author">
+<code class="descname">get_author</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/comments/models.html#Comment.get_author"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#comments.models.Comment.get_author" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get author, if and only if comment is not anonymous!!!</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="comments.models.Comment.get_author_str">
+<code class="descname">get_author_str</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/comments/models.html#Comment.get_author_str"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#comments.models.Comment.get_author_str" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get author string, if and only if comment is not anonymous!!!</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="comments.models.Comment.relation_to_published">
+<code class="descname">relation_to_published</code><a class="headerlink" href="#comments.models.Comment.relation_to_published" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the Comment relates to a SciPost-published object.
+If it is, return a dict with info on relation to the published object,
+based on Crossref&#8217;s peer review content type.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="comments.models.Comment.title">
+<code class="descname">title</code><a class="headerlink" href="#comments.models.Comment.title" title="Permalink to this definition">¶</a></dt>
+<dd><p>This property is (mainly) used to let Comments get the title of the Submission without
+annoying logic.</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-comments.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-comments.views" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="comments.views.attachment">
+<code class="descclassname">comments.views.</code><code class="descname">attachment</code><span class="sig-paren">(</span><em>request</em>, <em>comment_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/comments/views.html#attachment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#comments.views.attachment" title="Permalink to this definition">¶</a></dt>
+<dd><p>Open/read attachment of Comment if available.</p>
+</dd></dl>
+
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="commentaries.html" class="btn btn-neutral float-right" title="commentaries" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="journals.html" class="btn btn-neutral" title="journals" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/journals.html b/docs/codebase/_build/html/apps/journals.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ff12b2d3988aa0f366aecde41943aac74811741
--- /dev/null
+++ b/docs/codebase/_build/html/apps/journals.html
@@ -0,0 +1,455 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>journals &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="next" title="comments" href="comments.html"/>
+        <link rel="prev" title="submissions" href="submissions.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="submissions.html">submissions</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">journals</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-journals.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-journals.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>journals</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/journals.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="journals">
+<h1>journals<a class="headerlink" href="#journals" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-journals.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-journals.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="journals.models.DOAJDeposit">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">DOAJDeposit</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#DOAJDeposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.DOAJDeposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>For the Directory of Open Access Journals.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Deposit">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Deposit</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Deposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Deposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>Each time a Crossref deposit is made for a Publication,
+a Deposit object instance is created containing the Publication&#8217;s
+current version of the metadata_xml field.
+All deposit history is thus contained here.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.GenericDOIDeposit">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">GenericDOIDeposit</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#GenericDOIDeposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.GenericDOIDeposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>Instances of this class represent Crossref deposits for non-publication
+objects such as Reports, Comments etc.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Issue">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Issue</code><span class="sig-paren">(</span><em>id</em>, <em>in_volume</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>status</em>, <em>doi_label</em>, <em>path</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Issue"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Issue" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="method">
+<dt id="journals.models.Issue.citation_rate">
+<code class="descname">citation_rate</code><span class="sig-paren">(</span><em>tier=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Issue.citation_rate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Issue.citation_rate" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the citation rate in units of nr citations per article per year.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Journal">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Journal</code><span class="sig-paren">(</span><em>id</em>, <em>name</em>, <em>doi_label</em>, <em>issn</em>, <em>active</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Journal"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Journal" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="method">
+<dt id="journals.models.Journal.citation_rate">
+<code class="descname">citation_rate</code><span class="sig-paren">(</span><em>tier=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Journal.citation_rate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Journal.citation_rate" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the citation rate in units of nr citations per article per year.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Publication">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Publication</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Publication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Publication" title="Permalink to this definition">¶</a></dt>
+<dd><p>A Publication is an object directly related to an accepted Submission. It contains metadata,
+the actual publication file, author data, etc. etc.</p>
+<dl class="method">
+<dt id="journals.models.Publication.citation_rate">
+<code class="descname">citation_rate</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Publication.citation_rate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Publication.citation_rate" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the citation rate in units of nr citations per article per year.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.PublicationAuthorsTable">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">PublicationAuthorsTable</code><span class="sig-paren">(</span><em>id</em>, <em>publication</em>, <em>unregistered_author</em>, <em>contributor</em>, <em>order</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#PublicationAuthorsTable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.PublicationAuthorsTable" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Reference">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Reference</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Reference"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Reference" title="Permalink to this definition">¶</a></dt>
+<dd><p>A Refence is a reference used in a specific Publication.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="journals.models.UnregisteredAuthor">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">UnregisteredAuthor</code><span class="sig-paren">(</span><em>id</em>, <em>first_name</em>, <em>last_name</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#UnregisteredAuthor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.UnregisteredAuthor" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="class">
+<dt id="journals.models.Volume">
+<em class="property">class </em><code class="descclassname">journals.models.</code><code class="descname">Volume</code><span class="sig-paren">(</span><em>id</em>, <em>in_journal</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Volume"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Volume" title="Permalink to this definition">¶</a></dt>
+<dd><dl class="method">
+<dt id="journals.models.Volume.citation_rate">
+<code class="descname">citation_rate</code><span class="sig-paren">(</span><em>tier=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/models.html#Volume.citation_rate"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.models.Volume.citation_rate" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the citation rate in units of nr citations per article per year.</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-journals.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-journals.views" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="journals.views.accepted">
+<code class="descclassname">journals.views.</code><code class="descname">accepted</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#accepted"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.accepted" title="Permalink to this definition">¶</a></dt>
+<dd><p>Display page for submissions to SciPost Physics which
+have been accepted but are not yet published.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.add_associated_grant">
+<code class="descclassname">journals.views.</code><code class="descname">add_associated_grant</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#add_associated_grant"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.add_associated_grant" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by an Editorial Administrator.
+This associates a grant from the database to this publication.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.add_author">
+<code class="descclassname">journals.views.</code><code class="descname">add_author</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em>, <em>contributor_id=None</em>, <em>unregistered_author_id=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#add_author"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.add_author" title="Permalink to this definition">¶</a></dt>
+<dd><p>If not all authors are registered Contributors or if they have not
+all claimed authorship, this method allows editorial administrators
+to associated them to the publication.
+This is important for the Crossref metadata, in which all authors must appear.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.add_generic_funder">
+<code class="descclassname">journals.views.</code><code class="descname">add_generic_funder</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#add_generic_funder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.add_generic_funder" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by an Editorial Administrator.
+This associates a funder (generic, not via grant) from the database to this publication.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.create_citation_list_metadata">
+<code class="descclassname">journals.views.</code><code class="descname">create_citation_list_metadata</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#create_citation_list_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.create_citation_list_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by an Editorial Administrator.
+This populates the citation_list dictionary entry
+in the metadata field in a Publication instance.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.create_funding_info_metadata">
+<code class="descclassname">journals.views.</code><code class="descname">create_funding_info_metadata</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#create_funding_info_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.create_funding_info_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by an Editorial Administrator.
+This populates the funding_info dictionary entry
+in the metadata field in a Publication instance.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.create_metadata_xml">
+<code class="descclassname">journals.views.</code><code class="descname">create_metadata_xml</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#create_metadata_xml"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.create_metadata_xml" title="Permalink to this definition">¶</a></dt>
+<dd><p>To be called by an EdAdmin after the citation_list,
+funding_info entries have been filled.
+Populates the metadata_xml field of a Publication instance.
+The contents can then be sent to Crossref for registration.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.email_object_made_citable">
+<code class="descclassname">journals.views.</code><code class="descname">email_object_made_citable</code><span class="sig-paren">(</span><em>request</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#email_object_made_citable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.email_object_made_citable" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method sends an email to the author of a Report or a Comment,
+to notify that the object has been made citable (doi registered).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.generic_metadata_xml_deposit">
+<code class="descclassname">journals.views.</code><code class="descname">generic_metadata_xml_deposit</code><span class="sig-paren">(</span><em>request</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#generic_metadata_xml_deposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.generic_metadata_xml_deposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method creates the metadata for non-Publication objects
+such as Reports and Comments, and deposits the metadata to
+Crossref.
+If there exists a relation to a SciPost-published object,
+the deposit uses Crossref&#8217;s peer review content type.
+Otherwise the deposit is done as a dataset.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.initiate_publication">
+<code class="descclassname">journals.views.</code><code class="descname">initiate_publication</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#initiate_publication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.initiate_publication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by an Editorial Administrator.
+Publish the manuscript after proofs have been accepted.
+This method prefills a ValidatePublicationForm for further
+processing (verification in validate_publication method).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.journals">
+<code class="descclassname">journals.views.</code><code class="descname">journals</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#journals"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.journals" title="Permalink to this definition">¶</a></dt>
+<dd><p>Main landing page for Journals application.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.manage_comment_metadata">
+<code class="descclassname">journals.views.</code><code class="descname">manage_comment_metadata</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#manage_comment_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.manage_comment_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>This page offers Editorial Administrators tools for managing
+the metadata of Comments.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.manage_report_metadata">
+<code class="descclassname">journals.views.</code><code class="descname">manage_report_metadata</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#manage_report_metadata"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.manage_report_metadata" title="Permalink to this definition">¶</a></dt>
+<dd><p>This page offers Editorial Administrators tools for managing
+the metadata of Reports.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.metadata_DOAJ_deposit">
+<code class="descclassname">journals.views.</code><code class="descname">metadata_DOAJ_deposit</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#metadata_DOAJ_deposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.metadata_DOAJ_deposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>DOAJ metadata deposit.
+Makes use of the python requests module.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.metadata_xml_deposit">
+<code class="descclassname">journals.views.</code><code class="descname">metadata_xml_deposit</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em>, <em>option='test'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#metadata_xml_deposit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.metadata_xml_deposit" title="Permalink to this definition">¶</a></dt>
+<dd><p>Crossref metadata deposit.
+If test==True, test the metadata_xml using the Crossref test server.
+Makes use of the python requests module.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.recent">
+<code class="descclassname">journals.views.</code><code class="descname">recent</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#recent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.recent" title="Permalink to this definition">¶</a></dt>
+<dd><p>Display page for the most recent 20 publications in SciPost Physics.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.sign_existing_report">
+<code class="descclassname">journals.views.</code><code class="descname">sign_existing_report</code><span class="sig-paren">(</span><em>request</em>, <em>report_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#sign_existing_report"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.sign_existing_report" title="Permalink to this definition">¶</a></dt>
+<dd><p>Allows the author of a Report, originally submitted anonymously,
+to sign the Report.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.update_references">
+<code class="descclassname">journals.views.</code><code class="descname">update_references</code><span class="sig-paren">(</span><em>request</em>, <em>doi_label</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#update_references"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.update_references" title="Permalink to this definition">¶</a></dt>
+<dd><p>Update the References for a certain Publication.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="journals.views.validate_publication">
+<code class="descclassname">journals.views.</code><code class="descname">validate_publication</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/journals/views.html#validate_publication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#journals.views.validate_publication" title="Permalink to this definition">¶</a></dt>
+<dd><p>This creates a Publication instance from the ValidatePublicationForm,
+pre-filled by the initiate_publication method above.</p>
+</dd></dl>
+
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="comments.html" class="btn btn-neutral float-right" title="comments" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="submissions.html" class="btn btn-neutral" title="submissions" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/scipost.html b/docs/codebase/_build/html/apps/scipost.html
new file mode 100644
index 0000000000000000000000000000000000000000..2ffdbf17cf9808a78dc9a40fafc58d55472b035e
--- /dev/null
+++ b/docs/codebase/_build/html/apps/scipost.html
@@ -0,0 +1,455 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>scipost &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="next" title="submissions" href="submissions.html"/>
+        <link rel="prev" title="Apps" href="../apps.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2 current"><a class="current reference internal" href="#">scipost</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-scipost.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-scipost.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>scipost</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/scipost.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="scipost">
+<h1>scipost<a class="headerlink" href="#scipost" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-scipost.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-scipost.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="scipost.models.AuthorshipClaim">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">AuthorshipClaim</code><span class="sig-paren">(</span><em>id</em>, <em>claimant</em>, <em>publication</em>, <em>submission</em>, <em>commentary</em>, <em>thesislink</em>, <em>vetted_by</em>, <em>status</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#AuthorshipClaim"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.AuthorshipClaim" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.CitationNotification">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">CitationNotification</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#CitationNotification"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.CitationNotification" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.Contributor">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">Contributor</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#Contributor"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.Contributor" title="Permalink to this definition">¶</a></dt>
+<dd><p>All <em>science</em> users of SciPost are Contributors.
+username, password, email, first_name and last_name are inherited from User.</p>
+<dl class="method">
+<dt id="scipost.models.Contributor.generate_key">
+<code class="descname">generate_key</code><span class="sig-paren">(</span><em>feed=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#Contributor.generate_key"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.Contributor.generate_key" title="Permalink to this definition">¶</a></dt>
+<dd><p>Generate and save a new activation_key for the contributor, given a certain feed.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.DraftInvitation">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">DraftInvitation</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#DraftInvitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.DraftInvitation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Draft of an invitation, filled in by an officer.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.EditorialCollege">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">EditorialCollege</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#EditorialCollege"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.EditorialCollege" title="Permalink to this definition">¶</a></dt>
+<dd><p>A SciPost Editorial College for a specific discipline.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.EditorialCollegeFellowship">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">EditorialCollegeFellowship</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#EditorialCollegeFellowship"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.EditorialCollegeFellowship" title="Permalink to this definition">¶</a></dt>
+<dd><p>Editorial College Fellowship connecting Editorial College and Contributors,
+maybe with a limiting start/until date.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.PrecookedEmail">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">PrecookedEmail</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#PrecookedEmail"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.PrecookedEmail" title="Permalink to this definition">¶</a></dt>
+<dd><p>Each instance contains an email template in both plain and html formats.
+Can only be created by Admins.
+For further use in scipost:send_precooked_email method.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.RegistrationInvitation">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">RegistrationInvitation</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#RegistrationInvitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.RegistrationInvitation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.Remark">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">Remark</code><span class="sig-paren">(</span><em>id</em>, <em>contributor</em>, <em>feedback</em>, <em>nomination</em>, <em>motion</em>, <em>submission</em>, <em>recommendation</em>, <em>date</em>, <em>remark</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#Remark"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.Remark" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="class">
+<dt id="scipost.models.UnavailabilityPeriod">
+<em class="property">class </em><code class="descclassname">scipost.models.</code><code class="descname">UnavailabilityPeriod</code><span class="sig-paren">(</span><em>id</em>, <em>contributor</em>, <em>start</em>, <em>end</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#UnavailabilityPeriod"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.UnavailabilityPeriod" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="scipost.models.get_sentinel_user">
+<code class="descclassname">scipost.models.</code><code class="descname">get_sentinel_user</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/models.html#get_sentinel_user"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.models.get_sentinel_user" title="Permalink to this definition">¶</a></dt>
+<dd><p>Temporary fix: eventually the &#8216;to-be-removed-Contributor&#8217; should be
+status: &#8220;deactivated&#8221; and anonymized.
+Fallback user for models relying on Contributor that is being deleted.</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-scipost.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-scipost.views" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="scipost.views.activation">
+<code class="descclassname">scipost.views.</code><code class="descname">activation</code><span class="sig-paren">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#activation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.activation" title="Permalink to this definition">¶</a></dt>
+<dd><p>After registration, an email verification link is sent.
+Once clicked, the account is activated.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.claim_authorships">
+<code class="descclassname">scipost.views.</code><code class="descname">claim_authorships</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#claim_authorships"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.claim_authorships" title="Permalink to this definition">¶</a></dt>
+<dd><p>The system auto-detects potential authorships (of submissions,
+papers subject to commentaries, theses, ...).
+The contributor must confirm/deny authorship from the
+Personal Page.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.contributor_info">
+<code class="descclassname">scipost.views.</code><code class="descname">contributor_info</code><span class="sig-paren">(</span><em>request</em>, <em>contributor_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#contributor_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.contributor_info" title="Permalink to this definition">¶</a></dt>
+<dd><p>All visitors can see a digest of a
+Contributor&#8217;s activities/contributions by clicking
+on the relevant name (in listing headers of Submissions, ...).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.csrf_failure">
+<code class="descclassname">scipost.views.</code><code class="descname">csrf_failure</code><span class="sig-paren">(</span><em>request</em>, <em>reason=''</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#csrf_failure"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.csrf_failure" title="Permalink to this definition">¶</a></dt>
+<dd><p>Custom CSRF Failure. Informing admins via email as well.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.delete_unavailable_period">
+<code class="descclassname">scipost.views.</code><code class="descname">delete_unavailable_period</code><span class="sig-paren">(</span><em>request</em>, <em>period_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#delete_unavailable_period"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.delete_unavailable_period" title="Permalink to this definition">¶</a></dt>
+<dd><p>Delete period unavailable registered.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.email_group_members">
+<code class="descclassname">scipost.views.</code><code class="descname">email_group_members</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#email_group_members"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.email_group_members" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to send bulk emails to (members of) selected groups</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.email_particular">
+<code class="descclassname">scipost.views.</code><code class="descname">email_particular</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#email_particular"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.email_particular" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to send emails to individuals (registered or not)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.index">
+<code class="descclassname">scipost.views.</code><code class="descname">index</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#index"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.index" title="Permalink to this definition">¶</a></dt>
+<dd><p>Main page.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.invitation">
+<code class="descclassname">scipost.views.</code><code class="descname">invitation</code><span class="sig-paren">(</span><em>request</em>, <em>key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#invitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.invitation" title="Permalink to this definition">¶</a></dt>
+<dd><p>If a scientist has recieved an invitation (RegistrationInvitation)
+he/she will finish it&#8217;s invitation via still view which will prefill
+the default registration form.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.is_registered">
+<code class="descclassname">scipost.views.</code><code class="descname">is_registered</code><span class="sig-paren">(</span><em>user</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#is_registered"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.is_registered" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method checks if user is activated assuming an validated user
+has at least one permission group (<cite>Registered Contributor</cite> or <cite>Partner Accounts</cite>).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.login_view">
+<code class="descclassname">scipost.views.</code><code class="descname">login_view</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#login_view"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.login_view" title="Permalink to this definition">¶</a></dt>
+<dd><p>This view shows and processes a user&#8217;s login session.</p>
+<p>The function based method login() is deprecated from
+Django 1.11 and replaced by Class Based Views.</p>
+<p>See:
+<a class="reference external" href="https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.logout_view">
+<code class="descclassname">scipost.views.</code><code class="descname">logout_view</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#logout_view"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.logout_view" title="Permalink to this definition">¶</a></dt>
+<dd><p>The function based method logout() is deprecated from
+Django 1.11 and replaced by Class Based Views.</p>
+<p>See:
+<a class="reference external" href="https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.mark_unavailable_period">
+<code class="descclassname">scipost.views.</code><code class="descname">mark_unavailable_period</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#mark_unavailable_period"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.mark_unavailable_period" title="Permalink to this definition">¶</a></dt>
+<dd><p>Mark period unavailable for Contributor using this view.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.personal_page">
+<code class="descclassname">scipost.views.</code><code class="descname">personal_page</code><span class="sig-paren">(</span><em>request</em>, <em>tab='account'</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#personal_page"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.personal_page" title="Permalink to this definition">¶</a></dt>
+<dd><p>The Personal Page is the main view for accessing user functions.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.protected_serve">
+<code class="descclassname">scipost.views.</code><code class="descname">protected_serve</code><span class="sig-paren">(</span><em>request</em>, <em>path</em>, <em>show_indexes=False</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#protected_serve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.protected_serve" title="Permalink to this definition">¶</a></dt>
+<dd><p>Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!
+This will be usefull eg. in the admin pages.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.register">
+<code class="descclassname">scipost.views.</code><code class="descname">register</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#register"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.register" title="Permalink to this definition">¶</a></dt>
+<dd><p>This public registration view shows and processes the form
+that will create new user account requests. After registration
+the Contributor will need to activate its account via the mail
+sent. After activation the user needs to be vetted by the SciPost
+admin.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.registration_requests">
+<code class="descclassname">scipost.views.</code><code class="descname">registration_requests</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#registration_requests"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.registration_requests" title="Permalink to this definition">¶</a></dt>
+<dd><p>List all inactive users. These are users that have filled the registration form,
+but did not yet activate their account using the validation email.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.registration_requests_reset">
+<code class="descclassname">scipost.views.</code><code class="descname">registration_requests_reset</code><span class="sig-paren">(</span><em>request</em>, <em>contributor_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#registration_requests_reset"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.registration_requests_reset" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reset specific activation_key for Contributor and resend activation mail.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.request_new_activation_link">
+<code class="descclassname">scipost.views.</code><code class="descname">request_new_activation_link</code><span class="sig-paren">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#request_new_activation_link"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.request_new_activation_link" title="Permalink to this definition">¶</a></dt>
+<dd><p>Once a user tries to activate its account using the email verification link sent
+and the key has expired, the user redirected to possibly request a new token.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.send_precooked_email">
+<code class="descclassname">scipost.views.</code><code class="descname">send_precooked_email</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#send_precooked_email"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.send_precooked_email" title="Permalink to this definition">¶</a></dt>
+<dd><p>Method to send precooked emails to individuals (registered or not)</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="scipost.views.unsubscribe">
+<code class="descclassname">scipost.views.</code><code class="descname">unsubscribe</code><span class="sig-paren">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/scipost/views.html#unsubscribe"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#scipost.views.unsubscribe" title="Permalink to this definition">¶</a></dt>
+<dd><p>The link to this method is included in all email communications
+with a Contributor. The key used is the original activation key.
+At this link, the Contributor can confirm that he/she does not
+want to receive any non-essential email notifications from SciPost.</p>
+</dd></dl>
+
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="submissions.html" class="btn btn-neutral float-right" title="submissions" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="../apps.html" class="btn btn-neutral" title="Apps" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/submissions.html b/docs/codebase/_build/html/apps/submissions.html
new file mode 100644
index 0000000000000000000000000000000000000000..8dcebf0e9cdd57668ee3d2a11bbf90b0c14ddf79
--- /dev/null
+++ b/docs/codebase/_build/html/apps/submissions.html
@@ -0,0 +1,613 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>submissions &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="next" title="journals" href="journals.html"/>
+        <link rel="prev" title="scipost" href="scipost.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="scipost.html">scipost</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">submissions</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-submissions.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-submissions.views">Views</a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>submissions</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/submissions.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="submissions">
+<h1>submissions<a class="headerlink" href="#submissions" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-submissions.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-submissions.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="submissions.models.EICRecommendation">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">EICRecommendation</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#EICRecommendation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.EICRecommendation" title="Permalink to this definition">¶</a></dt>
+<dd><p>The EICRecommendation is the recommendation of a Submission written by
+the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by
+a subset of Fellows and should contain the actual publication decision.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.EditorialAssignment">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">EditorialAssignment</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#EditorialAssignment"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.EditorialAssignment" title="Permalink to this definition">¶</a></dt>
+<dd><p>EditorialAssignment is a registration for Fellows of their duties of being a
+Editor-in-charge for a specific Submission. This model could start as a invitation only,
+which should then be accepted or declined by the invited.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.EditorialCommunication">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">EditorialCommunication</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#EditorialCommunication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.EditorialCommunication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Each individual communication between Editor-in-charge
+to and from Referees and Authors becomes an instance of this class.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.RefereeInvitation">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">RefereeInvitation</code><span class="sig-paren">(</span><em>id</em>, <em>submission</em>, <em>referee</em>, <em>title</em>, <em>first_name</em>, <em>last_name</em>, <em>email_address</em>, <em>invitation_key</em>, <em>date_invited</em>, <em>invited_by</em>, <em>nr_reminders</em>, <em>date_last_reminded</em>, <em>accepted</em>, <em>date_responded</em>, <em>refusal_reason</em>, <em>fulfilled</em>, <em>cancelled</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#RefereeInvitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.RefereeInvitation" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.Report">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">Report</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#Report"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.Report" title="Permalink to this definition">¶</a></dt>
+<dd><p>Both types of reports, invited or contributed.</p>
+<p>This Report model acts as both a regular <cite>Report</cite> and a <cite>FollowupReport</cite>; A normal Report
+should have all fields required, whereas a FollowupReport only has the <cite>report</cite> field as
+a required field.</p>
+<p>Important note!
+Due to the construction of the two different types within a single model, it is important
+to explicitly implement the perticular differences in for example the form used.</p>
+<dl class="attribute">
+<dt id="submissions.models.Report.associated_published_doi">
+<code class="descname">associated_published_doi</code><a class="headerlink" href="#submissions.models.Report.associated_published_doi" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the Report relates to a SciPost-published object.
+If it is, return the doi of the published object.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Report.is_followup_report">
+<code class="descname">is_followup_report</code><a class="headerlink" href="#submissions.models.Report.is_followup_report" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if current Report is a <cite>FollowupReport</cite>. A Report is a <cite>FollowupReport</cite> if the
+author of the report already has a vetted report in the series of the specific Submission.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="submissions.models.Report.latest_report_from_series">
+<code class="descname">latest_report_from_series</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#Report.latest_report_from_series"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.Report.latest_report_from_series" title="Permalink to this definition">¶</a></dt>
+<dd><p>Get latest Report from the same author for the Submission series.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Report.relation_to_published">
+<code class="descname">relation_to_published</code><a class="headerlink" href="#submissions.models.Report.relation_to_published" title="Permalink to this definition">¶</a></dt>
+<dd><p>Check if the Report relates to a SciPost-published object.
+If it is, return a dict with info on relation to the published object,
+based on Crossref&#8217;s peer review content type.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Report.title">
+<code class="descname">title</code><a class="headerlink" href="#submissions.models.Report.title" title="Permalink to this definition">¶</a></dt>
+<dd><p>This property is (mainly) used to let Comments get the title of the Submission without
+annoying logic.</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.Submission">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">Submission</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#Submission"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.Submission" title="Permalink to this definition">¶</a></dt>
+<dd><p>Submission is a SciPost register of an ArXiv article. This object is the central
+instance for every action, recommendation, communication, etc. etc. that is related to the
+refereeing cycle of a Submission. A possible Publication object is later directly related
+to this Submission instance.</p>
+<dl class="method">
+<dt id="submissions.models.Submission.comments_set_complete">
+<code class="descname">comments_set_complete</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#Submission.comments_set_complete"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.Submission.comments_set_complete" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return comments to Submission, comments on Reports of Submission and
+nested comments related to this Submission.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Submission.other_versions">
+<code class="descname">other_versions</code><a class="headerlink" href="#submissions.models.Submission.other_versions" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return all other versions of the Submission that are publicly accessible.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Submission.other_versions_pool">
+<code class="descname">other_versions_pool</code><a class="headerlink" href="#submissions.models.Submission.other_versions_pool" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return all other versions of the Submission.</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="submissions.models.Submission.thread">
+<code class="descname">thread</code><a class="headerlink" href="#submissions.models.Submission.thread" title="Permalink to this definition">¶</a></dt>
+<dd><p>Return all versions of the Submission with that arxiv id.</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="submissions.models.Submission.touch">
+<code class="descname">touch</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#Submission.touch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.Submission.touch" title="Permalink to this definition">¶</a></dt>
+<dd><p>Update latest activity as a service</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.SubmissionEvent">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">SubmissionEvent</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#SubmissionEvent"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.SubmissionEvent" title="Permalink to this definition">¶</a></dt>
+<dd><p>The SubmissionEvent&#8217;s goal is to act as a messaging/logging model
+for the Submission cycle. Its main audience will be the author(s) and
+the Editor-in-charge of a Submission.</p>
+<p>Be aware!
+Both the author and editor-in-charge will read the submission event.
+Make sure the right text is given to the right event-type, to protect
+the fellow&#8217;s identity.</p>
+</dd></dl>
+
+<dl class="class">
+<dt id="submissions.models.iThenticateReport">
+<em class="property">class </em><code class="descclassname">submissions.models.</code><code class="descname">iThenticateReport</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#iThenticateReport"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.iThenticateReport" title="Permalink to this definition">¶</a></dt>
+<dd><p>iThenticateReport is the SciPost register of an iThenticate report. It saves
+basic information coming from iThenticate into the SciPost database for easy access.</p>
+<dl class="method">
+<dt id="submissions.models.iThenticateReport.get_report_url">
+<code class="descname">get_report_url</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/models.html#iThenticateReport.get_report_url"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.models.iThenticateReport.get_report_url" title="Permalink to this definition">¶</a></dt>
+<dd><p>Request new read-only url from iThenticate and return.</p>
+<p>Note: The read-only link is valid for only 15 minutes, saving may be worthless</p>
+</dd></dl>
+
+</dd></dl>
+
+</div>
+<div class="section" id="module-submissions.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-submissions.views" title="Permalink to this headline">¶</a></h2>
+<dl class="function">
+<dt id="submissions.views.accept_or_decline_ref_invitations">
+<code class="descclassname">submissions.views.</code><code class="descname">accept_or_decline_ref_invitations</code><span class="sig-paren">(</span><em>request</em>, <em>invitation_id=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#accept_or_decline_ref_invitations"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.accept_or_decline_ref_invitations" title="Permalink to this definition">¶</a></dt>
+<dd><p>RefereeInvitations need to be either accepted or declined by the invited user
+using this view. The decision will be taken one invitation at a time.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.add_remark">
+<code class="descclassname">submissions.views.</code><code class="descname">add_remark</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#add_remark"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.add_remark" title="Permalink to this definition">¶</a></dt>
+<dd><p>With this method, an Editorial Fellow or Board Member
+is adding a remark on a Submission.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.assign_submission">
+<code class="descclassname">submissions.views.</code><code class="descname">assign_submission</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#assign_submission"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.assign_submission" title="Permalink to this definition">¶</a></dt>
+<dd><p>Assign Editor-in-charge to Submission.
+Action done by SciPost Administration or Editorial College Administration.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.assignment_failed">
+<code class="descclassname">submissions.views.</code><code class="descname">assignment_failed</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#assignment_failed"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.assignment_failed" title="Permalink to this definition">¶</a></dt>
+<dd><p>No Editorial Fellow has accepted or volunteered to become Editor-in-charge.
+The submission is rejected.
+This method is called from pool.html by an Editorial Administrator.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.assignment_request">
+<code class="descclassname">submissions.views.</code><code class="descname">assignment_request</code><span class="sig-paren">(</span><em>request</em>, <em>assignment_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#assignment_request"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.assignment_request" title="Permalink to this definition">¶</a></dt>
+<dd><p>Process EditorialAssignment acceptance/denial form or show if not submitted.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.assignments">
+<code class="descclassname">submissions.views.</code><code class="descname">assignments</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#assignments"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.assignments" title="Permalink to this definition">¶</a></dt>
+<dd><p>This page provides a Fellow with an explicit task list
+of editorial actions which should be undertaken.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.cancel_ref_invitation">
+<code class="descclassname">submissions.views.</code><code class="descname">cancel_ref_invitation</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#cancel_ref_invitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.cancel_ref_invitation" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method is used by the Editor-in-charge from the editorial_page
+to remove a referee for the list of invited ones.
+It can be used for registered as well as unregistered referees.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.close_refereeing_round">
+<code class="descclassname">submissions.views.</code><code class="descname">close_refereeing_round</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#close_refereeing_round"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.close_refereeing_round" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called by the Editor-in-charge when a satisfactory number of
+reports have been gathered.
+Automatically emails the authors to ask them if they want to
+round off any replies to reports or comments before the
+editorial recommendation is formulated.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.communication">
+<code class="descclassname">submissions.views.</code><code class="descname">communication</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>comtype</em>, <em>referee_id=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#communication"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.communication" title="Permalink to this definition">¶</a></dt>
+<dd><p>Communication between editor-in-charge, author or referee
+occurring during the submission refereeing.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.cycle_form_submit">
+<code class="descclassname">submissions.views.</code><code class="descname">cycle_form_submit</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#cycle_form_submit"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.cycle_form_submit" title="Permalink to this definition">¶</a></dt>
+<dd><p>If Submission is <cite>resubmission_incoming</cite> the EIC should first choose what refereeing
+cycle to choose.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.editorial_page">
+<code class="descclassname">submissions.views.</code><code class="descname">editorial_page</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#editorial_page"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.editorial_page" title="Permalink to this definition">¶</a></dt>
+<dd><p>The central page for the EIC to manage all its Editorial duties.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.editorial_workflow">
+<code class="descclassname">submissions.views.</code><code class="descname">editorial_workflow</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#editorial_workflow"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.editorial_workflow" title="Permalink to this definition">¶</a></dt>
+<dd><p>Summary page for Editorial Fellows, containing a digest
+of the actions to take to handle Submissions.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.eic_recommendation">
+<code class="descclassname">submissions.views.</code><code class="descname">eic_recommendation</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#eic_recommendation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.eic_recommendation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Write EIC Recommendation.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.extend_refereeing_deadline">
+<code class="descclassname">submissions.views.</code><code class="descname">extend_refereeing_deadline</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>days</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#extend_refereeing_deadline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.extend_refereeing_deadline" title="Permalink to this definition">¶</a></dt>
+<dd><p>Extend Refereeing deadline for Submission and open reporting and commenting.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.fix_College_decision">
+<code class="descclassname">submissions.views.</code><code class="descname">fix_College_decision</code><span class="sig-paren">(</span><em>request</em>, <em>rec_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#fix_College_decision"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.fix_College_decision" title="Permalink to this definition">¶</a></dt>
+<dd><p>Terminates the voting on a Recommendation.
+Called by an Editorial Administrator.</p>
+<p># TODO - 2 bugs:</p>
+<p>TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.
+TO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.pool">
+<code class="descclassname">submissions.views.</code><code class="descname">pool</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr=None</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#pool"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.pool" title="Permalink to this definition">¶</a></dt>
+<dd><p>The Submissions pool contains all submissions which are undergoing
+the editorial process, from submission
+to publication acceptance or rejection.
+All members of the Editorial College have access.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.recruit_referee">
+<code class="descclassname">submissions.views.</code><code class="descname">recruit_referee</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#recruit_referee"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.recruit_referee" title="Permalink to this definition">¶</a></dt>
+<dd><p>If the Editor-in-charge does not find the desired referee among Contributors
+(otherwise, the method send_refereeing_invitation below is used instead),
+he/she can invite somebody by providing name + contact details.
+This function emails a registration invitation to this person.
+The pending refereeing invitation is then recognized upon registration,
+using the invitation token.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.ref_invitation_reminder">
+<code class="descclassname">submissions.views.</code><code class="descname">ref_invitation_reminder</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#ref_invitation_reminder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.ref_invitation_reminder" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method is used by the Editor-in-charge from the editorial_page
+when a referee has been invited but hasn&#8217;t answered yet.
+It can be used for registered as well as unregistered referees.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.reformulate_eic_recommendation">
+<code class="descclassname">submissions.views.</code><code class="descname">reformulate_eic_recommendation</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#reformulate_eic_recommendation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.reformulate_eic_recommendation" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reformulate EIC Recommendation.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.remind_Fellows_to_vote">
+<code class="descclassname">submissions.views.</code><code class="descname">remind_Fellows_to_vote</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#remind_Fellows_to_vote"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.remind_Fellows_to_vote" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method sends an email to all Fellow with pending voting duties.
+It must be called by and Editorial Administrator.</p>
+<p>TODO: This reminder function doesn&#8217;t filter per submission?!</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.report_detail_pdf">
+<code class="descclassname">submissions.views.</code><code class="descname">report_detail_pdf</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>report_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#report_detail_pdf"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.report_detail_pdf" title="Permalink to this definition">¶</a></dt>
+<dd><p>Download the PDF of a Report if available.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.reports_accepted_list">
+<code class="descclassname">submissions.views.</code><code class="descname">reports_accepted_list</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#reports_accepted_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.reports_accepted_list" title="Permalink to this definition">¶</a></dt>
+<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile
+in a convenient way.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.select_referee">
+<code class="descclassname">submissions.views.</code><code class="descname">select_referee</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#select_referee"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.select_referee" title="Permalink to this definition">¶</a></dt>
+<dd><p>Select/Invite referees by first listing them here.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.send_refereeing_invitation">
+<code class="descclassname">submissions.views.</code><code class="descname">send_refereeing_invitation</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>contributor_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#send_refereeing_invitation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.send_refereeing_invitation" title="Permalink to this definition">¶</a></dt>
+<dd><p>This method is called by the EIC from the submission&#8217;s editorial_page,
+in the case where the referee is an identified Contributor.
+For a referee who isn&#8217;t a Contributor yet, the method recruit_referee above
+is called instead.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.set_refereeing_deadline">
+<code class="descclassname">submissions.views.</code><code class="descname">set_refereeing_deadline</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#set_refereeing_deadline"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.set_refereeing_deadline" title="Permalink to this definition">¶</a></dt>
+<dd><p>Set Refereeing deadline for Submission and open reporting and commenting if
+the new date is in the future.</p>
+<p>Accessible for: Editor-in-charge and Editorial Administration</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.submission_refereeing_package_pdf">
+<code class="descclassname">submissions.views.</code><code class="descname">submission_refereeing_package_pdf</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#submission_refereeing_package_pdf"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.submission_refereeing_package_pdf" title="Permalink to this definition">¶</a></dt>
+<dd><p>This view let&#8217;s the user download all Report PDF&#8217;s in a single merged PDF.
+The merging takes places every time its downloaded to make sure all available report PDF&#8217;s
+are included and the EdColAdmin doesn&#8217;t have to compile the package every time again.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.submit_report">
+<code class="descclassname">submissions.views.</code><code class="descname">submit_report</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#submit_report"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.submit_report" title="Permalink to this definition">¶</a></dt>
+<dd><p>A form to submit a report on a submission will be shown and processed here.</p>
+<p>Important checks to be aware of include an author check for the submission,
+has the reporting deadline not been reached yet and does there exist any invitation
+for the current user on this submission.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.treated_submissions_list">
+<code class="descclassname">submissions.views.</code><code class="descname">treated_submissions_list</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#treated_submissions_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.treated_submissions_list" title="Permalink to this definition">¶</a></dt>
+<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile
+in a convenient way.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.vet_submitted_report">
+<code class="descclassname">submissions.views.</code><code class="descname">vet_submitted_report</code><span class="sig-paren">(</span><em>request</em>, <em>report_id</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#vet_submitted_report"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.vet_submitted_report" title="Permalink to this definition">¶</a></dt>
+<dd><p>Report with status <cite>unvetted</cite> will be shown. A user may only vet reports of submissions
+he/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</p>
+<p>After vetting an email is sent to the report author, bcc EIC. If report
+has not been refused, the submission author is also mailed.</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.vet_submitted_reports_list">
+<code class="descclassname">submissions.views.</code><code class="descname">vet_submitted_reports_list</code><span class="sig-paren">(</span><em>request</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#vet_submitted_reports_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.vet_submitted_reports_list" title="Permalink to this definition">¶</a></dt>
+<dd><p>Reports with status <cite>unvetted</cite> will be shown (oldest first).</p>
+</dd></dl>
+
+<dl class="function">
+<dt id="submissions.views.volunteer_as_EIC">
+<code class="descclassname">submissions.views.</code><code class="descname">volunteer_as_EIC</code><span class="sig-paren">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/submissions/views.html#volunteer_as_EIC"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#submissions.views.volunteer_as_EIC" title="Permalink to this definition">¶</a></dt>
+<dd><p>Called when a Fellow volunteers while perusing the submissions pool.
+This is an adapted version of the assignment_request method.</p>
+</dd></dl>
+
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="journals.html" class="btn btn-neutral float-right" title="journals" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="scipost.html" class="btn btn-neutral" title="scipost" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/apps/theses.html b/docs/codebase/_build/html/apps/theses.html
new file mode 100644
index 0000000000000000000000000000000000000000..3a78c40dc88693a46540897bd3a2a9a73797cde9
--- /dev/null
+++ b/docs/codebase/_build/html/apps/theses.html
@@ -0,0 +1,231 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>theses &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Apps" href="../apps.html"/>
+        <link rel="prev" title="commentaries" href="commentaries.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="../maintenance.html">Maintenance</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="../apps.html">Apps</a><ul class="current">
+<li class="toctree-l2"><a class="reference internal" href="scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="commentaries.html">commentaries</a></li>
+<li class="toctree-l2 current"><a class="current reference internal" href="#">theses</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#module-theses.models">Models</a></li>
+<li class="toctree-l3"><a class="reference internal" href="#module-theses.views">Views</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../apps.html">Apps</a> &raquo;</li>
+      
+    <li>theses</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/apps/theses.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="theses">
+<h1>theses<a class="headerlink" href="#theses" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="module-theses.models">
+<span id="models"></span><h2>Models<a class="headerlink" href="#module-theses.models" title="Permalink to this headline">¶</a></h2>
+<dl class="class">
+<dt id="theses.models.ThesisLink">
+<em class="property">class </em><code class="descclassname">theses.models.</code><code class="descname">ThesisLink</code><span class="sig-paren">(</span><em>*args</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/theses/models.html#ThesisLink"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#theses.models.ThesisLink" title="Permalink to this definition">¶</a></dt>
+<dd><p>An URL pointing to a thesis</p>
+</dd></dl>
+
+</div>
+<div class="section" id="module-theses.views">
+<span id="views"></span><h2>Views<a class="headerlink" href="#module-theses.views" title="Permalink to this headline">¶</a></h2>
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+      
+        <a href="commentaries.html" class="btn btn-neutral" title="commentaries" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/genindex.html b/docs/codebase/_build/html/genindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..bf74107028af6550c2d5c3b6b665b89a89970a35
--- /dev/null
+++ b/docs/codebase/_build/html/genindex.html
@@ -0,0 +1,915 @@
+
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Index &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="#"/>
+        <link rel="search" title="Search" href="search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="index.html"/> 
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="index.html">Docs</a> &raquo;</li>
+      
+    <li></li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#A"><strong>A</strong></a>
+ | <a href="#C"><strong>C</strong></a>
+ | <a href="#D"><strong>D</strong></a>
+ | <a href="#E"><strong>E</strong></a>
+ | <a href="#F"><strong>F</strong></a>
+ | <a href="#G"><strong>G</strong></a>
+ | <a href="#I"><strong>I</strong></a>
+ | <a href="#J"><strong>J</strong></a>
+ | <a href="#L"><strong>L</strong></a>
+ | <a href="#M"><strong>M</strong></a>
+ | <a href="#O"><strong>O</strong></a>
+ | <a href="#P"><strong>P</strong></a>
+ | <a href="#R"><strong>R</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#U"><strong>U</strong></a>
+ | <a href="#V"><strong>V</strong></a>
+ 
+</div>
+<h2 id="A">A</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.accept_or_decline_ref_invitations">accept_or_decline_ref_invitations() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.accepted">accepted() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.activation">activation() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.add_associated_grant">add_associated_grant() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.add_author">add_author() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.add_generic_funder">add_generic_funder() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.add_remark">add_remark() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.assign_submission">assign_submission() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.assignment_failed">assignment_failed() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.assignment_request">assignment_request() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.assignments">assignments() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.Report.associated_published_doi">associated_published_doi (submissions.models.Report attribute)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#comments.views.attachment">attachment() (in module comments.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.AuthorshipClaim">AuthorshipClaim (class in scipost.models)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="C">C</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.cancel_ref_invitation">cancel_ref_invitation() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Issue.citation_rate">citation_rate() (journals.models.Issue method)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="apps/journals.html#journals.models.Journal.citation_rate">(journals.models.Journal method)</a>
+  </dt>
+
+        
+  <dt><a href="apps/journals.html#journals.models.Publication.citation_rate">(journals.models.Publication method)</a>
+  </dt>
+
+        
+  <dt><a href="apps/journals.html#journals.models.Volume.citation_rate">(journals.models.Volume method)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="apps/scipost.html#scipost.models.CitationNotification">CitationNotification (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.claim_authorships">claim_authorships() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.close_refereeing_round">close_refereeing_round() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#comments.models.Comment">Comment (class in comments.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/commentaries.html#commentaries.views.comment_on_publication">comment_on_publication() (in module commentaries.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/commentaries.html#module-commentaries.models">commentaries.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/commentaries.html#module-commentaries.views">commentaries.views (module)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/commentaries.html#commentaries.models.Commentary">Commentary (class in commentaries.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#module-comments.models">comments.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#module-comments.views">comments.views (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission.comments_set_complete">comments_set_complete() (submissions.models.Submission method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.communication">communication() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.Contributor">Contributor (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.contributor_info">contributor_info() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.create_citation_list_metadata">create_citation_list_metadata() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.create_funding_info_metadata">create_funding_info_metadata() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.create_metadata_xml">create_metadata_xml() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.csrf_failure">csrf_failure() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.cycle_form_submit">cycle_form_submit() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="D">D</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.views.delete_unavailable_period">delete_unavailable_period() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Deposit">Deposit (class in journals.models)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.models.DOAJDeposit">DOAJDeposit (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.DraftInvitation">DraftInvitation (class in scipost.models)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="E">E</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.editorial_page">editorial_page() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.editorial_workflow">editorial_workflow() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.EditorialAssignment">EditorialAssignment (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.EditorialCollege">EditorialCollege (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.EditorialCollegeFellowship">EditorialCollegeFellowship (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.EditorialCommunication">EditorialCommunication (class in submissions.models)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.eic_recommendation">eic_recommendation() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.EICRecommendation">EICRecommendation (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.email_group_members">email_group_members() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.email_object_made_citable">email_object_made_citable() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.email_particular">email_particular() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.extend_refereeing_deadline">extend_refereeing_deadline() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="F">F</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.fix_College_decision">fix_College_decision() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="G">G</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.models.Contributor.generate_key">generate_key() (scipost.models.Contributor method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.generic_metadata_xml_deposit">generic_metadata_xml_deposit() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.GenericDOIDeposit">GenericDOIDeposit (class in journals.models)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/comments.html#comments.models.Comment.get_author">get_author() (comments.models.Comment method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#comments.models.Comment.get_author_str">get_author_str() (comments.models.Comment method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.iThenticateReport.get_report_url">get_report_url() (submissions.models.iThenticateReport method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.models.get_sentinel_user">get_sentinel_user() (in module scipost.models)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="I">I</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.views.index">index() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.initiate_publication">initiate_publication() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.invitation">invitation() (in module scipost.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.models.Report.is_followup_report">is_followup_report (submissions.models.Report attribute)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.is_registered">is_registered() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Issue">Issue (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.iThenticateReport">iThenticateReport (class in submissions.models)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="J">J</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.models.Journal">Journal (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.journals">journals() (in module journals.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#module-journals.models">journals.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#module-journals.views">journals.views (module)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="L">L</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.models.Report.latest_report_from_series">latest_report_from_series() (submissions.models.Report method)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.views.login_view">login_view() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.logout_view">logout_view() (in module scipost.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="M">M</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.views.manage_comment_metadata">manage_comment_metadata() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.manage_report_metadata">manage_report_metadata() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.mark_unavailable_period">mark_unavailable_period() (in module scipost.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.views.metadata_DOAJ_deposit">metadata_DOAJ_deposit() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.metadata_xml_deposit">metadata_xml_deposit() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/commentaries.html#commentaries.views.modify_commentary_request">modify_commentary_request() (in module commentaries.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="O">O</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission.other_versions">other_versions (submissions.models.Submission attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission.other_versions_pool">other_versions_pool (submissions.models.Submission attribute)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="P">P</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/commentaries.html#commentaries.models.Commentary.parse_links_into_urls">parse_links_into_urls() (commentaries.models.Commentary method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.personal_page">personal_page() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.pool">pool() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.models.PrecookedEmail">PrecookedEmail (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.protected_serve">protected_serve() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Publication">Publication (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.PublicationAuthorsTable">PublicationAuthorsTable (class in journals.models)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="R">R</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.views.recent">recent() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.recruit_referee">recruit_referee() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.ref_invitation_reminder">ref_invitation_reminder() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.RefereeInvitation">RefereeInvitation (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Reference">Reference (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.reformulate_eic_recommendation">reformulate_eic_recommendation() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.register">register() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.registration_requests">registration_requests() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.registration_requests_reset">registration_requests_reset() (in module scipost.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.models.RegistrationInvitation">RegistrationInvitation (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/comments.html#comments.models.Comment.relation_to_published">relation_to_published (comments.models.Comment attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="apps/submissions.html#submissions.models.Report.relation_to_published">(submissions.models.Report attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="apps/scipost.html#scipost.models.Remark">Remark (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.remind_Fellows_to_vote">remind_Fellows_to_vote() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.Report">Report (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.report_detail_pdf">report_detail_pdf() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.reports_accepted_list">reports_accepted_list() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.request_new_activation_link">request_new_activation_link() (in module scipost.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="S">S</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#module-scipost.models">scipost.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#module-scipost.views">scipost.views (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.select_referee">select_referee() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/scipost.html#scipost.views.send_precooked_email">send_precooked_email() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.send_refereeing_invitation">send_refereeing_invitation() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.set_refereeing_deadline">set_refereeing_deadline() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.views.sign_existing_report">sign_existing_report() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission">Submission (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.submission_refereeing_package_pdf">submission_refereeing_package_pdf() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.SubmissionEvent">SubmissionEvent (class in submissions.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#module-submissions.models">submissions.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#module-submissions.views">submissions.views (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.submit_report">submit_report() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="T">T</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/theses.html#module-theses.models">theses.models (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/theses.html#module-theses.views">theses.views (module)</a>
+  </dt>
+
+      
+  <dt><a href="apps/theses.html#theses.models.ThesisLink">ThesisLink (class in theses.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission.thread">thread (submissions.models.Submission attribute)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/comments.html#comments.models.Comment.title">title (comments.models.Comment attribute)</a>
+  </dt>
+
+      <dd><dl>
+        
+  <dt><a href="apps/submissions.html#submissions.models.Report.title">(submissions.models.Report attribute)</a>
+  </dt>
+
+      </dl></dd>
+      
+  <dt><a href="apps/submissions.html#submissions.models.Submission.touch">touch() (submissions.models.Submission method)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.treated_submissions_list">treated_submissions_list() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="U">U</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.models.UnavailabilityPeriod">UnavailabilityPeriod (class in scipost.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.UnregisteredAuthor">UnregisteredAuthor (class in journals.models)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/scipost.html#scipost.views.unsubscribe">unsubscribe() (in module scipost.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.views.update_references">update_references() (in module journals.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+<h2 id="V">V</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/journals.html#journals.views.validate_publication">validate_publication() (in module journals.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/commentaries.html#commentaries.views.vet_commentary_requests">vet_commentary_requests() (in module commentaries.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.vet_submitted_report">vet_submitted_report() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+  <td style="width: 33%" valign="top"><dl>
+      
+  <dt><a href="apps/submissions.html#submissions.views.vet_submitted_reports_list">vet_submitted_reports_list() (in module submissions.views)</a>
+  </dt>
+
+      
+  <dt><a href="apps/journals.html#journals.models.Volume">Volume (class in journals.models)</a>
+  </dt>
+
+      
+  <dt><a href="apps/submissions.html#submissions.views.volunteer_as_EIC">volunteer_as_EIC() (in module submissions.views)</a>
+  </dt>
+
+  </dl></td>
+</tr></table>
+
+
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/index.html b/docs/codebase/_build/html/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..28df8cf838bdd9f195d7a0ab404df2db5309f3c0
--- /dev/null
+++ b/docs/codebase/_build/html/index.html
@@ -0,0 +1,230 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Welcome to SciPost’s codebase documentation &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="genindex.html"/>
+        <link rel="search" title="Search" href="search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="#"/>
+        <link rel="next" title="Maintenance" href="maintenance.html"/> 
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="#" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="#">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="#">Docs</a> &raquo;</li>
+      
+    <li>Welcome to SciPost&#8217;s codebase documentation</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="_sources/index.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="welcome-to-scipost-s-codebase-documentation">
+<h1>Welcome to SciPost&#8217;s codebase documentation<a class="headerlink" href="#welcome-to-scipost-s-codebase-documentation" title="Permalink to this headline">¶</a></h1>
+<p>Contents:</p>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="maintenance/docs.html">Maintenance of SciPost documentation</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="apps/scipost.html">scipost</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/submissions.html">submissions</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/journals.html">journals</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/comments.html">comments</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/commentaries.html">commentaries</a></li>
+<li class="toctree-l2"><a class="reference internal" href="apps/theses.html">theses</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="indices-and-tables">
+<h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1>
+<ul class="simple">
+<li><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></li>
+<li><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></li>
+<li><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></li>
+</ul>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="maintenance.html" class="btn btn-neutral float-right" title="Maintenance" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/maintenance.html b/docs/codebase/_build/html/maintenance.html
new file mode 100644
index 0000000000000000000000000000000000000000..b4c1f00f1a45487197315ac2fa616b5ef0099fe4
--- /dev/null
+++ b/docs/codebase/_build/html/maintenance.html
@@ -0,0 +1,219 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Maintenance &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="genindex.html"/>
+        <link rel="search" title="Search" href="search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="index.html"/>
+        <link rel="next" title="Maintenance of SciPost documentation" href="maintenance/docs.html"/>
+        <link rel="prev" title="Welcome to SciPost’s codebase documentation" href="index.html"/> 
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Maintenance</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="maintenance/docs.html">Maintenance of SciPost documentation</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="index.html">Docs</a> &raquo;</li>
+      
+    <li>Maintenance</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="_sources/maintenance.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="maintenance">
+<h1>Maintenance<a class="headerlink" href="#maintenance" title="Permalink to this headline">¶</a></h1>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance/docs.html">Maintenance of SciPost documentation</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="maintenance/docs.html#sphinx-generated-docs">Sphinx-generated docs</a></li>
+<li class="toctree-l2"><a class="reference internal" href="maintenance/docs.html#sphinxdoc-generated-docs-viewable-online">Sphinxdoc-generated docs (viewable online)</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="maintenance/docs.html" class="btn btn-neutral float-right" title="Maintenance of SciPost documentation" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="index.html" class="btn btn-neutral" title="Welcome to SciPost’s codebase documentation" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/maintenance/docs.html b/docs/codebase/_build/html/maintenance/docs.html
new file mode 100644
index 0000000000000000000000000000000000000000..f7238955c9dc36e373a8e3ac131be56148f86ebf
--- /dev/null
+++ b/docs/codebase/_build/html/maintenance/docs.html
@@ -0,0 +1,237 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Maintenance of SciPost documentation &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="../genindex.html"/>
+        <link rel="search" title="Search" href="../search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="../index.html"/>
+        <link rel="up" title="Maintenance" href="../maintenance.html"/>
+        <link rel="next" title="Apps" href="../apps.html"/>
+        <link rel="prev" title="Maintenance" href="../maintenance.html"/> 
+
+  
+  <script src="../_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="../index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul class="current">
+<li class="toctree-l1 current"><a class="reference internal" href="../maintenance.html">Maintenance</a><ul class="current">
+<li class="toctree-l2 current"><a class="current reference internal" href="#">Maintenance of SciPost documentation</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="#sphinx-generated-docs">Sphinx-generated docs</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#generating-the-static-html-files">Generating the static html files</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="#sphinxdoc-generated-docs-viewable-online">Sphinxdoc-generated docs (viewable online)</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="#updating-the-docs">Updating the docs:</a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="../apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="../index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+ 
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="../index.html">Docs</a> &raquo;</li>
+      
+          <li><a href="../maintenance.html">Maintenance</a> &raquo;</li>
+      
+    <li>Maintenance of SciPost documentation</li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+            <a href="../_sources/maintenance/docs.txt" rel="nofollow"> View page source</a>
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <div class="section" id="maintenance-of-scipost-documentation">
+<h1>Maintenance of SciPost documentation<a class="headerlink" href="#maintenance-of-scipost-documentation" title="Permalink to this headline">¶</a></h1>
+<div class="section" id="sphinx-generated-docs">
+<h2>Sphinx-generated docs<a class="headerlink" href="#sphinx-generated-docs" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="generating-the-static-html-files">
+<h3>Generating the static html files<a class="headerlink" href="#generating-the-static-html-files" title="Permalink to this headline">¶</a></h3>
+<p>In the docs folder, invoke <code class="docutils literal"><span class="pre">make</span> <span class="pre">html</span></code>.</p>
+</div>
+</div>
+<div class="section" id="sphinxdoc-generated-docs-viewable-online">
+<h2>Sphinxdoc-generated docs (viewable online)<a class="headerlink" href="#sphinxdoc-generated-docs-viewable-online" title="Permalink to this headline">¶</a></h2>
+<div class="section" id="updating-the-docs">
+<h3>Updating the docs:<a class="headerlink" href="#updating-the-docs" title="Permalink to this headline">¶</a></h3>
+<p>Use the management command <code class="docutils literal"><span class="pre">python</span> <span class="pre">manage.py</span> <span class="pre">updatedoc</span> <span class="pre">-b</span> <span class="pre">&lt;project-slug&gt;</span></code> with slugs <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>.</p>
+</div>
+</div>
+</div>
+
+
+           </div>
+          </div>
+          <footer>
+  
+    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
+      
+        <a href="../apps.html" class="btn btn-neutral float-right" title="Apps" accesskey="n">Next <span class="fa fa-arrow-circle-right"></span></a>
+      
+      
+        <a href="../maintenance.html" class="btn btn-neutral" title="Maintenance" accesskey="p"><span class="fa fa-arrow-circle-left"></span> Previous</a>
+      
+    </div>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'../',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="../_static/jquery.js"></script>
+      <script type="text/javascript" src="../_static/underscore.js"></script>
+      <script type="text/javascript" src="../_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="../_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/objects.inv b/docs/codebase/_build/html/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..64aa083dc0d9588e998869dfecb97ea0856d8ac0
Binary files /dev/null and b/docs/codebase/_build/html/objects.inv differ
diff --git a/docs/codebase/_build/html/py-modindex.html b/docs/codebase/_build/html/py-modindex.html
new file mode 100644
index 0000000000000000000000000000000000000000..7c89cfbccd1058b137192c34603623ba569dcedd
--- /dev/null
+++ b/docs/codebase/_build/html/py-modindex.html
@@ -0,0 +1,314 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Python Module Index &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="genindex.html"/>
+        <link rel="search" title="Search" href="search.html"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="index.html"/>
+ 
+
+
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="search.html" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="index.html">Docs</a> &raquo;</li>
+      
+    <li></li>
+      <li class="wy-breadcrumbs-aside">
+        
+          
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+
+   <h1>Python Module Index</h1>
+
+   <div class="modindex-jumpbox">
+   <a href="#cap-c"><strong>c</strong></a> | 
+   <a href="#cap-j"><strong>j</strong></a> | 
+   <a href="#cap-s"><strong>s</strong></a> | 
+   <a href="#cap-t"><strong>t</strong></a>
+   </div>
+
+   <table class="indextable modindextable" cellspacing="0" cellpadding="2">
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-c"><td></td><td>
+       <strong>c</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">commentaries</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/commentaries.html#module-commentaries.models"><code class="xref">commentaries.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/commentaries.html#module-commentaries.views"><code class="xref">commentaries.views</code></a></td><td>
+       <em></em></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-2" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">comments</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-2">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/comments.html#module-comments.models"><code class="xref">comments.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-2">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/comments.html#module-comments.views"><code class="xref">comments.views</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-j"><td></td><td>
+       <strong>j</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-3" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">journals</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-3">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/journals.html#module-journals.models"><code class="xref">journals.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-3">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/journals.html#module-journals.views"><code class="xref">journals.views</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-s"><td></td><td>
+       <strong>s</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-4" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">scipost</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-4">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/scipost.html#module-scipost.models"><code class="xref">scipost.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-4">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/scipost.html#module-scipost.views"><code class="xref">scipost.views</code></a></td><td>
+       <em></em></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-5" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">submissions</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-5">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/submissions.html#module-submissions.models"><code class="xref">submissions.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-5">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/submissions.html#module-submissions.views"><code class="xref">submissions.views</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-t"><td></td><td>
+       <strong>t</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-6" style="display: none" alt="-" /></td>
+       <td>
+       <code class="xref">theses</code></td><td>
+       <em></em></td></tr>
+     <tr class="cg-6">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/theses.html#module-theses.models"><code class="xref">theses.models</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-6">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="apps/theses.html#module-theses.views"><code class="xref">theses.views</code></a></td><td>
+       <em></em></td></tr>
+   </table>
+
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+   
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/search.html b/docs/codebase/_build/html/search.html
new file mode 100644
index 0000000000000000000000000000000000000000..3cb2ef2119ba4941e104bca4891b671b44c127bf
--- /dev/null
+++ b/docs/codebase/_build/html/search.html
@@ -0,0 +1,209 @@
+
+
+<!DOCTYPE html>
+<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
+<head>
+  <meta charset="utf-8">
+  
+  <meta name="viewport" content="width=device-width, initial-scale=1.0">
+  
+  <title>Search &mdash; SciPost 1.0 documentation</title>
+  
+
+  
+  
+
+  
+
+  
+  
+    
+
+  
+
+  
+  
+    <link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
+  
+
+  
+
+  
+        <link rel="index" title="Index"
+              href="genindex.html"/>
+        <link rel="search" title="Search" href="#"/>
+    <link rel="top" title="SciPost 1.0 documentation" href="index.html"/> 
+
+  
+  <script src="_static/js/modernizr.min.js"></script>
+
+</head>
+
+<body class="wy-body-for-nav" role="document">
+
+  <div class="wy-grid-for-nav">
+
+    
+    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
+      <div class="wy-side-scroll">
+        <div class="wy-side-nav-search">
+          
+
+          
+            <a href="index.html" class="icon icon-home"> SciPost
+          
+
+          
+          </a>
+
+          
+            
+            
+              <div class="version">
+                1.0
+              </div>
+            
+          
+
+          
+<div role="search">
+  <form id="rtd-search-form" class="wy-form" action="#" method="get">
+    <input type="text" name="q" placeholder="Search docs" />
+    <input type="hidden" name="check_keywords" value="yes" />
+    <input type="hidden" name="area" value="default" />
+  </form>
+</div>
+
+          
+        </div>
+
+        <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
+          
+            
+            
+                <ul>
+<li class="toctree-l1"><a class="reference internal" href="maintenance.html">Maintenance</a></li>
+<li class="toctree-l1"><a class="reference internal" href="apps.html">Apps</a></li>
+</ul>
+
+            
+          
+        </div>
+      </div>
+    </nav>
+
+    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
+
+      
+      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
+        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
+        <a href="index.html">SciPost</a>
+      </nav>
+
+
+      
+      <div class="wy-nav-content">
+        <div class="rst-content">
+          
+
+
+
+
+
+<div role="navigation" aria-label="breadcrumbs navigation">
+  <ul class="wy-breadcrumbs">
+    <li><a href="index.html">Docs</a> &raquo;</li>
+      
+    <li></li>
+      <li class="wy-breadcrumbs-aside">
+        
+      </li>
+  </ul>
+  <hr/>
+</div>
+          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
+           <div itemprop="articleBody">
+            
+  <noscript>
+  <div id="fallback" class="admonition warning">
+    <p class="last">
+      Please activate JavaScript to enable the search
+      functionality.
+    </p>
+  </div>
+  </noscript>
+
+  
+  <div id="search-results">
+  
+  </div>
+
+           </div>
+          </div>
+          <footer>
+  
+
+  <hr/>
+
+  <div role="contentinfo">
+    <p>
+        &copy; Copyright 2016, Jean-Sébastien Caux.
+
+    </p>
+  </div>
+  Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. 
+
+</footer>
+
+        </div>
+      </div>
+
+    </section>
+
+  </div>
+  
+
+
+  
+
+    <script type="text/javascript">
+        var DOCUMENTATION_OPTIONS = {
+            URL_ROOT:'./',
+            VERSION:'1.0',
+            COLLAPSE_INDEX:false,
+            FILE_SUFFIX:'.html',
+            HAS_SOURCE:  true
+        };
+    </script>
+      <script type="text/javascript" src="_static/jquery.js"></script>
+      <script type="text/javascript" src="_static/underscore.js"></script>
+      <script type="text/javascript" src="_static/doctools.js"></script>
+      <script type="text/javascript" src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
+      <script type="text/javascript" src="_static/searchtools.js"></script>
+
+  
+
+  
+  
+    <script type="text/javascript" src="_static/js/theme.js"></script>
+  
+
+  
+  
+  <script type="text/javascript">
+      jQuery(function () {
+          SphinxRtdTheme.StickyNav.enable();
+      });
+  </script>
+  
+  <script type="text/javascript">
+    jQuery(function() { Search.loadIndex("searchindex.js"); });
+  </script>
+  
+  <script type="text/javascript" id="searchindexloader"></script>
+   
+
+
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/codebase/_build/html/searchindex.js b/docs/codebase/_build/html/searchindex.js
new file mode 100644
index 0000000000000000000000000000000000000000..bdcc3da3e8f3a7c6652db3f635212c2d9a431aa2
--- /dev/null
+++ b/docs/codebase/_build/html/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({envversion:50,filenames:["apps","apps/commentaries","apps/comments","apps/journals","apps/scipost","apps/submissions","apps/theses","index","maintenance","maintenance/docs"],objects:{"commentaries.models":{Commentary:[1,1,1,""]},"commentaries.models.Commentary":{parse_links_into_urls:[1,2,1,""]},"commentaries.views":{comment_on_publication:[1,3,1,""],modify_commentary_request:[1,3,1,""],vet_commentary_requests:[1,3,1,""]},"comments.models":{Comment:[2,1,1,""]},"comments.models.Comment":{get_author:[2,2,1,""],get_author_str:[2,2,1,""],relation_to_published:[2,4,1,""],title:[2,4,1,""]},"comments.views":{attachment:[2,3,1,""]},"journals.models":{DOAJDeposit:[3,1,1,""],Deposit:[3,1,1,""],GenericDOIDeposit:[3,1,1,""],Issue:[3,1,1,""],Journal:[3,1,1,""],Publication:[3,1,1,""],PublicationAuthorsTable:[3,1,1,""],Reference:[3,1,1,""],UnregisteredAuthor:[3,1,1,""],Volume:[3,1,1,""]},"journals.models.Issue":{citation_rate:[3,2,1,""]},"journals.models.Journal":{citation_rate:[3,2,1,""]},"journals.models.Publication":{citation_rate:[3,2,1,""]},"journals.models.Volume":{citation_rate:[3,2,1,""]},"journals.views":{accepted:[3,3,1,""],add_associated_grant:[3,3,1,""],add_author:[3,3,1,""],add_generic_funder:[3,3,1,""],create_citation_list_metadata:[3,3,1,""],create_funding_info_metadata:[3,3,1,""],create_metadata_xml:[3,3,1,""],email_object_made_citable:[3,3,1,""],generic_metadata_xml_deposit:[3,3,1,""],initiate_publication:[3,3,1,""],journals:[3,3,1,""],manage_comment_metadata:[3,3,1,""],manage_report_metadata:[3,3,1,""],metadata_DOAJ_deposit:[3,3,1,""],metadata_xml_deposit:[3,3,1,""],recent:[3,3,1,""],sign_existing_report:[3,3,1,""],update_references:[3,3,1,""],validate_publication:[3,3,1,""]},"scipost.models":{AuthorshipClaim:[4,1,1,""],CitationNotification:[4,1,1,""],Contributor:[4,1,1,""],DraftInvitation:[4,1,1,""],EditorialCollege:[4,1,1,""],EditorialCollegeFellowship:[4,1,1,""],PrecookedEmail:[4,1,1,""],RegistrationInvitation:[4,1,1,""],Remark:[4,1,1,""],UnavailabilityPeriod:[4,1,1,""],get_sentinel_user:[4,3,1,""]},"scipost.models.Contributor":{generate_key:[4,2,1,""]},"scipost.views":{activation:[4,3,1,""],claim_authorships:[4,3,1,""],contributor_info:[4,3,1,""],csrf_failure:[4,3,1,""],delete_unavailable_period:[4,3,1,""],email_group_members:[4,3,1,""],email_particular:[4,3,1,""],index:[4,3,1,""],invitation:[4,3,1,""],is_registered:[4,3,1,""],login_view:[4,3,1,""],logout_view:[4,3,1,""],mark_unavailable_period:[4,3,1,""],personal_page:[4,3,1,""],protected_serve:[4,3,1,""],register:[4,3,1,""],registration_requests:[4,3,1,""],registration_requests_reset:[4,3,1,""],request_new_activation_link:[4,3,1,""],send_precooked_email:[4,3,1,""],unsubscribe:[4,3,1,""]},"submissions.models":{EICRecommendation:[5,1,1,""],EditorialAssignment:[5,1,1,""],EditorialCommunication:[5,1,1,""],RefereeInvitation:[5,1,1,""],Report:[5,1,1,""],Submission:[5,1,1,""],SubmissionEvent:[5,1,1,""],iThenticateReport:[5,1,1,""]},"submissions.models.Report":{associated_published_doi:[5,4,1,""],is_followup_report:[5,4,1,""],latest_report_from_series:[5,2,1,""],relation_to_published:[5,4,1,""],title:[5,4,1,""]},"submissions.models.Submission":{comments_set_complete:[5,2,1,""],other_versions:[5,4,1,""],other_versions_pool:[5,4,1,""],thread:[5,4,1,""],touch:[5,2,1,""]},"submissions.models.iThenticateReport":{get_report_url:[5,2,1,""]},"submissions.views":{accept_or_decline_ref_invitations:[5,3,1,""],add_remark:[5,3,1,""],assign_submission:[5,3,1,""],assignment_failed:[5,3,1,""],assignment_request:[5,3,1,""],assignments:[5,3,1,""],cancel_ref_invitation:[5,3,1,""],close_refereeing_round:[5,3,1,""],communication:[5,3,1,""],cycle_form_submit:[5,3,1,""],editorial_page:[5,3,1,""],editorial_workflow:[5,3,1,""],eic_recommendation:[5,3,1,""],extend_refereeing_deadline:[5,3,1,""],fix_College_decision:[5,3,1,""],pool:[5,3,1,""],recruit_referee:[5,3,1,""],ref_invitation_reminder:[5,3,1,""],reformulate_eic_recommendation:[5,3,1,""],remind_Fellows_to_vote:[5,3,1,""],report_detail_pdf:[5,3,1,""],reports_accepted_list:[5,3,1,""],select_referee:[5,3,1,""],send_refereeing_invitation:[5,3,1,""],set_refereeing_deadline:[5,3,1,""],submission_refereeing_package_pdf:[5,3,1,""],submit_report:[5,3,1,""],treated_submissions_list:[5,3,1,""],vet_submitted_report:[5,3,1,""],vet_submitted_reports_list:[5,3,1,""],volunteer_as_EIC:[5,3,1,""]},"theses.models":{ThesisLink:[6,1,1,""]},commentaries:{models:[1,0,0,"-"],views:[1,0,0,"-"]},comments:{models:[2,0,0,"-"],views:[2,0,0,"-"]},journals:{models:[3,0,0,"-"],views:[3,0,0,"-"]},scipost:{models:[4,0,0,"-"],views:[4,0,0,"-"]},submissions:{models:[5,0,0,"-"],views:[5,0,0,"-"]},theses:{models:[6,0,0,"-"],views:[6,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:attribute"},terms:{"case":5,"class":[1,2,3,4,5,6],"default":4,"function":[4,5],"import":[3,5],"new":[4,5],"public":[1,2,3,4,5],"return":[2,3,5],"true":[1,3],"while":5,abov:[3,5],accept:[3,5],accept_or_decline_ref_invit:5,access:[3,4,5],accessibl:5,account:4,act:5,action:5,activ:[3,4,5],activation_kei:4,actual:[3,5],adapt:5,add_associated_gr:3,add_author:3,add_generic_fund:3,add_remark:5,admin:[4,5,9],administr:[3,5],after:[1,3,4,5],again:5,all:[1,3,4,5],allow:3,alreadi:[1,5],also:5,among:5,ani:[4,5],annoi:[2,5],anonym:[2,3,4],answer:5,appear:3,applic:3,arg:[1,2,3,4,5,6],articl:[3,5],arxiv:[1,5],arxiv_identifier_w_vn_nr:5,ask:5,assign:5,assign_submiss:5,assignment_fail:5,assignment_id:5,assignment_request:5,associ:3,associated_published_doi:5,assum:4,attach:2,audienc:5,auth:4,author:[1,2,3,5],authorship:[3,4],authorshipclaim:4,auto:4,automat:[1,5],avail:[2,5],await:1,awar:5,base:[2,4,5],basic:5,bcc:5,becom:5,been:[3,5],befor:5,below:5,between:5,board:5,both:[4,5],bug:5,bulk:4,call:[3,5],can:[3,4,5],cancel:5,cancel_ref_invit:5,central:5,certain:[3,4],charg:5,check:[2,4,5],choos:5,citabl:3,citat:3,citation_list:3,citation_r:3,citationnotif:4,claim:3,claim_authorship:4,claimant:4,click:4,close_refereeing_round:5,colleg:[4,5],com:4,come:5,command:9,comment:[0,1],comment_id:2,comment_on_publ:1,commentari:0,commentary_id:1,comments_set_complet:5,commit:1,commun:[4,5],compil:5,comtyp:5,confirm:4,connect:4,construct:5,contact:5,contain:[1,3,4,5],content:[1,2,3,5,7],contrib:4,contribut:[4,5],contributor:[2,3,4,5],contributor_id:[3,4,5],contributor_info:4,conveni:5,could:5,creat:[1,3,4],create_citation_list_metadata:3,create_funding_info_metadata:3,create_metadata_xml:3,crossref:[2,3,5],csrf:4,csrf_failur:4,current:[3,5],custom:4,cycl:5,cycle_form_submit:5,dai:5,data:3,databas:[3,5],dataset:3,date:[4,5],date_invit:5,date_last_remind:5,date_respond:5,deactiv:4,deadlin:5,decis:5,declin:5,delet:4,delete_unavailable_period:4,deni:4,denial:5,deposit:3,deprec:4,desir:5,detail:5,detect:4,dict:[2,5],dictionari:3,did:4,differ:5,digest:[4,5],directli:[3,5],directori:3,disciplin:4,displai:3,django:4,djangoproject:4,doaj:3,doajdeposit:3,doc:[4,8],doe:[4,5],doesn:5,doi:[1,3,5],doi_label:[1,3],done:[3,5],download:5,draft:4,draftinvit:4,due:5,dure:5,duti:5,each:[3,4,5],earlier:2,easi:5,edadmin:3,edcoladmin:5,editor:5,editori:[3,4,5],editorial_pag:5,editorial_workflow:5,editorialassign:5,editorialcolleg:4,editorialcollegefellowship:4,editorialcommun:5,eic:5,eic_recommend:5,eicrecommend:5,either:5,email:[3,4,5],email_address:5,email_group_memb:4,email_object_made_cit:3,email_particular:4,end:[4,5],entri:3,essenti:4,etc:[3,5],event:5,eventu:4,everi:5,exampl:5,exist:[1,3,5],expir:4,explicit:5,explicitli:5,extend:5,extend_refereeing_deadlin:5,failur:4,fallback:4,fals:4,feed:4,feedback:4,fellow:5,fellowship:4,field:[3,5],file:[3,4],fill:[3,4],filter:5,find:5,finish:4,first:[1,5],first_nam:[3,4,5],fix:[4,5],fix_college_decis:5,folder:[4,9],followupreport:5,form:[4,5],format:4,formul:5,from:[3,4,5],fulfil:5,funder:3,funding_info:3,further:[3,4],futur:5,gather:5,gener:[3,4,8],generate_kei:4,generic_metadata_xml_deposit:3,genericdoideposit:3,get:[2,5],get_author:2,get_author_str:2,get_report_url:5,get_sentinel_us:4,given:[1,4,5],goal:5,grant:3,group:4,handl:5,hasn:5,have:[3,4,5],header:4,here:[3,5],histori:3,html:[4,5],http:4,ident:5,identifi:5,implement:5,important:5,in_journ:3,in_volum:3,inact:4,includ:[4,5],index:[4,7],individu:[4,5],info:[2,5],inform:[4,5],inherit:4,initiate_publ:3,instanc:[3,4,5],instead:5,invit:[4,5],invitation_id:5,invitation_kei:5,invite:5,invited_bi:5,invok:9,is_followup_report:5,is_regist:4,isn:5,issn:3,issue:3,ithent:5,ithenticatereport:5,journal:0,kei:4,kwarg:[1,2,3,4,5,6],land:3,last_nam:[3,4,5],later:5,latest:5,latest_report_from_seri:5,least:4,let:[1,2,5],limit:4,link:[4,5],list:[4,5],log:5,logic:[2,5],login:4,login_view:4,logout:4,logout_view:4,made:[3,5],mai:5,mail:[4,5],main:[3,4,5],mainli:[2,5],mainten:7,make:[3,5,9],manag:[3,5,9],manage_comment_metadata:3,manage_report_metadata:3,manuscript:3,mark:4,mark_unavailable_period:4,mayb:4,mechan:5,media_root:4,member:[4,5],merg:5,messag:5,metadata:3,metadata_doaj_deposit:3,metadata_xml:3,metadata_xml_deposit:3,method:[3,4,5],minut:5,model:0,modifi:1,modify_commentary_request:1,modul:[3,7],most:3,motion:4,multipl:5,must:[3,4,5],name:[3,4,5],need:[4,5],nest:5,nomin:4,non:[3,4],none:[1,3,5],normal:5,note:[2,5],notif:4,notifi:3,nr_remind:5,number:[3,5],object:[2,3,5],occur:5,off:5,offer:3,offic:4,oldest:5,once:4,onli:[2,4,5],onlin:8,open:[2,3,5],option:3,order:3,origin:[3,4],other:5,other_vers:5,other_versions_pool:5,otherwis:[3,5],outsid:4,overrul:5,packag:5,page:[1,3,4,5,7],paper:4,parse_links_into_url:1,particular:2,partner:4,password:4,path:[3,4],pdf:5,peer:[2,3,5],pend:5,per:[3,5],period:4,period_id:4,permiss:4,person:[4,5],personal_pag:4,perticular:5,perus:5,physic:3,place:5,plain:4,point:6,pool:5,popul:3,possibl:[4,5],potenti:4,pre:3,precook:4,precookedemail:4,prefil:[3,4],process:[3,4,5],project:9,proof:3,properti:[2,5],protect:5,protected_serv:4,provid:5,publicationauthorst:3,publicli:5,publish:[2,3,5],python:[3,9],rate:3,reach:5,read:[2,5],reason:4,rec_id:5,receiv:4,recent:3,reciev:4,recogn:5,recommend:[4,5],recruit_refere:5,redirect:4,ref_invitation_remind:5,refenc:3,refer:3,refere:5,referee_id:5,refereeinvit:5,reformul:5,reformulate_eic_recommend:5,refus:5,refusal_reason:5,regist:[3,4,5],registr:[3,4,5],registration_request:4,registration_requests_reset:4,registrationinvit:4,regular:5,reject:5,relat:[2,3,5],relation_to_publish:[2,5],releas:4,relev:4,reli:4,remark:[4,5],remind:5,remind_fellows_to_vot:5,remov:[4,5],replac:4,repli:[2,5],report:[3,5],report_detail_pdf:5,report_id:[3,5],report_nr:5,reports_accepted_list:5,repres:3,request:[1,2,3,4,5],request_new_activation_link:4,requir:5,resend:4,reset:4,resubmission_incom:5,review:[2,3,5],right:5,round:5,same:5,satisfactori:5,save:[4,5],scienc:4,scientist:4,scipost:[0,1,2,3],search:7,see:4,select:[4,5],select_refere:5,send:[3,4,5],send_precooked_email:4,send_refereeing_invit:5,sent:[3,4,5],seri:5,serv:4,server:3,servic:5,session:4,set:5,set_refereeing_deadlin:5,she:[4,5],should:[4,5],show:[1,4,5],show_index:4,shown:5,sign:3,sign_existing_report:3,singl:5,slug:9,somebodi:5,sourc:[1,2,3,4,5,6],specif:[3,4,5],sphinx:8,sphinxdoc:8,start:[4,5],start_dat:3,statu:[1,3,4,5],still:4,string:2,subject:4,submiss:[0,2,3,4],submission_refereeing_package_pdf:5,submissionev:5,submit:[2,3,5],submit_report:5,subset:5,summari:5,superus:4,sure:5,system:4,tab:4,take:[1,5],taken:5,task:5,templat:4,temporari:4,termin:5,test:3,text:5,thei:[3,5],them:[3,5],thesi:6,thesislink:[4,6],thi:[1,2,3,4,5],thread:5,thu:3,tier:3,time:[3,5],titl:[2,5],todo:5,token:[4,5],tool:3,touch:5,treated_submissions_list:5,tri:4,turn:1,two:5,type:[2,3,5],unavail:4,unavailabilityperiod:4,undergo:5,undertaken:5,unexpectedli:5,unit:3,unregist:5,unregistered_author:3,unregistered_author_id:3,unregisteredauthor:3,unsollicit:2,unsubscrib:4,until:4,until_d:3,unvet:5,updat:5,update:[3,5],update_refer:3,updatedoc:9,upon:5,url:[1,5,6],use:[4,9],useful:4,user:[4,5,9],usernam:4,valid:[4,5],validate_publ:3,validatepublicationform:3,verif:[3,4],version:[3,5],vet:[1,4,5],vet_commentary_request:1,vet_submitted_report:5,vet_submitted_reports_list:5,vetted_bi:4,via:[3,4],view:0,viewabl:8,visitor:4,volum:3,volunt:5,volunteer_as_eic:5,vote:5,wai:5,want:[4,5],well:[4,5],what:5,when:5,where:5,wherea:5,which:[3,4,5],who:5,within:5,without:[2,5],worthless:5,write:5,written:5,year:3,yet:[3,4,5]},titles:["Apps","commentaries","comments","journals","scipost","submissions","theses","Welcome to SciPost&#8217;s codebase documentation","Maintenance","Maintenance of SciPost documentation"],titleterms:{"static":9,app:0,codebas:7,comment:2,commentari:1,doc:9,document:[7,9],file:9,gener:9,html:9,indice:7,journal:3,mainten:[8,9],model:[1,2,3,4,5,6],onlin:9,scipost:[4,7,9],sphinx:9,sphinxdoc:9,submiss:5,tabl:7,update:9,view:[1,2,3,4,5,6],viewabl:9,welcom:7}})
\ No newline at end of file
diff --git a/docs/codebase/_build/json/.buildinfo b/docs/codebase/_build/json/.buildinfo
new file mode 100644
index 0000000000000000000000000000000000000000..d142458ff8b8295b327d0472a9bf472022ded4ae
--- /dev/null
+++ b/docs/codebase/_build/json/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 4186a3ad9a6e6874e48739a86663d4c1
+tags: 6a38a8737c5234d37ffb85aa5f52e244
diff --git a/docs/codebase/_build/json/_modules/commentaries/models.fjson b/docs/codebase/_build/json/_modules/commentaries/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..fa956d0faaf5883f00f54044723588cd01d08c79
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/commentaries/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for commentaries.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentaryManager</span>\n\n\n<div class=\"viewcode-block\" id=\"Commentary\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Commentary</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Commentary contains all the contents of a SciPost Commentary page for a given publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">9</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENTARY_TYPES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span>\n                                  <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">DISCIPLINE_PHYSICS</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Article/publication data</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;arXiv identifier (including version nr)&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI of the original publication&#39;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;DOI link to the original publication&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;string form of arxiv nr or&#39;</span>\n                                                        <span class=\"s1\">&#39; DOI for commentary url&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">scipost_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_commentaries&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pages</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">50</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of original publication&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Commentary</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentaryManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Commentaries&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">,))</span>\n\n<div class=\"viewcode-block\" id=\"Commentary.parse_links_into_urls\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">parse_links_into_urls</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Takes the arXiv nr or DOI and turns it into the urls &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://dx.doi.org/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">pub_DOI</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_or_DOI_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;arXiv:&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://arxiv.org/abs/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">commit</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/commentaries/models", "title": "commentaries.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/commentaries/views.fjson b/docs/codebase/_build/json/_modules/commentaries/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..d7feea67187b7ef64ac8799df9869937df888d17
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/commentaries/views.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for commentaries.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template.loader</span> <span class=\"k\">import</span> <span class=\"n\">render_to_string</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">,</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">,</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentarySearchForm</span><span class=\"p\">,</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">,</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">CommentSciPostPublication</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">request_commentary</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_commentary.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span>\n    <span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestCommentary</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_valid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestPublishedArticle</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">RequestArxivPreprint</span><span class=\"p\">(</span><span class=\"n\">RequestCommentary</span><span class=\"p\">):</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_DOI</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">DOIToQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"c1\"># The form checks if doi is valid and commentary doesn&#39;t already exist.</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_published_article_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_doi_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestPublishedArticleForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_published_article.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_request_commentary_pages&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;POST&quot;</span><span class=\"p\">:</span>\n        <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">ArxivQueryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestArxivPreprintForm</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;query_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/request_arxiv_preprint.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"vet_commentary_requests\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.vet_commentary_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_commentary_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Show the first commentary thats awaiting vetting&quot;&quot;&quot;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">commentary_id</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Security fix: Smart asses can vet their own commentary without this line.</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">queryset</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">commentary_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Get commentary</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_commentary</span><span class=\"p\">()</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span>\n        <span class=\"p\">}</span>\n\n        <span class=\"c1\"># Retrieve email_template for action</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_accepted</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_accepted.html&#39;</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_refused</span><span class=\"p\">():</span>\n            <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_rejected.html&#39;</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_refusal_reason</span><span class=\"p\">()</span>\n            <span class=\"n\">email_context</span><span class=\"p\">[</span><span class=\"s1\">&#39;further_explanation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">commentary_is_modified</span><span class=\"p\">():</span>\n            <span class=\"c1\"># For a modified commentary, redirect to request_commentary_form</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:modify_commentary_request&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,)))</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"n\">email_context</span><span class=\"p\">)</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_commentary</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_to_vet</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/vet_commentary_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_commentary_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"modify_commentary_request\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.modify_commentary_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">modify_commentary_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;Modify a commentary request after vetting with status &#39;modified&#39;.&quot;&quot;&quot;</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                    <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)),</span>\n                                    <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestCommentaryForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"c1\"># Process commentary data</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Send email and process form</span>\n        <span class=\"n\">email_template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentaries/vet_commentary_email_modified.html&#39;</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">render_to_string</span><span class=\"p\">(</span><span class=\"n\">email_template</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">})</span>\n        <span class=\"n\">email_args</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;SciPost Commentary Page activated&#39;</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">requested_by</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n            <span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">]</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">email_args</span><span class=\"p\">,</span> <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;commentaries@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Commentary request modified and vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries:vet_commentary_requests&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/modify_commentary_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">CommentaryListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentarySearchForm</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n    <span class=\"n\">context_object_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;commentary_list&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Perform search form here already to get the right pagination numbers.&#39;&#39;&#39;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">model</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Get newest comments</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;comment_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"nb\">any</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"n\">field</span><span class=\"p\">]</span> <span class=\"k\">for</span> <span class=\"n\">field</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">):</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">commentary_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">):</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_or_DOI_string</span><span class=\"o\">=</span><span class=\"n\">arxiv_or_DOI_string</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">status__gte</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;commentary&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/commentary_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"comment_on_publication\"><a class=\"viewcode-back\" href=\"../../../apps/commentaries/#commentaries.views.comment_on_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">comment_on_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This will let authors of an SciPost publication comment on their Publication by</span>\n<span class=\"sd\">    automatically creating a Commentary page if not exist already.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(),</span>\n                                    <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentSciPostPublication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                     <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_request_commentary</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;commentaries/comment_on_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/commentaries/views", "title": "commentaries.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/comments/models.fjson b/docs/codebase/_build/json/_modules/comments/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..b1f2fada7eb277eeaf3d6a9e6f50db3e3997ae56
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/comments/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for comments.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">,</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENTARY_PUBLISHED</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">COMMENT_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PENDING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">CommentQuerySet</span>\n\n\n<span class=\"n\">WARNING_TEXT</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: Rather use/edit `content_object` instead or be 100</span><span class=\"si\">% s</span><span class=\"s1\">ure you know what you are doing!&#39;</span>\n<span class=\"n\">US_NOTICE</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Warning: This field is out of service and will be removed in the future.&#39;</span>\n\n\n<div class=\"viewcode-block\" id=\"Comment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Comment</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; A Comment is an unsollicited note, submitted by a Contributor,</span>\n<span class=\"sd\">    on a particular publication or in reply to an earlier Comment. &quot;&quot;&quot;</span>\n\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PENDING</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">COMMENT_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comment_vetted_by&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">file_attachment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;uploads/comments/%Y/%m/</span><span class=\"si\">%d</span><span class=\"s1\">/&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">validate_file_extension</span><span class=\"p\">,</span> <span class=\"n\">validate_max_file_size</span><span class=\"p\">]</span>\n                                       <span class=\"p\">)</span>\n\n    <span class=\"c1\"># A Comment is always related to another model</span>\n    <span class=\"c1\"># This construction implicitly has property: `on_delete=models.CASCADE`</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">WARNING_TEXT</span><span class=\"p\">)</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n\n    <span class=\"n\">nested_comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># -- U/S</span>\n    <span class=\"c1\"># These fields will be removed in the future.</span>\n    <span class=\"c1\"># They still exists only to prevent possible data loss.</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments_old&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_comment</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;nested_comments_old&quot;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"n\">in_reply_to_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Report&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span> <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"n\">US_NOTICE</span><span class=\"p\">)</span>\n    <span class=\"c1\"># -- End U/S</span>\n\n    <span class=\"c1\"># Author info</span>\n    <span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Categories:</span>\n    <span class=\"n\">is_cor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;correction/erratum&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rem</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_que</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_ans</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;answer to question&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_obj</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_rep</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reply to objection&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_val</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;validation or rederivation&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_lit</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pointer to related literature&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">is_sug</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;suggestion for further work&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">comment_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Opinions</span>\n    <span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_agreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_agreement&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_notsure</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_notsure&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">in_disagreement</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;in_disagreement&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">CommentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">permissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"p\">(</span><span class=\"s1\">&#39;can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Can vet submitted Comments&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comment_text</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">title</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">core_content_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n        <span class=\"k\">while</span> <span class=\"kc\">True</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">)</span> <span class=\"ow\">or</span>\n               <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">)):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"k\">return</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Comment</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Nested Comment.</span>\n                <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">raise</span> <span class=\"ne\">Exception</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Comment.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&#39;#&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#comment_id&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_attachment_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:attachment&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">grant_permissions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Add permissions for EIC only, the Vetting-group already has it!</span>\n            <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span></div>\n\n<div class=\"viewcode-block\" id=\"Comment.get_author_str\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.models.Comment.get_author_str\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_author_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&#39;&#39;&#39;Get author string, if and only if comment is not anonymous!!!&#39;&#39;&#39;</span>\n        <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_author</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Anonymous&#39;</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">update_opinions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;A&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;N&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">opinion</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;D&#39;</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_A</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_agreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_N</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_notsure</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_D</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_disagreement</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Comment relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"c1\"># Import here due to circular import errors</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n        <span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n        <span class=\"n\">to_object</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">core_content_object</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">to_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">type</span> <span class=\"o\">==</span> <span class=\"n\">COMMENTARY_PUBLISHED</span><span class=\"p\">:</span>\n                <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                    <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;post-publication&#39;</span><span class=\"p\">,</span>\n                    <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Comment on &#39;</span> <span class=\"o\">+</span> <span class=\"n\">to_object</span><span class=\"o\">.</span><span class=\"n\">pub_doi</span><span class=\"p\">,</span>\n                <span class=\"p\">}</span>\n                <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;author&#39;</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;type&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;community-comment&#39;</span>\n                    <span class=\"n\">relation</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reviewer-external&#39;</span>\n                <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Author Replies, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;SciPost Comments, &#39;</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/comments/models", "title": "comments.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/comments/views.fjson b/docs/codebase/_build/json/_modules/comments/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..a48ba2a73fa98d7049fb3ba74bcee523bfe000d2
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/comments/views.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for comments.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span><span class=\"p\">,</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_objects_for_user</span>\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span><span class=\"p\">,</span> <span class=\"n\">VetCommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">CommentUtils</span><span class=\"p\">,</span> <span class=\"n\">validate_file_extention</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">new_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;object_id&quot;</span><span class=\"p\">])</span>\n        <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s2\">&quot;type_of_object&quot;</span><span class=\"p\">]</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;thesislink&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;submission&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n            <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new comment has been added.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;commentary&quot;</span><span class=\"p\">:</span>\n            <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n        <span class=\"n\">new_comment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">_object</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">new_comment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_submit_comment</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/add_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comments_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">comments_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comments_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_submitted_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># Method `get_objects_for_user` gets all Comments that are assigned to the user</span>\n    <span class=\"c1\"># or *all* comments if user has the `scipost.can_vet_comments` permission.</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">((</span><span class=\"n\">get_objects_for_user</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments.can_vet_comments&#39;</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()),</span>\n                                <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetCommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Accept the comment as is</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_accepted_to_author</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Update `latest_activity` fields</span>\n            <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add events to related Submission and send mail to author of the Submission</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been accepted.&#39;</span><span class=\"p\">)</span>\n                <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Comment has been added.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span><span class=\"p\">:</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">})</span>\n                    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_comment_received_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;action_option&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;2&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The comment request is simply rejected</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"k\">if</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"o\">-</span><span class=\"mi\">1</span>  <span class=\"c1\"># Why&#39;s this here??</span>\n            <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">})</span>\n            <span class=\"n\">CommentUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_vet_rejected_to_author</span><span class=\"p\">(</span>\n                <span class=\"n\">email_response</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Add event if commented to Submission</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n                <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;A Comment has been rejected.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Submitted Comment vetted.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n            <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n            <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n                <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_comments&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Redirect vetters back to check for other unvetted comments!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments:vet_submitted_comments_list&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/vet_submitted_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_comment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">related_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">content_object</span>\n    <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Submission</span><span class=\"p\">)</span> <span class=\"ow\">or</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Commentary</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">):</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">related_object</span><span class=\"p\">,</span> <span class=\"n\">ThesisLink</span><span class=\"p\">):</span>\n        <span class=\"c1\"># ThesisLink</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># No idea what this could be, but just to be sure</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">related_object</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">comment</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">comment</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_comment.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">reply_to_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Verify if this is from an author:</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">is_report_comment</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newcomment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">report</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">is_author_reply</span> <span class=\"o\">=</span> <span class=\"n\">is_author</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">grant_permissions</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for contributing a Reply&lt;/h3&gt;&#39;</span>\n                                  <span class=\"s1\">&#39;It will soon be vetted by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">newcomment</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;comments/reply_to_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_express_opinion_on_comments&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">express_opinion</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">):</span>\n    <span class=\"c1\"># A contributor has expressed an opinion on a comment</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">update_opinions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span> <span class=\"n\">opinion</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<div class=\"viewcode-block\" id=\"attachment\"><a class=\"viewcode-back\" href=\"../../../apps/comments/#comments.views.attachment\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">attachment</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Open/read attachment of Comment if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">file_attachment</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_IMAGES</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;image/jpeg&#39;</span>\n    <span class=\"k\">elif</span> <span class=\"n\">validate_file_extention</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"p\">,</span> <span class=\"n\">EXTENTIONS_PDF</span><span class=\"p\">):</span>\n        <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;application/pdf&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">content_type</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;comment-attachment-</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">file_attachment</span><span class=\"o\">.</span><span class=\"n\">name</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/comments/views", "title": "comments.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/django/utils/functional.fjson b/docs/codebase/_build/json/_modules/django/utils/functional.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..7e41eeaa0fe074fc2f8531e305eef2397e060187
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/django/utils/functional.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for django.utils.functional</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">copy</span>\n<span class=\"kn\">import</span> <span class=\"nn\">operator</span>\n<span class=\"kn\">import</span> <span class=\"nn\">warnings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">functools</span> <span class=\"k\">import</span> <span class=\"n\">total_ordering</span><span class=\"p\">,</span> <span class=\"n\">wraps</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">six</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.deprecation</span> <span class=\"k\">import</span> <span class=\"n\">RemovedInDjango20Warning</span>\n\n\n<span class=\"c1\"># You can&#39;t trivially replace this with `functools.partial` because this binds</span>\n<span class=\"c1\"># to classes and returns bound instances, whereas functools.partial (on</span>\n<span class=\"c1\"># CPython) is a type and its instances don&#39;t bind.</span>\n<span class=\"k\">def</span> <span class=\"nf\">curry</span><span class=\"p\">(</span><span class=\"n\">_curried_func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">_curried</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">moreargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_curried_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">args</span> <span class=\"o\">+</span> <span class=\"n\">moreargs</span><span class=\"p\">),</span> <span class=\"o\">**</span><span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">morekwargs</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">_curried</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">cached_property</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Decorator that converts a method with a single self argument into a</span>\n<span class=\"sd\">    property cached on the instance.</span>\n\n<span class=\"sd\">    Optional ``name`` argument allows you to make cached properties of other</span>\n<span class=\"sd\">    methods. (e.g.  url = cached_property(get_absolute_url, name=&#39;url&#39;) )</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__doc__</span> <span class=\"o\">=</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"s1\">&#39;__doc__&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">name</span> <span class=\"ow\">or</span> <span class=\"n\">func</span><span class=\"o\">.</span><span class=\"vm\">__name__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__get__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"p\">,</span> <span class=\"bp\">cls</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">instance</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n        <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">instance</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">res</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">Promise</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This is just a base class for the proxy class created in</span>\n<span class=\"sd\">    the closure of the lazy function. It can be used to recognize</span>\n<span class=\"sd\">    promises in code.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">pass</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Turns any callable into a lazy evaluated callable. You need to give result</span>\n<span class=\"sd\">    classes or types -- at least one is needed so that the automatic forcing of</span>\n<span class=\"sd\">    the lazy evaluation code is triggered. Results are not memoized; the</span>\n<span class=\"sd\">    function is evaluated on every access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"nd\">@total_ordering</span>\n    <span class=\"k\">class</span> <span class=\"nc\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">Promise</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Encapsulate a function call and act as a proxy for methods that are</span>\n<span class=\"sd\">        called on the result of that function. The function is not evaluated</span>\n<span class=\"sd\">        until one of the methods on the result is called.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span> <span class=\"o\">=</span> <span class=\"n\">args</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span> <span class=\"o\">=</span> <span class=\"n\">kw</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepare_class__</span><span class=\"p\">()</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__prepared</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span>\n                <span class=\"n\">_lazy_proxy_unpickle</span><span class=\"p\">,</span>\n                <span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">resultclasses</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">repr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__prepare_class__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">resultclass</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">type_</span> <span class=\"ow\">in</span> <span class=\"n\">resultclass</span><span class=\"o\">.</span><span class=\"n\">mro</span><span class=\"p\">():</span>\n                    <span class=\"k\">for</span> <span class=\"n\">method_name</span> <span class=\"ow\">in</span> <span class=\"n\">type_</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n                        <span class=\"c1\"># All __promise__ return the same wrapper method, they</span>\n                        <span class=\"c1\"># look up the correct implementation when called.</span>\n                        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n                            <span class=\"k\">continue</span>\n                        <span class=\"n\">meth</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__promise__</span><span class=\"p\">(</span><span class=\"n\">method_name</span><span class=\"p\">)</span>\n                        <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">,</span> <span class=\"n\">meth</span><span class=\"p\">)</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"o\">=</span> <span class=\"nb\">bytes</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span> <span class=\"o\">=</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span> <span class=\"ow\">in</span> <span class=\"n\">resultclasses</span>\n            <span class=\"k\">assert</span> <span class=\"ow\">not</span> <span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">),</span> <span class=\"p\">(</span>\n                <span class=\"s2\">&quot;Cannot call lazy() with both bytes and text return types.&quot;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast_encoded</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n                <span class=\"k\">else</span><span class=\"p\">:</span>\n                    <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"bp\">cls</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span>\n\n        <span class=\"nd\">@classmethod</span>\n        <span class=\"k\">def</span> <span class=\"nf\">__promise__</span><span class=\"p\">(</span><span class=\"bp\">cls</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Builds a wrapper around some magic method</span>\n            <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n                <span class=\"c1\"># Automatically triggers the evaluation of a lazy value and</span>\n                <span class=\"c1\"># applies the given magic method of the result type.</span>\n                <span class=\"n\">res</span> <span class=\"o\">=</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"nb\">getattr</span><span class=\"p\">(</span><span class=\"n\">res</span><span class=\"p\">,</span> <span class=\"n\">method_name</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__text_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">))</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__bytes_cast_encoded</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__cast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__bytes_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__text_cast</span><span class=\"p\">()</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__kw</span><span class=\"p\">)</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"c1\"># object defines __str__(), so __prepare_class__() won&#39;t overload</span>\n            <span class=\"c1\"># a __str__() method from the proxied class.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__ne__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">!=</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__eq__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">==</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__lt__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">other</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">other</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                <span class=\"n\">other</span> <span class=\"o\">=</span> <span class=\"n\">other</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">&lt;</span> <span class=\"n\">other</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__hash__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"nb\">hash</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">())</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__mod__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">rhs</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_bytes</span> <span class=\"ow\">and</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY2</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"nb\">bytes</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_delegate_text</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">__cast</span><span class=\"p\">()</span> <span class=\"o\">%</span> <span class=\"n\">rhs</span>\n\n        <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Instances of this class are effectively immutable. It&#39;s just a</span>\n            <span class=\"c1\"># collection of functions. So we don&#39;t need to do anything</span>\n            <span class=\"c1\"># complicated for copying.</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span>\n\n    <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__wrapper__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kw</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Creates the proxy object, instead of the actual value.</span>\n        <span class=\"k\">return</span> <span class=\"n\">__proxy__</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kw</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">__wrapper__</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_lazy_proxy_unpickle</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">lazystr</span><span class=\"p\">(</span><span class=\"n\">text</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Shortcut for the common case of a lazy callable that returns str.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"kn\">from</span> <span class=\"nn\">django.utils.encoding</span> <span class=\"k\">import</span> <span class=\"n\">force_text</span>  <span class=\"c1\"># Avoid circular import</span>\n    <span class=\"k\">return</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">force_text</span><span class=\"p\">,</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">text</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">allow_lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"n\">warnings</span><span class=\"o\">.</span><span class=\"n\">warn</span><span class=\"p\">(</span>\n        <span class=\"s2\">&quot;django.utils.functional.allow_lazy() is deprecated in favor of &quot;</span>\n        <span class=\"s2\">&quot;django.utils.functional.keep_lazy()&quot;</span><span class=\"p\">,</span>\n        <span class=\"n\">RemovedInDjango20Warning</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator that allows a function to be called with one or more lazy</span>\n<span class=\"sd\">    arguments. If none of the args are lazy, the function is evaluated</span>\n<span class=\"sd\">    immediately, otherwise a __proxy__ is returned that will evaluate the</span>\n<span class=\"sd\">    function when needed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">resultclasses</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;You must pass at least one argument to keep_lazy().&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">decorator</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"n\">lazy_func</span> <span class=\"o\">=</span> <span class=\"n\">lazy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">resultclasses</span><span class=\"p\">)</span>\n\n        <span class=\"nd\">@wraps</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n        <span class=\"k\">def</span> <span class=\"nf\">wrapper</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n            <span class=\"k\">for</span> <span class=\"n\">arg</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">args</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">itervalues</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">)):</span>\n                <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">arg</span><span class=\"p\">,</span> <span class=\"n\">Promise</span><span class=\"p\">):</span>\n                    <span class=\"k\">break</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">lazy_func</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">wrapper</span>\n    <span class=\"k\">return</span> <span class=\"n\">decorator</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">keep_lazy_text</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A decorator for functions that accept lazy arguments and return text.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">keep_lazy</span><span class=\"p\">(</span><span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">text_type</span><span class=\"p\">)(</span><span class=\"n\">func</span><span class=\"p\">)</span>\n\n\n<span class=\"n\">empty</span> <span class=\"o\">=</span> <span class=\"nb\">object</span><span class=\"p\">()</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">func</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">inner</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">func</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">inner</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">LazyObject</span><span class=\"p\">(</span><span class=\"nb\">object</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A wrapper for another class that can be used to delay instantiation of the</span>\n<span class=\"sd\">    wrapped class.</span>\n\n<span class=\"sd\">    By subclassing, you have the opportunity to intercept and alter the</span>\n<span class=\"sd\">    instantiation. If you don&#39;t need to do that, use SimpleLazyObject.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n\n    <span class=\"c1\"># Avoid infinite recursion when tracing __init__ (#19456).</span>\n    <span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Note: if a subclass overrides __init__(), it will likely need to</span>\n        <span class=\"c1\"># override __copy__() and __deepcopy__() as well.</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"n\">empty</span>\n\n    <span class=\"fm\">__getattr__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">getattr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__setattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Assign to __dict__ to avoid infinite __setattr__ loops.</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">value</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n            <span class=\"nb\">setattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">,</span> <span class=\"n\">value</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__delattr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s2\">&quot;_wrapped&quot;</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"ne\">TypeError</span><span class=\"p\">(</span><span class=\"s2\">&quot;can&#39;t delete _wrapped.&quot;</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"nb\">delattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Must be implemented by subclasses to initialize the wrapped object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">NotImplementedError</span><span class=\"p\">(</span><span class=\"s1\">&#39;subclasses of LazyObject must provide a _setup() method&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Because we have messed with __class__ below, we confuse pickle as to what</span>\n    <span class=\"c1\"># class we are pickling. We&#39;re going to have to initialize the wrapped</span>\n    <span class=\"c1\"># object to successfully pickle it, so we might as well just pickle the</span>\n    <span class=\"c1\"># wrapped object since they&#39;re supposed to act the same way.</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># Unfortunately, if we try to simply act like the wrapped object, the ruse</span>\n    <span class=\"c1\"># will break down when pickle gets our id(). Thus we end up with pickle</span>\n    <span class=\"c1\"># thinking, in effect, that we are a distinct object from the wrapped</span>\n    <span class=\"c1\"># object, but with the same __dict__. This can cause problems (see #25389).</span>\n    <span class=\"c1\">#</span>\n    <span class=\"c1\"># So instead, we define our own __reduce__ method and custom unpickler. We</span>\n    <span class=\"c1\"># pickle the wrapped object as the unpickler&#39;s argument, so that pickle</span>\n    <span class=\"c1\"># will pickle it normally, and then the unpickler simply returns its</span>\n    <span class=\"c1\"># argument.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__reduce__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">unpickle_lazyobject</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,))</span>\n\n    <span class=\"c1\"># Overriding __class__ stops __reduce__ from being called on Python 2.</span>\n    <span class=\"c1\"># So, define __getstate__ in a way that cooperates with the way that</span>\n    <span class=\"c1\"># pickle interprets this class. This fails when the wrapped class is a</span>\n    <span class=\"c1\"># builtin, but it&#39;s better than nothing.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__getstate__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setup</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use type(self), not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use type(self), not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)()</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">six</span><span class=\"o\">.</span><span class=\"n\">PY3</span><span class=\"p\">:</span>\n        <span class=\"fm\">__bytes__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bytes</span><span class=\"p\">)</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"fm\">__bool__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"fm\">__str__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">)</span>\n        <span class=\"n\">__unicode__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">unicode</span><span class=\"p\">)</span>  <span class=\"c1\"># NOQA: unicode undefined on PY3</span>\n        <span class=\"n\">__nonzero__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">bool</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Introspection support</span>\n    <span class=\"fm\">__dir__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">dir</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Need to pretend to be the wrapped class, for the sake of objects that</span>\n    <span class=\"c1\"># care about this (especially in equality tests)</span>\n    <span class=\"vm\">__class__</span> <span class=\"o\">=</span> <span class=\"nb\">property</span><span class=\"p\">(</span><span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">attrgetter</span><span class=\"p\">(</span><span class=\"s2\">&quot;__class__&quot;</span><span class=\"p\">)))</span>\n    <span class=\"fm\">__eq__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">eq</span><span class=\"p\">)</span>\n    <span class=\"fm\">__ne__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">ne</span><span class=\"p\">)</span>\n    <span class=\"fm\">__hash__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">hash</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># List/Tuple/Dictionary methods support</span>\n    <span class=\"fm\">__getitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">getitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__setitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">setitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__delitem__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">delitem</span><span class=\"p\">)</span>\n    <span class=\"fm\">__iter__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">iter</span><span class=\"p\">)</span>\n    <span class=\"fm\">__len__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">)</span>\n    <span class=\"fm\">__contains__</span> <span class=\"o\">=</span> <span class=\"n\">new_method_proxy</span><span class=\"p\">(</span><span class=\"n\">operator</span><span class=\"o\">.</span><span class=\"n\">contains</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">unpickle_lazyobject</span><span class=\"p\">(</span><span class=\"n\">wrapped</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Used to unpickle lazy objects. Just return its argument, which will be the</span>\n<span class=\"sd\">    wrapped object.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">wrapped</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"n\">LazyObject</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A lazy object initialized from any function.</span>\n\n<span class=\"sd\">    Designed for compound objects of unknown type. For builtins or objects of</span>\n<span class=\"sd\">    known type, use django.utils.functional.lazy.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">func</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Pass in a callable that returns the object to be wrapped.</span>\n\n<span class=\"sd\">        If copies are made of the resulting SimpleLazyObject, which can happen</span>\n<span class=\"sd\">        in various circumstances within Django, then you must ensure that the</span>\n<span class=\"sd\">        callable can be safely run more than once and will return the same</span>\n<span class=\"sd\">        value.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">[</span><span class=\"s1\">&#39;_setupfunc&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">func</span>\n        <span class=\"nb\">super</span><span class=\"p\">(</span><span class=\"n\">SimpleLazyObject</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_setup</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Return a meaningful representation of the lazy object for debugging</span>\n    <span class=\"c1\"># without evaluating the wrapped object.</span>\n    <span class=\"k\">def</span> <span class=\"nf\">__repr__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">repr_attr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&lt;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%r</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">type</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"vm\">__name__</span><span class=\"p\">,</span> <span class=\"n\">repr_attr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__copy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If uninitialized, copy the wrapper. Use SimpleLazyObject, not</span>\n            <span class=\"c1\"># self.__class__, because the latter is proxied.</span>\n            <span class=\"k\">return</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># If initialized, return a copy of the wrapped object.</span>\n            <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">copy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__deepcopy__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span> <span class=\"ow\">is</span> <span class=\"n\">empty</span><span class=\"p\">:</span>\n            <span class=\"c1\"># We have to use SimpleLazyObject, not self.__class__, because the</span>\n            <span class=\"c1\"># latter is proxied.</span>\n            <span class=\"n\">result</span> <span class=\"o\">=</span> <span class=\"n\">SimpleLazyObject</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_setupfunc</span><span class=\"p\">)</span>\n            <span class=\"n\">memo</span><span class=\"p\">[</span><span class=\"nb\">id</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)]</span> <span class=\"o\">=</span> <span class=\"n\">result</span>\n            <span class=\"k\">return</span> <span class=\"n\">result</span>\n        <span class=\"k\">return</span> <span class=\"n\">copy</span><span class=\"o\">.</span><span class=\"n\">deepcopy</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_wrapped</span><span class=\"p\">,</span> <span class=\"n\">memo</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">partition</span><span class=\"p\">(</span><span class=\"n\">predicate</span><span class=\"p\">,</span> <span class=\"n\">values</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Splits the values into two sets, based on the return value of the function</span>\n<span class=\"sd\">    (True/False). e.g.:</span>\n\n<span class=\"sd\">        &gt;&gt;&gt; partition(lambda x: x &gt; 3, range(5))</span>\n<span class=\"sd\">        [0, 1, 2, 3], [4]</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">results</span> <span class=\"o\">=</span> <span class=\"p\">([],</span> <span class=\"p\">[])</span>\n    <span class=\"k\">for</span> <span class=\"n\">item</span> <span class=\"ow\">in</span> <span class=\"n\">values</span><span class=\"p\">:</span>\n        <span class=\"n\">results</span><span class=\"p\">[</span><span class=\"n\">predicate</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)]</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">item</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">results</span>\n</pre></div>", "parents": [{"link": "../../../", "title": "Module code"}], "current_page_name": "_modules/django/utils/functional", "title": "django.utils.functional", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/index.fjson b/docs/codebase/_build/json/_modules/index.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..edc5a8165b41af1945f05a99f93e09409355f161
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/index.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>All modules for which code is available</h1>\n<ul><li><a href=\"commentaries/models/\">commentaries.models</a></li>\n<li><a href=\"commentaries/views/\">commentaries.views</a></li>\n<li><a href=\"comments/models/\">comments.models</a></li>\n<li><a href=\"comments/views/\">comments.views</a></li>\n<li><a href=\"django/utils/functional/\">django.utils.functional</a></li>\n<li><a href=\"journals/models/\">journals.models</a></li>\n<li><a href=\"journals/views/\">journals.views</a></li>\n<li><a href=\"scipost/models/\">scipost.models</a></li>\n<li><a href=\"scipost/views/\">scipost.views</a></li>\n<li><a href=\"submissions/models/\">submissions.models</a></li>\n<li><a href=\"submissions/views/\">submissions.views</a></li>\n<li><a href=\"theses/models/\">theses.models</a></li>\n</ul>", "current_page_name": "_modules/index", "title": "Overview: module code", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/journals/models.fjson b/docs/codebase/_build/json/_modules/journals/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..6a118507c92f8c93dadd9b24fda27e7a97a72cb3
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/journals/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for journals.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericForeignKey</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Avg</span><span class=\"p\">,</span> <span class=\"n\">F</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">doi_journal_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_volume_validator</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">doi_issue_validator</span><span class=\"p\">,</span> <span class=\"n\">doi_publication_validator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">,</span> <span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CCBY4</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">CC_LICENSES_URI</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">journal_name_abbrev_citation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">IssueManager</span><span class=\"p\">,</span> <span class=\"n\">PublicationQuerySet</span><span class=\"p\">,</span> <span class=\"n\">JournalManager</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Journals etc #</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"UnregisteredAuthor\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.UnregisteredAuthor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnregisteredAuthor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PublicationAuthorsTable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.PublicationAuthorsTable\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PublicationAuthorsTable</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;order&#39;</span><span class=\"p\">,)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">first_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">last_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unregistered_author</span><span class=\"o\">.</span><span class=\"n\">last_name</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Journal\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Journal</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">100</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_journal_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">issn</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;2542-4653&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">JournalManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:landing_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_abbreviation_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">journal_name_abbrev_citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Journal.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Journal.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Volume\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Volume</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Journal&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_volume_validator</span><span class=\"p\">])</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_journal&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; Vol. &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Volume.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Volume.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span> <span class=\"o\">/</span> <span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Issue\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Issue</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">in_volume</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Volume&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ISSUE_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_PUBLISHED</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_issue_validator</span><span class=\"p\">])</span>\n    <span class=\"c1\"># absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">IssueManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;in_volume&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">issue_number</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;proceedings&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">text</span>\n        <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">period_as_string</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (In draft)&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">text</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:issue_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">issue_number</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">short_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;Vol. </span><span class=\"si\">%s</span><span class=\"s1\"> issue </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">period_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">month</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">month</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39; (</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;-&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%B&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n                    <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_current</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"o\">&lt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"ow\">and</span>\\\n               <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span> <span class=\"o\">&gt;=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">nr_publications</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">avg_processing_duration</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">duration</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">aggregate</span><span class=\"p\">(</span>\n                <span class=\"n\">avg</span><span class=\"o\">=</span><span class=\"n\">Avg</span><span class=\"p\">(</span><span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">)</span> <span class=\"o\">-</span> <span class=\"n\">F</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">)))[</span><span class=\"s1\">&#39;avg&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">duration</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">duration</span><span class=\"o\">.</span><span class=\"n\">total_seconds</span><span class=\"p\">()</span> <span class=\"o\">/</span> <span class=\"mi\">86400</span>\n        <span class=\"k\">return</span> <span class=\"mi\">0</span>\n\n<div class=\"viewcode-block\" id=\"Issue.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Issue.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">tier</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">tier</span><span class=\"p\">:</span>\n            <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__eicrecommendations__recommendation</span><span class=\"o\">=</span><span class=\"n\">tier</span><span class=\"p\">)</span>\n        <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>  <span class=\"c1\"># to avoid division by zero</span>\n        <span class=\"k\">for</span> <span class=\"n\">pub</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n                <span class=\"n\">ncites</span> <span class=\"o\">+=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n                <span class=\"n\">deltat</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"n\">pub</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Publication</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Publication is an object directly related to an accepted Submission. It contains metadata,</span>\n<span class=\"sd\">    the actual publication file, author data, etc. etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Publication data</span>\n    <span class=\"n\">accepted_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">in_issue</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Issue&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Core fields</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">pdf_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/PUBLICATIONS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors</span>\n    <span class=\"n\">authors_registered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">),</span>\n                                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_unregistered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.UnregisteredAuthor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through</span><span class=\"o\">=</span><span class=\"s1\">&#39;PublicationAuthorsTable&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">through_fields</span><span class=\"o\">=</span><span class=\"p\">(</span>\n                                                    <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">,</span>\n                                                    <span class=\"s1\">&#39;unregistered_author&#39;</span><span class=\"p\">),</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_publications&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_publications&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">cc_license</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CC_LICENSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CCBY4</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Funders</span>\n    <span class=\"n\">grants</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;funders.Grant&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">funders_generic</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;funders.Funder&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>  <span class=\"c1\"># not linked to a grant</span>\n    <span class=\"n\">institutions</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;affiliations.Institution&#39;</span><span class=\"p\">,</span>\n                                          <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;publications&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>  <span class=\"c1\"># for Crossref deposit</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">db_index</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                 <span class=\"n\">validators</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">doi_publication_validator</span><span class=\"p\">])</span>\n    <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Date fields</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;publication date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">PublicationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span>\n                  <span class=\"o\">+</span> <span class=\"s1\">&#39;, published &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:publication_detail&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">])</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_cc_license_URI</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">val</span><span class=\"p\">)</span> <span class=\"ow\">in</span> <span class=\"n\">CC_LICENSES_URI</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">key</span> <span class=\"o\">==</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cc_license</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"n\">val</span>\n        <span class=\"k\">raise</span> <span class=\"ne\">KeyError</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_paper_nr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span>\n                <span class=\"o\">+</span> <span class=\"s1\">&#39; (&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Publication.citation_rate\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Publication.citation_rate\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">citation_rate</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Returns the citation rate in units of nr citations per article per year.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"p\">:</span>\n            <span class=\"n\">ncites</span> <span class=\"o\">=</span> <span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citedby</span><span class=\"p\">)</span>\n            <span class=\"n\">deltat</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span> <span class=\"o\">-</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">days</span>\n            <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"n\">ncites</span> <span class=\"o\">*</span> <span class=\"mf\">365.25</span><span class=\"o\">/</span><span class=\"n\">deltat</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"mi\">0</span></div></div>\n\n\n<div class=\"viewcode-block\" id=\"Reference\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Reference\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Reference</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A Refence is a reference used in a specific Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reference_number</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">)</span>\n    <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1028</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">identifier</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">128</span><span class=\"p\">)</span>\n    <span class=\"n\">link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;reference_number&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;references&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;[</span><span class=\"si\">{}</span><span class=\"s1\">] </span><span class=\"si\">{}</span><span class=\"s1\">, </span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reference_number</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.Deposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Deposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each time a Crossref deposit is made for a Publication,</span>\n<span class=\"sd\">    a Deposit object instance is created containing the Publication&#39;s</span>\n<span class=\"sd\">    current version of the metadata_xml field.</span>\n<span class=\"sd\">    All deposit history is thus contained here.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"p\">:</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> for &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">deposition_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-%D&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span></div>\n\n\n<div class=\"viewcode-block\" id=\"DOAJDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.DOAJDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    For the Directory of Open Access Journals.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_DOAJ</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">512</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;DOAJ deposit&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"s1\">&#39;DOAJ deposit for &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"GenericDOIDeposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.models.GenericDOIDeposit\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Instances of this class represent Crossref deposits for non-publication</span>\n<span class=\"sd\">    objects such as Reports, Comments etc.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">content_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">ContentType</span><span class=\"p\">)</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveIntegerField</span><span class=\"p\">()</span>\n    <span class=\"n\">content_object</span> <span class=\"o\">=</span> <span class=\"n\">GenericForeignKey</span><span class=\"p\">()</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposition_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-timestamp&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;GenericDOIDeposit for </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"p\">))</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/journals/models", "title": "journals.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/journals/views.fjson b/docs/codebase/_build/json/_modules/journals/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..44c2e8a799500e37d4b7cbc30852f6d8c0cc36c9
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/journals/views.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for journals.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">json</span>\n<span class=\"kn\">import</span> <span class=\"nn\">os</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">requests</span>\n<span class=\"kn\">import</span> <span class=\"nn\">shutil</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n<span class=\"kn\">import</span> <span class=\"nn\">xml.etree.ElementTree</span> <span class=\"k\">as</span> <span class=\"nn\">ET</span>\n\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.models</span> <span class=\"k\">import</span> <span class=\"n\">ContentType</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span><span class=\"p\">,</span> <span class=\"n\">EmptyPage</span><span class=\"p\">,</span> <span class=\"n\">PageNotAnInteger</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PaperNumberingError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.helpers</span> <span class=\"k\">import</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label_from_doi_label</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">Issue</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">,</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">,</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">,</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ReferenceFormSet</span><span class=\"p\">,</span> <span class=\"n\">CreateMetadataDOAJForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">JournalUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">funders.models</span> <span class=\"k\">import</span> <span class=\"n\">Funder</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">Report</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.constants</span> <span class=\"k\">import</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.signals</span> <span class=\"k\">import</span> <span class=\"n\">notify_stream_status_change</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">funders.forms</span> <span class=\"k\">import</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">,</span> <span class=\"n\">GrantSelectForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ConfirmationForm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n\n\n<span class=\"c1\">############</span>\n<span class=\"c1\"># Journals</span>\n<span class=\"c1\">############</span>\n\n<div class=\"viewcode-block\" id=\"journals\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.journals\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">journals</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main landing page for Journals application.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">)}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journals.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">landing_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">start_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"n\">until_date__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"n\">latest_issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n        <span class=\"n\">until_date__lte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">current_issue</span><span class=\"p\">:</span>\n        <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                              <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;current_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;latest_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">latest_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_landing_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issues</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issues.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"recent\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.recent\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recent</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for the most recent 20 publications in SciPost Physics.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">recent_papers</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                          <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">20</span><span class=\"p\">]</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recent_papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">recent_papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_recent.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"accepted\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.accepted\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accepted</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Display page for submissions to SciPost Physics which</span>\n<span class=\"sd\">    have been accepted but are not yet published.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted_SP_submissions</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n                               <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"o\">.</span><span class=\"n\">name</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;accepted_SP_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">accepted_SP_submissions</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_accepted.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">info_for_authors</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_info_for_authors.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">about</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/</span><span class=\"si\">%s</span><span class=\"s1\">_about.html&#39;</span> <span class=\"o\">%</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">issue_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">issue</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">papers</span> <span class=\"o\">=</span> <span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">publication_set</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">next_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__gt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">())</span>\n    <span class=\"n\">prev_issue</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">(</span><span class=\"n\">in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">,</span>\n                                          <span class=\"n\">start_date__lt</span><span class=\"o\">=</span><span class=\"n\">issue</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">)</span>\n                               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;prev_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">prev_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;next_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">next_issue</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;papers&#39;</span><span class=\"p\">:</span> <span class=\"n\">papers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/journal_issue_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">#######################</span>\n<span class=\"c1\"># Publication process #</span>\n<span class=\"c1\">#######################</span>\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"initiate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.initiate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">initiate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    Publish the manuscript after proofs have been accepted.</span>\n<span class=\"sd\">    This method prefills a ValidatePublicationForm for further</span>\n<span class=\"sd\">    processing (verification in validate_publication method).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">initiate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">InitiatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">current_issue</span> <span class=\"o\">=</span> <span class=\"n\">initiate_publication_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_be_issued_in&#39;</span><span class=\"p\">]</span>\n\n        <span class=\"c1\"># Determine next available paper number:</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__in_volume</span><span class=\"o\">=</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">paper_nr</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n        <span class=\"k\">if</span> <span class=\"n\">paper_nr</span> <span class=\"o\">&gt;</span> <span class=\"mi\">999</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PaperNumberingError</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Build form data</span>\n        <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">name</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">doi_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span>\n        <span class=\"n\">BiBTeX_entry</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;@Article{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">title={{&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;}},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">author={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;,&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39; and&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">journal={&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">volume={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">issue={&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">pages={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">year={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">current_issue</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">publisher=</span><span class=\"si\">{SciPost}</span><span class=\"s1\">,</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">doi={&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;</span><span class=\"se\">\\t</span><span class=\"s1\">url={https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;},</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;}</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;accepted_submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;in_issue&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_issue</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;paper_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">paper_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;domain&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">domain</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;subject_area&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;secondary_areas&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">secondary_areas</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;author_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;abstract&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">abstract</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;BiBTeX_entry&#39;</span><span class=\"p\">:</span> <span class=\"n\">BiBTeX_entry</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;acceptance_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submission_date</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;publication_date&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">validate_publication_form</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;initiate_publication_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">initiate_publication_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/initiate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"validate_publication\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.validate_publication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">validate_publication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This creates a Publication instance from the ValidatePublicationForm,</span>\n<span class=\"sd\">    pre-filled by the initiate_publication method above.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># TODO: move from uploads to Journal folder</span>\n    <span class=\"c1\"># TODO: create metadata</span>\n    <span class=\"c1\"># TODO: set DOI, register with Crossref</span>\n    <span class=\"c1\"># TODO: add funding info</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">validate_publication_form</span> <span class=\"o\">=</span> <span class=\"n\">ValidatePublicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Fill remaining data</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span>\n\n        <span class=\"k\">for</span> <span class=\"n\">submission_author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">submission_author</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n\n        <span class=\"c1\"># Add Institutions to the publication</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_registered</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">for</span> <span class=\"n\">current_affiliation</span> <span class=\"ow\">in</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">affiliations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">():</span>\n                <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">institutions</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">current_affiliation</span><span class=\"o\">.</span><span class=\"n\">institution</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Save the beast</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Move file to final location</span>\n        <span class=\"n\">initial_path</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">path</span>\n        <span class=\"n\">new_dir</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n                   <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">())</span>\n        <span class=\"n\">new_path</span> <span class=\"o\">=</span> <span class=\"n\">new_dir</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">makedirs</span><span class=\"p\">(</span><span class=\"n\">new_dir</span><span class=\"p\">)</span>\n        <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">rename</span><span class=\"p\">(</span><span class=\"n\">initial_path</span><span class=\"p\">,</span> <span class=\"n\">new_path</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">=</span> <span class=\"n\">new_path</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Mark the submission as having been published:</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">published_as</span> <span class=\"o\">=</span> <span class=\"n\">publication</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;published&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Update ProductionStream</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;production_stream&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">stream</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">production_stream</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">PROOFS_PUBLISHED</span>\n            <span class=\"n\">stream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span><span class=\"p\">:</span>\n                <span class=\"n\">prodevent</span> <span class=\"o\">=</span> <span class=\"n\">ProductionEvent</span><span class=\"p\">(</span>\n                    <span class=\"n\">stream</span><span class=\"o\">=</span><span class=\"n\">stream</span><span class=\"p\">,</span>\n                    <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">comments</span><span class=\"o\">=</span><span class=\"s1\">&#39; published the manuscript.&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">noted_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">production_user</span>\n                <span class=\"p\">)</span>\n                <span class=\"n\">prodevent</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">notify_stream_status_change</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">stream</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># TODO: Create a Commentary Page</span>\n        <span class=\"c1\"># Email authors</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_paper_published_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Submission has been published as </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The publication has been validated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The form was invalid.&#39;</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;validate_publication_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">validate_publication_form</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/validate_publication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">manage_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">issue_doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"n\">issues</span> <span class=\"o\">=</span> <span class=\"n\">Issue</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-until_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">issue_doi_label</span> <span class=\"o\">=</span> <span class=\"n\">issue_doi_label_from_doi_label</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">in_issue__doi_label</span><span class=\"o\">=</span><span class=\"n\">issue_doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">associate_grant_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">associate_generic_funder_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;issues&#39;</span><span class=\"p\">:</span> <span class=\"n\">issues</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;issue_doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">issue_doi_label</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_grant_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_grant_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;associate_generic_funder_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">associate_generic_funder_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_first_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">author_object_id</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n    <span class=\"n\">author_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object_id</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Redo ordering</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">author_objects</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n    <span class=\"n\">count</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n    <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">author_objects</span><span class=\"p\">:</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">=</span> <span class=\"n\">count</span>\n        <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">count</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Marked </span><span class=\"si\">{}</span><span class=\"s1\"> first author&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">author_object</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_author\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_author\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">unregistered_author_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If not all authors are registered Contributors or if they have not</span>\n<span class=\"sd\">    all claimed authorship, this method allows editorial administrators</span>\n<span class=\"sd\">    to associated them to the publication.</span>\n<span class=\"sd\">    This is important for the Crossref metadata, in which all authors must appear.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">contributor_id</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">UnregisteredAuthorForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">and</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unregistered_author</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n            <span class=\"n\">unregistered_author</span><span class=\"o\">=</span><span class=\"n\">unregistered_author</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Added </span><span class=\"si\">{}</span><span class=\"s1\"> as an unregistered author.&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">unregistered_author</span>\n        <span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_found</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/add_author.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_citation_list_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_citation_list_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_citation_list_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the citation_list dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">bibitems_form</span> <span class=\"o\">=</span> <span class=\"n\">CitationListBibitemsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">bibitems_form</span><span class=\"o\">.</span><span class=\"n\">extract_dois</span><span class=\"p\">()</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated citation list&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_citation_list_metadata&#39;</span><span class=\"p\">,</span>\n                        <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;bibitems_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">bibitems_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_citation_list_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"update_references\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.update_references\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">update_references</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Update the References for a certain Publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">references</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">references</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n\n    <span class=\"n\">formset</span> <span class=\"o\">=</span> <span class=\"n\">ReferenceFormSet</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">references</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                               <span class=\"n\">extra</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;extra&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;prefill&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">prefill</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;References saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/update_references.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_funding_info_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_funding_info_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_funding_info_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This populates the funding_info dictionary entry</span>\n<span class=\"sd\">    in the metadata field in a Publication instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"n\">funding_statement</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">FundingInfoForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Updated funding info&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_funding_info_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_info_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;funding_statement&#39;</span><span class=\"p\">:</span> <span class=\"n\">funding_statement</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_funding_info_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_associated_grant\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_associated_grant\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_associated_grant</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a grant from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">grant_select_form</span> <span class=\"o\">=</span> <span class=\"n\">GrantSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">grant_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;grant&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Grant added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"add_generic_funder\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.add_generic_funder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_generic_funder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n<span class=\"sd\">    This associates a funder (generic, not via grant) from the database to this publication.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">funder_select_form</span> <span class=\"o\">=</span> <span class=\"n\">FunderSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">funder_select_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;funder&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Generic funder added to publication </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"create_metadata_xml\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.create_metadata_xml\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">create_metadata_xml</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    To be called by an EdAdmin after the citation_list,</span>\n<span class=\"sd\">    funding_info entries have been filled.</span>\n<span class=\"sd\">    Populates the metadata_xml field of a Publication instance.</span>\n<span class=\"sd\">    The contents can then be sent to Crossref for registration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n\n    <span class=\"n\">initial</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;&#39;</span><span class=\"p\">}</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.0&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.0&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:fr=&quot;http://www.crossref.org/fundref.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.0 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.0.xsd&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:ai=&quot;http://www.crossref.org/AccessIndicators.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;full_title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_name_display</span><span class=\"p\">()</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/full_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;abbrev_title&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">get_abbreviation_citation</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/abbrev_title&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issn media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">electronic</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">issn</span>\n        <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issn&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;volume&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_volume&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;issue&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">number</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal_issue&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;journal_article publication_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">full_text</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n\n    <span class=\"c1\"># Precondition: all authors MUST be listed in authors field of publication instance,</span>\n    <span class=\"c1\"># this to be checked by EdAdmin before publishing.</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">author_object</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">order</span> <span class=\"o\">==</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">first</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">additional</span><span class=\"se\">\\&#39;</span><span class=\"s1\"> contributor_role=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">author</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt; &#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt; &#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">and</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span><span class=\"p\">:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;ORCID&gt;http://orcid.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author_object</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">orcid_id</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/ORCID&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;publication_date media_type=</span><span class=\"se\">\\&#39;</span><span class=\"s1\">online</span><span class=\"se\">\\&#39;</span><span class=\"s1\">&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/publication_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;publisher_item&gt;&lt;item_number item_number_type=&quot;article_number&quot;&gt;&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">paper_nr_string</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">paper_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/item_number&gt;&lt;/publisher_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_policy&gt;10.21468/SciPost.CrossmarkPolicy&lt;/crossmark_policy&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain&gt;&lt;domain&gt;scipost.org&lt;/domain&gt;&lt;/crossmark_domain&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/crossmark_domains&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;crossmark_domain_exclusive&gt;false&lt;/crossmark_domain_exclusive&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"n\">funders</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Funder</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">grant__in</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span>\n               <span class=\"o\">|</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">funders_generic</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span>\n    <span class=\"n\">nr_funders</span> <span class=\"o\">=</span> <span class=\"n\">funders</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">0</span><span class=\"p\">:</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:program name=&quot;fundref&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">funder</span> <span class=\"ow\">in</span> <span class=\"n\">funders</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;fundgroup&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_name&quot;&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;funder_identifier&quot;&gt;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">funder</span><span class=\"o\">.</span><span class=\"n\">identifier</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">for</span> <span class=\"n\">grant</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">grants</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n                <span class=\"k\">if</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">funder</span> <span class=\"o\">==</span> <span class=\"n\">funder</span><span class=\"p\">:</span>\n                    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                        <span class=\"s1\">&#39;&lt;fr:assertion name=&quot;award_number&quot;&gt;&#39;</span>\n                        <span class=\"o\">+</span> <span class=\"n\">grant</span><span class=\"o\">.</span><span class=\"n\">number</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">nr_funders</span> <span class=\"o\">&gt;</span> <span class=\"mi\">1</span><span class=\"p\">:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:assertion&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/fr:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;ai:program name=&quot;AccessIndicators&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;ai:license_ref&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_cc_license_URI</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n        <span class=\"s1\">&#39;&lt;/ai:license_ref&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/ai:program&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/custom_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/crossmark&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;archive_locations&gt;&lt;archive name=&quot;CLOCKSS&quot;&gt;&lt;/archive&gt;&lt;/archive_locations&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;crawler-based&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item crawler=&quot;iParadigms&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org/&#39;</span>\n        <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/item&gt;&lt;/collection&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;collection property=&quot;text-mining&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;item&gt;&lt;resource mime_type=&quot;application/pdf&quot;&gt;&#39;</span>\n        <span class=\"s1\">&#39;https://scipost.org/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/pdf&lt;/resource&gt;&lt;/item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/collection&gt;&#39;</span>\n        <span class=\"s1\">&#39;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"k\">for</span> <span class=\"n\">ref</span> <span class=\"ow\">in</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;citation_list&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;&lt;citation key=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;key&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">ref</span><span class=\"p\">[</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                    <span class=\"s1\">&#39;&lt;/citation&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n                <span class=\"p\">)</span>\n        <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/citation_list&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n        <span class=\"k\">pass</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;/journal_article&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/journal&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"n\">initial</span><span class=\"p\">[</span><span class=\"s1\">&#39;metadata_xml&#39;</span><span class=\"p\">]</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/doi_batch&gt;&#39;</span>\n\n    <span class=\"n\">create_metadata_xml_form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataXMLForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">initial</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">create_metadata_xml_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Metadata XML saved&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_metadata_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;create_metadata_xml_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">create_metadata_xml_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/create_metadata_xml.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">option</span><span class=\"o\">=</span><span class=\"s1\">&#39;test&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Crossref metadata deposit.</span>\n<span class=\"sd\">    If test==True, test the metadata_xml using the Crossref test server.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span> <span class=\"ow\">is</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span>\n            <span class=\"n\">request</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;This publication has no metadata. Produce it first before saving it.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:create_metadata_xml&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_Crossref_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.xml&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Deposit already done before.</span>\n        <span class=\"n\">valid</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># New deposit, go for it.</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DEBUG</span><span class=\"p\">:</span>\n            <span class=\"c1\"># CAUTION: Real deposit only on production (non-debug-mode)</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n\n        <span class=\"c1\"># First perform the actual deposit to Crossref</span>\n        <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n            <span class=\"p\">}</span>\n        <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">),</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n        <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n        <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n        <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n        <span class=\"k\">if</span> <span class=\"n\">option</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;deposit&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">Deposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span>\n                              <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                              <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                              <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                              <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n            <span class=\"c1\"># Save the filename with timestamp</span>\n            <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">,</span> <span class=\"n\">encoding</span><span class=\"o\">=</span><span class=\"s1\">&#39;utf-8&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"p\">)</span>\n            <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Copy file</span>\n            <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_Crossref.xml&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n                <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n                <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                            <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_xml_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n            <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_crossref_deposit</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;option&#39;</span><span class=\"p\">:</span> <span class=\"n\">option</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;valid&#39;</span><span class=\"p\">:</span> <span class=\"n\">valid</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Deposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">produce_metadata_DOAJ</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CreateMetadataDOAJForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfully produced metadata DOAJ.&#39;</span>\n                                  <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/metadata_doaj_create.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"metadata_DOAJ_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.metadata_DOAJ_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">metadata_DOAJ_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    DOAJ metadata deposit.</span>\n<span class=\"sd\">    Makes use of the python requests module.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: please first produce &#39;</span>\n                                  <span class=\"s1\">&#39;DOAJ metadata before depositing.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_xml</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span><span class=\"p\">))[</span><span class=\"mi\">2</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">partition</span><span class=\"p\">(</span><span class=\"s1\">&#39;&lt;/timestamp&gt;&#39;</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n    <span class=\"n\">path</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;/&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span>\n            <span class=\"o\">+</span> <span class=\"s1\">&#39;_DOAJ_&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.json&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">os</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"o\">.</span><span class=\"n\">isfile</span><span class=\"p\">(</span><span class=\"n\">path</span><span class=\"p\">):</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The metadata file for this metadata timestamp already exists&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://doaj.org/api/v1/articles&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;api_key&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">DOAJ_API_KEY</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">json</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">)</span>\n        <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">raise_for_status</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">exceptions</span><span class=\"o\">.</span><span class=\"n\">HTTPError</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Failed: Post went wrong, response text: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">,</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Then create the associated Deposit object (saving the metadata to a file)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">DOAJDeposit</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                          <span class=\"n\">metadata_DOAJ</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">,</span> <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">())</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n\n    <span class=\"c1\"># Save a copy to the filename with and without timestamp</span>\n    <span class=\"n\">path_with_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ_</span><span class=\"si\">{timestamp}</span><span class=\"s1\">.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">),</span>\n        <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span> <span class=\"o\">=</span> <span class=\"nb\">open</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span> <span class=\"s1\">&#39;w&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">write</span><span class=\"p\">(</span><span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ</span><span class=\"p\">))</span>\n    <span class=\"n\">f</span><span class=\"o\">.</span><span class=\"n\">close</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Copy file</span>\n    <span class=\"n\">path_without_timestamp</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{issue}</span><span class=\"s1\">/</span><span class=\"si\">{paper}</span><span class=\"s1\">/</span><span class=\"si\">{doi}</span><span class=\"s1\">_DOAJ.json&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n        <span class=\"n\">issue</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">path</span><span class=\"p\">,</span>\n        <span class=\"n\">paper</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">get_paper_nr</span><span class=\"p\">(),</span>\n        <span class=\"n\">doi</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">shutil</span><span class=\"o\">.</span><span class=\"n\">copyfile</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_with_timestamp</span><span class=\"p\">,</span>\n                    <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT</span> <span class=\"o\">+</span> <span class=\"n\">path_without_timestamp</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Save the database entry</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">metadata_DOAJ_file</span> <span class=\"o\">=</span> <span class=\"n\">path_with_timestamp</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;&lt;h3&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/h3&gt;Successfull deposit of metadata DOAJ.&#39;</span>\n                              <span class=\"o\">%</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_doaj_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">DOAJDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">publications</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">harvest_citedby_links</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">query_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;?xml version = &quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;query_batch version=&quot;2.0&quot; xmlns = &quot;http://www.crossref.org/qschema/2.0&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&#39;</span>\n                 <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/qschema/2.0 &#39;</span>\n                 <span class=\"s1\">&#39;http://www.crossref.org/qschema/crossref_query_input2.0.xsd&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/head&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;fl_query alert=&quot;false&quot;&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/fl_query&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/body&gt;&#39;</span>\n                 <span class=\"s1\">&#39;&lt;/query_batch&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/getForwardLinks&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;usr&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;pwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;qdata&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_xml</span><span class=\"p\">,</span>\n              <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"p\">}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">status_code</span> <span class=\"o\">==</span> <span class=\"mi\">401</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Crossref credentials are invalid.&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;Please contact the SciPost Admin.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_metadata&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;doi_label&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi_label</span><span class=\"p\">}))</span>\n    <span class=\"n\">response_headers</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span>\n    <span class=\"n\">response_text</span> <span class=\"o\">=</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span>\n    <span class=\"n\">response_deserialized</span> <span class=\"o\">=</span> <span class=\"n\">ET</span><span class=\"o\">.</span><span class=\"n\">fromstring</span><span class=\"p\">(</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">prefix</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{http://www.crossref.org/qrschema/2.0}&#39;</span>\n    <span class=\"n\">citations</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">link</span> <span class=\"ow\">in</span> <span class=\"n\">response_deserialized</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;forward_link&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">doi</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">article_title</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">journal_abbreviation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n            <span class=\"n\">volume</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">first_page</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"k\">except</span><span class=\"p\">:</span>\n            <span class=\"n\">item_number</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span>\n                <span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">iter</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">if</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;sequence&#39;</span><span class=\"p\">)</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;first&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">first_author_given_name</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;given_name&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n                <span class=\"n\">first_author_surname</span> <span class=\"o\">=</span> <span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;surname&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">multiauthors</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">year</span> <span class=\"o\">=</span> <span class=\"n\">link</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;journal_cite&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">find</span><span class=\"p\">(</span><span class=\"n\">prefix</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">text</span>\n        <span class=\"n\">citations</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">({</span><span class=\"s1\">&#39;doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">doi</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;article_title&#39;</span><span class=\"p\">:</span> <span class=\"n\">article_title</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;journal_abbreviation&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal_abbreviation</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_given_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_given_name</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_author_surname&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_author_surname</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;multiauthors&#39;</span><span class=\"p\">:</span> <span class=\"n\">multiauthors</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;volume&#39;</span><span class=\"p\">:</span> <span class=\"n\">volume</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;first_page&#39;</span><span class=\"p\">:</span> <span class=\"n\">first_page</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;item_number&#39;</span><span class=\"p\">:</span> <span class=\"n\">item_number</span><span class=\"p\">,</span>\n                          <span class=\"s1\">&#39;year&#39;</span><span class=\"p\">:</span> <span class=\"n\">year</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citedby</span> <span class=\"o\">=</span> <span class=\"n\">citations</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">latest_citedby_update</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_text</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_deserialized&#39;</span><span class=\"p\">:</span> <span class=\"n\">response_deserialized</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;citations&#39;</span><span class=\"p\">:</span> <span class=\"n\">citations</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/harvest_citedby_links.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"sign_existing_report\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.sign_existing_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">sign_existing_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Allows the author of a Report, originally submitted anonymously,</span>\n<span class=\"sd\">    to sign the Report.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Only the author of this Report can change its anonymity status&#39;</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConfirmationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your Report is now publicly signed.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Report signing operation cancelled.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/sign_existing_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_report_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_report_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_report_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Reports.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">paginator</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">reports</span><span class=\"p\">,</span> <span class=\"mi\">25</span><span class=\"p\">)</span>\n\n    <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;page&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">page</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">PageNotAnInteger</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">EmptyPage</span><span class=\"p\">:</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">paginator</span><span class=\"o\">.</span><span class=\"n\">num_pages</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_report_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"manage_comment_metadata\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.manage_comment_metadata\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">manage_comment_metadata</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page offers Editorial Administrators tools for managing</span>\n<span class=\"sd\">    the metadata of Comments.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/manage_comment_metadata.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_report_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_comment_doi_needed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">comment_id</span><span class=\"p\">,</span> <span class=\"n\">needed</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">comment_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">elif</span> <span class=\"n\">needed</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"generic_metadata_xml_deposit\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.generic_metadata_xml_deposit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">generic_metadata_xml_deposit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method creates the metadata for non-Publication objects</span>\n<span class=\"sd\">    such as Reports and Comments, and deposits the metadata to</span>\n<span class=\"sd\">    Crossref.</span>\n<span class=\"sd\">    If there exists a relation to a SciPost-published object,</span>\n<span class=\"sd\">    the deposit uses Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">    Otherwise the deposit is done as a dataset.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">relation_to_published</span> <span class=\"o\">=</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">relation_to_published</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">create_doi_label</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># create a doi_batch_id</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"s2\">&quot;&quot;</span>\n    <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span> <span class=\"o\">+</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n    <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"n\">salt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">)[:</span><span class=\"mi\">10</span><span class=\"p\">]</span>\n    <span class=\"n\">idsalt</span> <span class=\"o\">=</span> <span class=\"n\">idsalt</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y%m</span><span class=\"si\">%d</span><span class=\"s1\">%H%M%S&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_batch_id</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">idsalt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n    <span class=\"n\">metadata_xml</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n        <span class=\"s1\">&#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch version=&quot;4.4.1&quot; xmlns=&quot;http://www.crossref.org/schema/4.4.1&quot; &#39;</span>\n        <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n        <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://www.crossref.org/schema/4.4.1 &#39;</span>\n        <span class=\"s1\">&#39;http://www.crossref.org/shema/deposit/crossref4.4.1.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;doi_batch_id&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">doi_batch_id</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi_batch_id&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;timestamp&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">timestamp</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/timestamp&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;depositor_name&gt;scipost&lt;/depositor_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;email_address&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEPOSIT_EMAIL</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/email_address&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/depositor&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;registrant&gt;scipost&lt;/registrant&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"s1\">&#39;&lt;/head&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n    <span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">relation_to_published</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;peer_review stage=&quot;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;contributors&gt;&#39;</span>\n        <span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;anonymous sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;/&gt;&#39;</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;&lt;person_name sequence=&quot;first&quot; contributor_role=&quot;&#39;</span>\n                <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&quot;&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;given_name&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/given_name&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;surname&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/surname&gt;&#39;</span>\n                <span class=\"s1\">&#39;&lt;/person_name&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"nb\">isinstance</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"n\">Publication</span><span class=\"p\">):</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">url_to_declare</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;https://scipost.org/</span><span class=\"si\">{}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;/contributors&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;review_date&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;month&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/month&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;day&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/day&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;year&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/year&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;/review_date&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;program xmlns=&quot;http://www.crossref.org/relations.xsd&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;related_item&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;description&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/description&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;inter_work_relation relationship-type=&quot;isReviewOf&quot; identifier-type=&quot;doi&quot;&gt;&#39;</span>\n            <span class=\"o\">+</span> <span class=\"n\">relation_to_published</span><span class=\"p\">[</span><span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/inter_work_relation&gt;&lt;/related_item&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/program&gt;&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">url_to_declare</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/peer_review&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/doi_batch&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n        <span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">metadata_xml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n            <span class=\"s1\">&#39;&lt;body&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;database_metadata language=&quot;en&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;titles&gt;&lt;title&gt;SciPost Reports and Comments&lt;/title&gt;&lt;/titles&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/database_metadata&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;dataset dataset_type=&quot;collection&quot;&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;doi_data&gt;&lt;doi&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_string</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/doi&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;resource&gt;https://scipost.org&#39;</span> <span class=\"o\">+</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span>\n            <span class=\"s1\">&#39;&lt;/resource&gt;&lt;/doi_data&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/dataset&gt;&lt;/database&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&#39;</span>\n            <span class=\"s1\">&#39;&lt;/body&gt;&lt;/doi_batch&gt;&#39;</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_DEBUG</span><span class=\"p\">:</span>\n        <span class=\"c1\"># CAUTION: Debug is False, production goes for real deposit!!!</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://doi.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;http://test.crossref.org/servlet/deposit&#39;</span>\n    <span class=\"n\">params</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;operation&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;doMDUpload&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_ID</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;login_passwd&#39;</span><span class=\"p\">:</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">CROSSREF_LOGIN_PASSWORD</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n    <span class=\"n\">files</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;fname&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;metadata.xml&#39;</span><span class=\"p\">,</span> <span class=\"n\">metadata_xml</span><span class=\"p\">,</span> <span class=\"s1\">&#39;multipart/form-data&#39;</span><span class=\"p\">)}</span>\n    <span class=\"n\">r</span> <span class=\"o\">=</span> <span class=\"n\">requests</span><span class=\"o\">.</span><span class=\"n\">post</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">,</span> <span class=\"n\">params</span><span class=\"o\">=</span><span class=\"n\">params</span><span class=\"p\">,</span> <span class=\"n\">files</span><span class=\"o\">=</span><span class=\"n\">files</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericDOIDeposit</span><span class=\"p\">(</span><span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"n\">ContentType</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_for_model</span><span class=\"p\">(</span><span class=\"n\">_object</span><span class=\"p\">),</span>\n                                <span class=\"n\">object_id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">content_object</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"p\">,</span>\n                                <span class=\"n\">timestamp</span><span class=\"o\">=</span><span class=\"n\">timestamp</span><span class=\"p\">,</span>\n                                <span class=\"n\">doi_batch_id</span><span class=\"o\">=</span><span class=\"n\">doi_batch_id</span><span class=\"p\">,</span>\n                                <span class=\"n\">metadata_xml</span><span class=\"o\">=</span><span class=\"n\">metadata_xml</span><span class=\"p\">,</span>\n                                <span class=\"n\">deposition_date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                <span class=\"n\">response</span><span class=\"o\">=</span><span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">)</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;response_headers&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">headers</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;response_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">r</span><span class=\"o\">.</span><span class=\"n\">text</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/generic_metadata_xml_deposit.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">mark_generic_deposit_success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">deposit_id</span><span class=\"p\">,</span> <span class=\"n\">success</span><span class=\"p\">):</span>\n    <span class=\"n\">deposit</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">GenericDOIDeposit</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">deposit_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_object</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">elif</span> <span class=\"n\">success</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">deposit_successful</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">deposit</span><span class=\"o\">.</span><span class=\"n\">content_type</span><span class=\"o\">.</span><span class=\"n\">name</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_publish_accepted_submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_object_made_citable\"><a class=\"viewcode-back\" href=\"../../../apps/journals/#journals.views.email_object_made_citable\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_object_made_citable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to the author of a Report or a Comment,</span>\n<span class=\"sd\">    to notify that the object has been made citable (doi registered).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">type_of_object</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;type_of_object&#39;</span><span class=\"p\">]</span>\n    <span class=\"n\">object_id</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_id&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_report_metadata&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n            <span class=\"n\">publication_citation</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()</span>\n            <span class=\"n\">publication_doi</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">elif</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">_object</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">object_id</span><span class=\"p\">)</span>\n        <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals:manage_comment_metadata&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">_object</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;This object does not have a DOI yet.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">type_of_object</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_citation&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_citation</span><span class=\"p\">,</span>\n                           <span class=\"s1\">&#39;publication_doi&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_doi</span><span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_report_made_citable</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;comment&#39;</span><span class=\"p\">:</span> <span class=\"n\">_object</span><span class=\"p\">,</span> <span class=\"p\">})</span>\n        <span class=\"n\">JournalUtils</span><span class=\"o\">.</span><span class=\"n\">email_comment_made_citable</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Email sent&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Viewing #</span>\n<span class=\"c1\">###########</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">report_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">comment_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">author_reply_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">comment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">(),</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">comment</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">in_issue</span><span class=\"o\">.</span><span class=\"n\">in_volume</span><span class=\"o\">.</span><span class=\"n\">in_journal</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;journal&#39;</span><span class=\"p\">:</span> <span class=\"n\">journal</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;journals/publication_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">publication_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_published</span><span class=\"p\">(</span><span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">pdf_file</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span>\n                                       <span class=\"o\">+</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"o\">.</span><span class=\"n\">replace</span><span class=\"p\">(</span><span class=\"s1\">&#39;.&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;_&#39;</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;.pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Feed DOIs to arXiv #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">This method provides arXiv with the doi and journal ref of the 100 most recent</span>\n<span class=\"sd\">publications in the journal specified by doi_label.</span>\n<span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"k\">def</span> <span class=\"nf\">arxiv_doi_feed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"p\">):</span>\n    <span class=\"n\">journal</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">doi_label</span><span class=\"o\">=</span><span class=\"n\">doi_label</span><span class=\"p\">)</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;preprint xmlns=&quot;http://arxiv.org/doi_feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &#39;</span>\n               <span class=\"s1\">&#39;identifier=&quot;SciPost.org &#39;</span> <span class=\"o\">+</span> <span class=\"n\">doi_label</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; arXiv.org DOI feed&quot; &#39;</span>\n               <span class=\"s1\">&#39;version=&quot;DOI SnappyFeed v1.0&quot; &#39;</span>\n               <span class=\"s1\">&#39;xsi:schemaLocation=&quot;http://arxiv.org/doi_feed &#39;</span>\n               <span class=\"s1\">&#39;http://arxiv.org/schemas/doi_feed.xsd&quot;&gt;&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">now</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;date year=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; month=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; day=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">),</span>\n                                                           <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%m&#39;</span><span class=\"p\">),</span> <span class=\"n\">now</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">in_issue__in_volume__in_journal</span><span class=\"o\">=</span><span class=\"n\">journal</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">100</span><span class=\"p\">]</span>\n    <span class=\"k\">for</span> <span class=\"n\">publication</span> <span class=\"ow\">in</span> <span class=\"n\">publications</span><span class=\"p\">:</span>\n        <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;article preprint_id=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; doi=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; journal_ref=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot; /&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">accepted_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">citation</span><span class=\"p\">()))</span>\n    <span class=\"n\">feedxml</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;/preprint&gt;&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">feedxml</span><span class=\"p\">,</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;text/xml&#39;</span><span class=\"p\">)</span>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/journals/views", "title": "journals.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/scipost/models.fjson b/docs/codebase/_build/json/_modules/scipost/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..9539be201f952b1ec2d81da84a30746609c76b68
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/scipost/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for scipost.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">hashlib</span>\n<span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"kn\">import</span> <span class=\"nn\">string</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">get_user_model</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">ArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">subject_areas_dict</span><span class=\"p\">,</span> <span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">,</span> <span class=\"n\">TITLE_CHOICES</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">,</span> <span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">,</span> <span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">FellowManager</span><span class=\"p\">,</span> <span class=\"n\">ContributorQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimQuerySet</span>\n\n<span class=\"n\">today</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n\n\n<div class=\"viewcode-block\" id=\"get_sentinel_user\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.get_sentinel_user\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">get_sentinel_user</span><span class=\"p\">():</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Temporary fix: eventually the &#39;to-be-removed-Contributor&#39; should be</span>\n<span class=\"sd\">    status: &quot;deactivated&quot; and anonymized.</span>\n<span class=\"sd\">    Fallback user for models relying on Contributor that is being deleted.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">get_user_model</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">username</span><span class=\"o\">=</span><span class=\"s1\">&#39;deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=-</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">user</span><span class=\"p\">)[</span><span class=\"mi\">0</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Contributor\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Contributor</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All *science* users of SciPost are Contributors.</span>\n<span class=\"sd\">    username, password, email, first_name and last_name are inherited from User.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">AUTH_USER_MODEL</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PROTECT</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_NEWLY_REGISTERED</span><span class=\"p\">,</span>\n                                      <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">CONTRIBUTOR_STATUS</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n                                  <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Main discipline&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">expertises</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">orcid_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;ORCID id&quot;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;address&quot;</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">personalwebpage</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;personal web page&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;self&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET</span><span class=\"p\">(</span><span class=\"n\">get_sentinel_user</span><span class=\"p\">),</span>\n                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;contrib_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;I accept to receive SciPost emails&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ContributorQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">, </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:contributor_info&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">get_formal_display</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_currently_available</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_EdCol_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_SP_Admin</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_MEC</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fellowships</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_VE</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n                <span class=\"ow\">or</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">)</span>\n\n<div class=\"viewcode-block\" id=\"Contributor.generate_key\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Contributor.generate_key\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">generate_key</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">feed</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Generate and save a new activation_key for the contributor, given a certain feed.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">for</span> <span class=\"n\">i</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">5</span><span class=\"p\">):</span>\n            <span class=\"n\">feed</span> <span class=\"o\">+=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">string</span><span class=\"o\">.</span><span class=\"n\">ascii_letters</span><span class=\"p\">)</span>\n        <span class=\"n\">feed</span> <span class=\"o\">=</span> <span class=\"n\">feed</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">salt</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">username</span><span class=\"o\">.</span><span class=\"n\">encode</span><span class=\"p\">(</span><span class=\"s1\">&#39;utf8&#39;</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">activation_key</span> <span class=\"o\">=</span> <span class=\"n\">hashlib</span><span class=\"o\">.</span><span class=\"n\">sha1</span><span class=\"p\">(</span><span class=\"n\">salt</span><span class=\"o\">+</span><span class=\"n\">salt</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">hexdigest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">expertises_as_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;, &#39;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">([</span><span class=\"n\">subject_areas_dict</span><span class=\"p\">[</span><span class=\"n\">exp</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">lower</span><span class=\"p\">()</span> <span class=\"k\">for</span> <span class=\"n\">exp</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">expertises</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span></div>\n\n\n<div class=\"viewcode-block\" id=\"UnavailabilityPeriod\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.UnavailabilityPeriod\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">UnavailabilityPeriod</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;unavailability_periods&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">start</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n    <span class=\"n\">end</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-start&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\"> to </span><span class=\"si\">%s</span><span class=\"s1\">)&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">end</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"Remark\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.Remark\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Remark</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">feedback</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Feedback&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nomination</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Nomination&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">motion</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;virtualmeetings.Motion&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.EICRecommendation&#39;</span><span class=\"p\">,</span>\n                                       <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;remarks&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span>\n                <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s2\">&quot;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s2\">&quot;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Invitations #</span>\n<span class=\"c1\">###############</span>\n\n<div class=\"viewcode-block\" id=\"DraftInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.DraftInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">DraftInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Draft of an invitation, filled in by an officer.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">drafted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_drafted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now_add</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">invitation_type</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RegistrationInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.RegistrationInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RegistrationInvitation</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_CONTRIBUTOR</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">message_style</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">INVITATION_STYLE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">INVITATION_FORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">personal_message</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">key_expires</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_sent</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">declined</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"CitationNotification\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.CitationNotification\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">CitationNotification</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Deprecated: Use the `invitations` app</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                            <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                            <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">cited_in_publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                             <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"AuthorshipClaim\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.AuthorshipClaim\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">claimant</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                 <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                 <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimant&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.Publication&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;commentaries.Commentary&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses.ThesisLink&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_STATUS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">AUTHORSHIP_CLAIM_PENDING</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"PrecookedEmail\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.PrecookedEmail\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">PrecookedEmail</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each instance contains an email template in both plain and html formats.</span>\n<span class=\"sd\">    Can only be created by Admins.</span>\n<span class=\"sd\">    For further use in scipost:send_precooked_email method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">email_subject</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n    <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">emailed_to</span> <span class=\"o\">=</span> <span class=\"n\">ArrayField</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">email_subject</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Static info models #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCollege\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollege\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollege</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;A SciPost Editorial College for a specific discipline.&#39;&#39;&#39;</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">unique</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">discipline</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EditorialCollegeFellowship\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.models.EditorialCollegeFellowship\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCollegeFellowship</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Editorial College Fellowship connecting Editorial College and Contributors,</span>\n<span class=\"sd\">    maybe with a limiting start/until date.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;+&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.EditorialCollege&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">affiliation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">255</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">start_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">until_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">FellowManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;college&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;start_date&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;until_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"fm\">__str__</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">is_active</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n                <span class=\"k\">return</span> <span class=\"kc\">True</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span>\n        <span class=\"k\">return</span> <span class=\"n\">today</span> <span class=\"o\">&gt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">start_date</span> <span class=\"ow\">and</span> <span class=\"n\">today</span> <span class=\"o\">&lt;=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">until_date</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/scipost/models", "title": "scipost.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/scipost/views.fjson b/docs/codebase/_build/json/_modules/scipost/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..f2a371898c22450c6b3fffbabd71198080b35e71
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/scipost/views.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for scipost.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">json</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.conf</span> <span class=\"k\">import</span> <span class=\"n\">settings</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth</span> <span class=\"k\">import</span> <span class=\"n\">login</span><span class=\"p\">,</span> <span class=\"n\">logout</span><span class=\"p\">,</span> <span class=\"n\">update_session_auth_hash</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">user_passes_test</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.views</span> <span class=\"k\">import</span> <span class=\"n\">password_reset</span><span class=\"p\">,</span> <span class=\"n\">password_reset_confirm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core</span> <span class=\"k\">import</span> <span class=\"n\">mail</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.mail</span> <span class=\"k\">import</span> <span class=\"n\">EmailMessage</span><span class=\"p\">,</span> <span class=\"n\">EmailMultiAlternatives</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.paginator</span> <span class=\"k\">import</span> <span class=\"n\">Paginator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Prefetch</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Context</span><span class=\"p\">,</span> <span class=\"n\">Template</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.http</span> <span class=\"k\">import</span> <span class=\"n\">require_POST</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.debug</span> <span class=\"k\">import</span> <span class=\"n\">cleanse_setting</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.static</span> <span class=\"k\">import</span> <span class=\"n\">serve</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.decorators</span> <span class=\"k\">import</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">haystack.generic_views</span> <span class=\"k\">import</span> <span class=\"n\">SearchView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">,</span> <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.decorators</span> <span class=\"k\">import</span> <span class=\"n\">has_contributor</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">AuthorshipClaim</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollege</span><span class=\"p\">,</span> <span class=\"n\">EditorialCollegeFellowship</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">,</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SearchForm</span><span class=\"p\">,</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">,</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">,</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">,</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">,</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">,</span> <span class=\"n\">SendPrecookedEmailForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">Utils</span><span class=\"p\">,</span> <span class=\"n\">EMAIL_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">affiliations.forms</span> <span class=\"k\">import</span> <span class=\"n\">AffiliationsFormset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">commentaries.models</span> <span class=\"k\">import</span> <span class=\"n\">Commentary</span>\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_REGISTERED</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">Journal</span><span class=\"p\">,</span> <span class=\"n\">PublicationAuthorsTable</span>\n<span class=\"kn\">from</span> <span class=\"nn\">news.models</span> <span class=\"k\">import</span> <span class=\"n\">NewsItem</span>\n<span class=\"kn\">from</span> <span class=\"nn\">submissions.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span>\\\n                               <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">partners.models</span> <span class=\"k\">import</span> <span class=\"n\">MembershipAgreement</span>\n<span class=\"kn\">from</span> <span class=\"nn\">theses.models</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLink</span>\n\n\n<span class=\"c1\">##############</span>\n<span class=\"c1\"># Utilitites #</span>\n<span class=\"c1\">##############</span>\n\n<div class=\"viewcode-block\" id=\"is_registered\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.is_registered\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method checks if user is activated assuming an validated user</span>\n<span class=\"sd\">    has at least one permission group (`Registered Contributor` or `Partner Accounts`).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SearchView</span><span class=\"p\">(</span><span class=\"n\">SearchView</span><span class=\"p\">):</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;search/search.html&#39;</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">SearchForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;search_query&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;q&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;results_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Methods not supported by Whoosh engine</span>\n        <span class=\"c1\"># ctx[&#39;stats_results&#39;] = kwargs[&#39;object_list&#39;].stats_results()</span>\n        <span class=\"c1\"># ctx[&#39;facet_counts&#39;] = kwargs[&#39;object_list&#39;].facet(&#39;text&#39;).facet_counts()</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"c1\">#############</span>\n<span class=\"c1\"># Main view</span>\n<span class=\"c1\">#############</span>\n\n<div class=\"viewcode-block\" id=\"index\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.index\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">index</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;Main page.&#39;&#39;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;latest_newsitem&#39;</span><span class=\"p\">:</span> <span class=\"n\">NewsItem</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">on_homepage</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;journals&#39;</span><span class=\"p\">:</span> <span class=\"n\">Journal</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">,</span>\n                                                                 <span class=\"s1\">&#39;-paper_nr&#39;</span><span class=\"p\">)[:</span><span class=\"mi\">3</span><span class=\"p\">],</span>\n        <span class=\"s1\">&#39;current_agreements&#39;</span><span class=\"p\">:</span> <span class=\"n\">MembershipAgreement</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">now_active</span><span class=\"p\">(),</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/index.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"protected_serve\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.protected_serve\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">protected_serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!</span>\n<span class=\"sd\">    This will be usefull eg. in the admin pages.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Only superusers may get to see secure files without an explicit serve method!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n    <span class=\"n\">document_root</span> <span class=\"o\">=</span> <span class=\"n\">settings</span><span class=\"o\">.</span><span class=\"n\">MEDIA_ROOT_SECURE</span>\n    <span class=\"k\">return</span> <span class=\"n\">serve</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">path</span><span class=\"p\">,</span> <span class=\"n\">document_root</span><span class=\"p\">,</span> <span class=\"n\">show_indexes</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># Information</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">feeds</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;subject_areas_physics&#39;</span><span class=\"p\">:</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">]}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/feeds.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">################</span>\n<span class=\"c1\"># Contributors:</span>\n<span class=\"c1\">################</span>\n\n<div class=\"viewcode-block\" id=\"register\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.register\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">register</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This public registration view shows and processes the form</span>\n<span class=\"sd\">    that will create new user account requests. After registration</span>\n<span class=\"sd\">    the Contributor will need to activate its account via the mail</span>\n<span class=\"sd\">    sent. After activation the user needs to be vetted by the SciPost</span>\n<span class=\"sd\">    admin.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">():</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">create_and_save_contributor</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_registration_email</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Disable invitations related to the new Contributor</span>\n        <span class=\"n\">RegistrationInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">declined_or_without_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_REGISTERED</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Thanks for registering to SciPost.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You will receive an email with a link to verify &#39;</span>\n                            <span class=\"s1\">&#39;your email address. &#39;</span>\n                            <span class=\"s1\">&#39;Please visit this link within 48 hours. &#39;</span>\n                            <span class=\"s1\">&#39;Your credentials will thereafter be verified. &#39;</span>\n                            <span class=\"s1\">&#39;If your registration is vetted through by the &#39;</span>\n                            <span class=\"s1\">&#39;administrators, you will be enabled to contribute.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span> <span class=\"s1\">&#39;invited&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"invitation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If a scientist has recieved an invitation (RegistrationInvitation)</span>\n<span class=\"sd\">    he/she will finish it&#39;s invitation via still view which will prefill</span>\n<span class=\"sd\">    the default registration form.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RegistrationInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">has_responded</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This invitation token has already been used, &#39;</span>\n                        <span class=\"s1\">&#39;or this email address is already associated to a registration.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;The invitation key has expired.&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">RegistrationForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"vm\">__dict__</span><span class=\"p\">)</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/register.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/accept_invitation_error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span></div>\n\n\n<div class=\"viewcode-block\" id=\"activation\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.activation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">activation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    After registration, an email verification link is sent.</span>\n<span class=\"sd\">    Once clicked, the account is activated.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">key_expires</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:request_new_activation_link&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                <span class=\"s1\">&#39;contributor_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">key</span>\n            <span class=\"p\">}))</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_active</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Many thanks for confirming your email address.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your SciPost account will soon be vetted by &#39;</span>\n                                   <span class=\"s1\">&#39;an administrator, after which you will be able to log in. &#39;</span>\n                                   <span class=\"s1\">&#39;You will soon receive an email confirmation from us!&#39;</span><span class=\"p\">),</span>\n                   <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your email has already been confirmed.&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;Please wait for vetting of your registration.&#39;</span>\n                               <span class=\"s1\">&#39; We shall strive to send you an update by email within 24 hours.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"request_new_activation_link\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.request_new_activation_link\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">request_new_activation_link</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Once a user tries to activate its account using the email verification link sent</span>\n<span class=\"sd\">    and the key has expired, the user redirected to possibly request a new token.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Generate a new email activation key and link</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;We have emailed you a new activation link.&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Please acknowledge it within its 48 hours validity &#39;</span>\n                            <span class=\"s1\">&#39;window if you want us to proceed with vetting your registration.&#39;</span><span class=\"p\">),</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/request_new_activation_link.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"unsubscribe\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.unsubscribe\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">unsubscribe</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">key</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The link to this method is included in all email communications</span>\n<span class=\"sd\">    with a Contributor. The key used is the original activation key.</span>\n<span class=\"sd\">    At this link, the Contributor can confirm that he/she does not</span>\n<span class=\"sd\">    want to receive any non-essential email notifications from SciPost.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">,</span> <span class=\"n\">activation_key</span><span class=\"o\">=</span><span class=\"n\">key</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;confirm&#39;</span><span class=\"p\">,</span> <span class=\"kc\">False</span><span class=\"p\">):</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;We have recorded your preference&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;You will no longer receive non-essential email from SciPost.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unsubscribe.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">})</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributors_to_vet</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                           <span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                           <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributors_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributors_to_vet</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_registration_request_ack</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"c1\"># process the form</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetRegistrationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">promote_to_registered_contributor</span><span class=\"p\">():</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"mi\">1</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">group</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Registered Contributors&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">group</span><span class=\"p\">)</span>\n            <span class=\"c1\"># Verify if there is a pending refereeing invitation</span>\n            <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                    <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span> <span class=\"n\">cancelled</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n                <span class=\"n\">pending_ref_inv</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n                <span class=\"n\">pending_ref_inv_exists</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been accepted. &#39;</span>\n                          <span class=\"s1\">&#39;You can now login at https://scipost.org and contribute. </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">pending_ref_inv_exists</span><span class=\"p\">:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                    <span class=\"s1\">&#39;Note that you have pending refereeing invitations; please navigate to &#39;</span>\n                    <span class=\"s1\">&#39;https://scipost.org/submissions/accept_or_decline_ref_invitations &#39;</span>\n                    <span class=\"s1\">&#39;(login required) to accept or decline them.</span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Thank you very much in advance, </span><span class=\"se\">\\n</span><span class=\"s1\">The SciPost Team.&#39;</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration accepted&#39;</span><span class=\"p\">,</span> <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">ref_reason</span> <span class=\"o\">=</span> <span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                          <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">Your registration to the SciPost publication portal &#39;</span>\n                          <span class=\"s1\">&#39;has been turned down, the reason being: &#39;</span>\n                          <span class=\"o\">+</span> <span class=\"n\">reg_ref_dict</span><span class=\"p\">[</span><span class=\"n\">ref_reason</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;. You can however still view &#39;</span>\n                          <span class=\"s1\">&#39;all SciPost contents, just not submit papers, &#39;</span>\n                          <span class=\"s1\">&#39;comments or votes. We nonetheless thank you for your interest.&#39;</span>\n                          <span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">The SciPost Team.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Further explanations: &#39;</span>\n                               <span class=\"o\">+</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span> <span class=\"o\">=</span> <span class=\"n\">EmailMessage</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost registration: unsuccessful&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">email_text</span><span class=\"p\">,</span>\n                                        <span class=\"s1\">&#39;SciPost registration &lt;registration@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"p\">[</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span>\n                                        <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">],</span>\n                                        <span class=\"n\">reply_to</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;registration@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">emailmessage</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">(</span><span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Registration request vetted.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_registration_requests&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    List all inactive users. These are users that have filled the registration form,</span>\n<span class=\"sd\">    but did not yet activate their account using the validation email.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">inactive_contributors</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span>\n                             <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span>\n                             <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-key_expires&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;inactive_contributors&#39;</span><span class=\"p\">:</span> <span class=\"n\">inactive_contributors</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;now&#39;</span><span class=\"p\">:</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/registration_requests.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_resend_registration_requests&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"registration_requests_reset\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.registration_requests_reset\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">registration_requests_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Reset specific activation_key for Contributor and resend activation mail.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">generate_key</span><span class=\"p\">()</span>\n    <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">Utils</span><span class=\"o\">.</span><span class=\"n\">send_new_activation_link_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;New key successfully generated and sent to &lt;i&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/i&gt;&#39;</span>\n                               <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:registration_requests&#39;</span><span class=\"p\">))</span></div>\n\n\n<div class=\"viewcode-block\" id=\"login_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.login_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">login_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view shows and processes a user&#39;s login session.</span>\n\n<span class=\"sd\">    The function based method login() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">AuthenticationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">authenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">user</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"n\">is_registered</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"p\">):</span>\n                <span class=\"n\">login</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">user</span><span class=\"p\">)</span>\n                <span class=\"n\">redirect_to</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">get_redirect_url</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">redirect_to</span><span class=\"p\">)</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account has not yet been vetted. &#39;</span>\n                                      <span class=\"s1\">&#39;(our admins will verify your credentials very soon)&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">user_is_inactive</span><span class=\"p\">():</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your account is not yet activated. &#39;</span>\n                                  <span class=\"s1\">&#39;Please first activate your account.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">add_error</span><span class=\"p\">(</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invalid username/password.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/login.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<div class=\"viewcode-block\" id=\"logout_view\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.logout_view\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">logout_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The function based method logout() is deprecated from</span>\n<span class=\"sd\">    Django 1.11 and replaced by Class Based Views.</span>\n\n<span class=\"sd\">    See:</span>\n<span class=\"sd\">    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">logout</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Keep contributing!&lt;/h3&gt;&#39;</span>\n                               <span class=\"s1\">&#39;You are now logged out of SciPost.&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"mark_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.mark_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">mark_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Mark period unavailable for Contributor using this view.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav_form</span> <span class=\"o\">=</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">unav_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n        <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period registered&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Template acts as a backup in case the form is invalid.</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">unav_form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/unavailability_period_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@require_POST</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"delete_unavailable_period\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.delete_unavailable_period\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">delete_unavailable_period</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">period_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&#39;&#39;&#39;</span>\n<span class=\"sd\">    Delete period unavailable registered.</span>\n<span class=\"sd\">    &#39;&#39;&#39;</span>\n    <span class=\"n\">unav</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">UnavailabilityPeriod</span><span class=\"p\">,</span>\n                             <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">period_id</span><span class=\"p\">))</span>\n    <span class=\"n\">unav</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Unavailability period deleted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Account</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unavailability_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">UnavailabilityPeriodForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;unavailabilities&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">unavailability_periods</span><span class=\"o\">.</span><span class=\"n\">future</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;start&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/account.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Editorial Actions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">permission</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span>\n        <span class=\"s1\">&#39;Ambassadors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Advisory Board&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Vetting Editors&#39;</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;Junior Ambassadors&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_superuser</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">permission</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_SP_Admin</span><span class=\"p\">():</span>\n        <span class=\"c1\"># count the number of pending registration requests</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reg_awaiting_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_validation</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submissions_to_assign&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prescreening</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_recommendations_to_prepare_for_voting&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__status</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_in_preparation&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_VE</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_page_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span>\n                                                         <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">())</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_comments_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesislink_requests_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_authorship_claims_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_MEC</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_assignments_to_consider&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;active_assignments&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span><span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_to_vet&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__editor_in_charge</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_EdCol_Admin</span><span class=\"p\">():</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_reports_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">pdf_report</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_treated_submissions_without_pdf&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/editorial_actions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Refereeing</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/refereeing.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Publications</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">publications</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-publication_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_publication_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/publications.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Submissions</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_submission_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/submissions.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Commentaries</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_commentary_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_submissions&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">commentaries</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-latest_activity&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/commentaries.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Theses</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">}</span>\n\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nr_thesis_authorships_to_claim&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span>\n        <span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;own_thesislinks&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">theses</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/theses.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Comments</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">regular_comments</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/comments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page tab: Author Replies</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;own_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">author_replies</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">),</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;partials/scipost/personal_page/author_replies.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"personal_page\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.personal_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">personal_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">tab</span><span class=\"o\">=</span><span class=\"s1\">&#39;account&#39;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Personal Page is the main view for accessing user functions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;account&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_account</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;editorial_actions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_editorial_actions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;refereeing&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_refereeing</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;publications&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_publications</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_submissions</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;commentaries&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_commentaries</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_theses</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_comments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">tab</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">_personal_page_author_replies</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;tab&#39;</span><span class=\"p\">:</span> <span class=\"n\">tab</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;needs_validation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">!=</span> <span class=\"n\">CONTRIBUTOR_NORMAL</span>\n    <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">contributor</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Refereeing</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">in_process</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n        <span class=\"n\">refereeing_tab_total_count</span> <span class=\"o\">+=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;refereeing_tab_total_count&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">refereeing_tab_total_count</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;appellation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/personal_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">change_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">PasswordChangeForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">current_user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save_new_password</span><span class=\"p\">()</span>\n        <span class=\"c1\"># Update user&#39;s session hash to stay logged in.</span>\n        <span class=\"n\">update_session_auth_hash</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your SciPost password has been successfully changed&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;partners:dashboard&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/change_password.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">})</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset_confirm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_confirm.html&#39;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">uidb64</span><span class=\"o\">=</span><span class=\"n\">uidb64</span><span class=\"p\">,</span> <span class=\"n\">token</span><span class=\"o\">=</span><span class=\"n\">token</span><span class=\"p\">,</span>\n                                  <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">reset_password</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">password_reset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">email_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_email.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">subject_template_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;scipost/reset_password_subject.txt&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">post_reset_redirect</span><span class=\"o\">=</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:login&#39;</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">institution_formset</span> <span class=\"o\">=</span> <span class=\"n\">AffiliationsFormset</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">user_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">sync_lists</span><span class=\"p\">()</span>\n        <span class=\"n\">institution_formset</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;orcid_id&#39;</span> <span class=\"ow\">in</span> <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">changed_data</span><span class=\"p\">:</span>\n            <span class=\"n\">cont_form</span><span class=\"o\">.</span><span class=\"n\">propagate_orcid</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your personal data has been updated.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:update_personal_data&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">user_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdateUserDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">cont_form</span> <span class=\"o\">=</span> <span class=\"n\">UpdatePersonalDataForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;user_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">user_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;cont_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">cont_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;institution_formset&#39;</span><span class=\"p\">:</span> <span class=\"n\">institution_formset</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/update_personal_data.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"k\">def</span> <span class=\"nf\">update_personal_data</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">has_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_contributor</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">_update_personal_data_user_only</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"claim_authorships\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.claim_authorships\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">claim_authorships</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The system auto-detects potential authorships (of submissions,</span>\n<span class=\"sd\">    papers subject to commentaries, theses, ...).</span>\n<span class=\"sd\">    The contributor must confirm/deny authorship from the</span>\n<span class=\"sd\">    Personal Page.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">publication_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                        <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                        <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">pub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">submission_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">sub_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">commentary_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                       <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_list__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                       <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">authors_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">com_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n    <span class=\"n\">thesis_authorships_to_claim</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                   <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author__contains</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n                                   <span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">author_false_claims</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n    <span class=\"n\">thesis_auth_claim_form</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaimForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;publication_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;pub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">pub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;sub_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">sub_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;commentary_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">commentary_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;com_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">com_auth_claim_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_authorships_to_claim&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_authorships_to_claim</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;thesis_auth_claim_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">thesis_auth_claim_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/claim_authorships.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_pub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">publication_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Publication</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">publication_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">publication</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_sub_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">submission_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_com_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">commentary_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Commentary</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">commentary_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">commentary</span><span class=\"o\">=</span><span class=\"n\">commentary</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@user_passes_test</span><span class=\"p\">(</span><span class=\"n\">has_contributor</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">claim_thesis_authorship</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">thesis_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">ThesisLink</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">thesis_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"p\">(</span><span class=\"n\">claimant</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">thesislink</span><span class=\"o\">=</span><span class=\"n\">thesislink</span><span class=\"p\">)</span>\n            <span class=\"n\">newclaim</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:claim_authorships&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claims</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">claims_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"s1\">&#39;0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;claims_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">claims_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/vet_authorship_claims.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_vet_authorship_claims&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">vet_authorship_claim</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">claim_id</span><span class=\"p\">,</span> <span class=\"n\">claim</span><span class=\"p\">):</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">vetting_contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">claim_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">AuthorshipClaim</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">claim_id</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">PublicationAuthorsTable</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">create</span><span class=\"p\">(</span>\n                    <span class=\"n\">publication</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"p\">,</span> <span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">commentary</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"p\">:</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_claims</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n            <span class=\"k\">if</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;1&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_as_cont</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;1&#39;</span>\n            <span class=\"k\">elif</span> <span class=\"n\">claim</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;0&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">author_false_claims</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">claimant</span><span class=\"p\">)</span>\n                <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;-1&#39;</span>\n            <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">thesislink</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">vetting_contributor</span>\n        <span class=\"n\">claim_to_vet</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:vet_authorship_claims&#39;</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"contributor_info\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.contributor_info\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">contributor_info</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    All visitors can see a digest of a</span>\n<span class=\"sd\">    Contributor&#39;s activities/contributions by clicking</span>\n<span class=\"sd\">    on the relevant name (in listing headers of Submissions, ...).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_publications</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">published</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors_registered</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_unlisted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_commentaries</span> <span class=\"o\">=</span> <span class=\"n\">Commentary</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">authors</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_theses</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLink</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author_as_cont</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor_comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n                            <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor_authorreplies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                                 <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n                                 <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_publications&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_publications</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_submissions</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_commentaries&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_commentaries</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_theses&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_theses</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_comments</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;contributor_authorreplies&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributor_authorreplies</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/contributor_info.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">####################</span>\n<span class=\"c1\"># Email facilities #</span>\n<span class=\"c1\">####################</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_group_members&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_group_members\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_group_members\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_group_members</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send bulk emails to (members of) selected groups</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailGroupMembersForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">group_members</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;group&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">user_set</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">p</span> <span class=\"o\">=</span> <span class=\"n\">Paginator</span><span class=\"p\">(</span><span class=\"n\">group_members</span><span class=\"p\">,</span> <span class=\"mi\">32</span><span class=\"p\">)</span>\n        <span class=\"k\">for</span> <span class=\"n\">pagenr</span> <span class=\"ow\">in</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page_range</span><span class=\"p\">:</span>\n            <span class=\"n\">page</span> <span class=\"o\">=</span> <span class=\"n\">p</span><span class=\"o\">.</span><span class=\"n\">page</span><span class=\"p\">(</span><span class=\"n\">pagenr</span><span class=\"p\">)</span>\n            <span class=\"k\">with</span> <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">get_connection</span><span class=\"p\">()</span> <span class=\"k\">as</span> <span class=\"n\">connection</span><span class=\"p\">:</span>\n                <span class=\"k\">for</span> <span class=\"n\">member</span> <span class=\"ow\">in</span> <span class=\"n\">page</span><span class=\"o\">.</span><span class=\"n\">object_list</span><span class=\"p\">:</span>\n                    <span class=\"k\">if</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">accepts_SciPost_emails</span><span class=\"p\">:</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personalize&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Dear &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span>\n                                          <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, </span><span class=\"se\">\\n\\n</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Dear {{ title }} {{ last_name }},&lt;br/&gt;&#39;</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n                        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">EMAIL_FOOTER</span>\n                        <span class=\"n\">url_unsubscribe</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:unsubscribe&#39;</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,</span>\n                                                        <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">])</span>\n                        <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"se\">\\n\\n</span><span class=\"s1\">Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such emails? &#39;</span>\n                                       <span class=\"s1\">&#39;Unsubscribe by visiting </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;&lt;br/&gt;</span><span class=\"se\">\\n</span><span class=\"s1\">&lt;p style=&quot;font-size: 10px;&quot;&gt;Don</span><span class=\"se\">\\&#39;</span><span class=\"s1\">t want to receive such &#39;</span>\n                            <span class=\"s1\">&#39;emails? &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;Unsubscribe&lt;/a&gt;.&lt;/p&gt;&#39;</span> <span class=\"o\">%</span> <span class=\"n\">url_unsubscribe</span><span class=\"p\">)</span>\n                        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                            <span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                            <span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">],</span>\n                            <span class=\"s1\">&#39;key&#39;</span><span class=\"p\">:</span> <span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">activation_key</span><span class=\"p\">,</span>\n                        <span class=\"p\">}</span>\n                        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n                        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n                        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                            <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                            <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                            <span class=\"p\">[</span><span class=\"n\">member</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">],</span> <span class=\"n\">connection</span><span class=\"o\">=</span><span class=\"n\">connection</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n                        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_group_members.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"email_particular\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.email_particular\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">email_particular</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n            <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">]}</span>\n            <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n                <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n                <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n            <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n            <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n            <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n                <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_subject&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email_text</span><span class=\"p\">,</span> <span class=\"s1\">&#39;SciPost Admin &lt;admin@scipost.org&gt;&#39;</span><span class=\"p\">,</span>\n                <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n                <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EmailParticularForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/email_particular.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_email_particulars&#39;</span><span class=\"p\">,</span> <span class=\"n\">return_403</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"send_precooked_email\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.send_precooked_email\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_precooked_email</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Method to send precooked emails to individuals (registered or not)</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SendPrecookedEmailForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">precookedEmail</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_option&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]</span> <span class=\"ow\">in</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This message has already been sent to this address&#39;</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">context</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">emailed_to</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">date_last_used</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">()</span>\n        <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">email_text</span> <span class=\"o\">=</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text</span>\n        <span class=\"n\">email_text_html</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;{{ email_text|linebreaks }}&#39;</span>\n        <span class=\"n\">email_context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;email_text&#39;</span><span class=\"p\">:</span> <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_text_html</span><span class=\"p\">}</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;include_scipost_summary&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">email_text</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER</span>\n            <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"n\">SCIPOST_SUMMARY_FOOTER_HTML</span>\n\n        <span class=\"n\">email_text_html</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;br/&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">EMAIL_FOOTER</span>\n        <span class=\"n\">html_template</span> <span class=\"o\">=</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">email_text_html</span><span class=\"p\">)</span>\n        <span class=\"n\">html_version</span> <span class=\"o\">=</span> <span class=\"n\">html_template</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">(</span><span class=\"n\">email_context</span><span class=\"p\">))</span>\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"n\">EmailMultiAlternatives</span><span class=\"p\">(</span>\n            <span class=\"n\">precookedEmail</span><span class=\"o\">.</span><span class=\"n\">email_subject</span><span class=\"p\">,</span>\n            <span class=\"n\">email_text</span><span class=\"p\">,</span>\n            <span class=\"n\">SciPost_from_addresses_dict</span><span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;from_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"p\">[</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">]],</span>\n            <span class=\"n\">bcc</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;admin@scipost.org&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">attach_alternative</span><span class=\"p\">(</span><span class=\"n\">html_version</span><span class=\"p\">,</span> <span class=\"s1\">&#39;text/html&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">message</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;The email has been sent.&#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to your &#39;</span><span class=\"p\">,</span>\n                   <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">),</span>\n                   <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;personal page&#39;</span><span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/send_precooked_email.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">#####################</span>\n<span class=\"c1\"># Editorial College #</span>\n<span class=\"c1\">#####################</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">EdCol_bylaws</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/EdCol_by-laws.html&#39;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"k\">def</span> <span class=\"nf\">Fellow_activity_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;editorial_assignments&#39;</span><span class=\"p\">)</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;user__last_name&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;fellows&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">):</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">fellow</span> <span class=\"o\">=</span> <span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;fellow&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">fellow</span>\n\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_ongoing&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                              <span class=\"o\">.</span><span class=\"n\">ongoing</span><span class=\"p\">()</span>\n                                              <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;assignments_completed&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">editorial_assignments</span>\n                                                <span class=\"o\">.</span><span class=\"n\">completed</span><span class=\"p\">()</span>\n                                                <span class=\"o\">.</span><span class=\"n\">get_for_user_in_pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/Fellow_activity_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">AboutView</span><span class=\"p\">(</span><span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost/about.html&#39;</span>\n    <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCollege</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span>\n                <span class=\"n\">Prefetch</span><span class=\"p\">(</span><span class=\"s1\">&#39;fellowships&#39;</span><span class=\"p\">,</span>\n                         <span class=\"n\">queryset</span><span class=\"o\">=</span><span class=\"n\">EditorialCollegeFellowship</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">select_related</span><span class=\"p\">(</span>\n                            <span class=\"s1\">&#39;contributor__user&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;contributor__user__last_name&#39;</span><span class=\"p\">),</span>\n                         <span class=\"n\">to_attr</span><span class=\"o\">=</span><span class=\"s1\">&#39;current_fellows&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">object_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">college</span> <span class=\"ow\">in</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"n\">subject_areas_raw_dict</span><span class=\"p\">[</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">college</span><span class=\"p\">)]</span>\n            <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n                <span class=\"n\">spec_list</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n            <span class=\"n\">object_list</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">((</span>\n                <span class=\"n\">college</span><span class=\"p\">,</span>\n                <span class=\"n\">spec_list</span><span class=\"p\">,</span>\n            <span class=\"p\">))</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;object_list&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">object_list</span>\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<div class=\"viewcode-block\" id=\"csrf_failure\"><a class=\"viewcode-back\" href=\"../../../apps/scipost/#scipost.views.csrf_failure\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">csrf_failure</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">reason</span><span class=\"o\">=</span><span class=\"s2\">&quot;&quot;</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Custom CSRF Failure. Informing admins via email as well.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Filter out privacy data</span>\n    <span class=\"n\">post_data</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">for</span> <span class=\"n\">key</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"o\">.</span><span class=\"n\">keys</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">key</span><span class=\"p\">:</span>\n            <span class=\"n\">post_data</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">cleanse_setting</span><span class=\"p\">(</span><span class=\"n\">key</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">[</span><span class=\"n\">key</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Email content</span>\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;ERROR&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">reason</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;USER&#39;</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;GET&#39;</span><span class=\"p\">:</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span> <span class=\"n\">post_data</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;META&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">META</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n        <span class=\"s1\">&#39;COOKIES&#39;</span><span class=\"p\">:</span> <span class=\"p\">{</span><span class=\"n\">k</span><span class=\"p\">:</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">v</span><span class=\"p\">)</span> <span class=\"k\">for</span> <span class=\"n\">k</span><span class=\"p\">,</span> <span class=\"n\">v</span> <span class=\"ow\">in</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">COOKIES</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">()},</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"n\">body</span> <span class=\"o\">=</span> <span class=\"n\">json</span><span class=\"o\">.</span><span class=\"n\">dumps</span><span class=\"p\">(</span><span class=\"n\">body</span><span class=\"p\">,</span> <span class=\"n\">indent</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail</span><span class=\"o\">.</span><span class=\"n\">mail_admins</span><span class=\"p\">(</span><span class=\"s1\">&#39;CSRF Failure&#39;</span><span class=\"p\">,</span> <span class=\"n\">body</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;csrf-failure.html&#39;</span><span class=\"p\">)</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/scipost/views", "title": "scipost.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/submissions/models.fjson b/docs/codebase/_build/json/_modules/submissions/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..2677fcd9aee0c9279b6ca6c99f8a584f1fe5a9e5
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/submissions/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for submissions.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.postgres.fields</span> <span class=\"k\">import</span> <span class=\"n\">JSONField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db.models</span> <span class=\"k\">import</span> <span class=\"n\">Q</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.functional</span> <span class=\"k\">import</span> <span class=\"n\">cached_property</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionRelatedObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span> <span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span> <span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span> <span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_REC</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span> <span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span> <span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">REPORT_NORMAL</span><span class=\"p\">,</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">ReportQuerySet</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"p\">,</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"p\">,</span>\\\n                      <span class=\"n\">EditorialCommunicationQueryset</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">,</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">GeneralSubmissionCycle</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.models</span> <span class=\"k\">import</span> <span class=\"n\">Comment</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.behaviors</span> <span class=\"k\">import</span> <span class=\"n\">TimeStampedModel</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">TITLE_CHOICES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.fields</span> <span class=\"k\">import</span> <span class=\"n\">ChoiceArrayField</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">journals.models</span> <span class=\"k\">import</span> <span class=\"n\">Publication</span>\n\n\n<div class=\"viewcode-block\" id=\"Submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Submission</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Submission is a SciPost register of an ArXiv article. This object is the central</span>\n<span class=\"sd\">    instance for every action, recommendation, communication, etc. etc. that is related to the</span>\n<span class=\"sd\">    refereeing cycle of a Submission. A possible Publication object is later directly related</span>\n<span class=\"sd\">    to this Submission instance.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">author_comments</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">author_list</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;author list&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">)</span>\n    <span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;EIC&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                         <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">is_current</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">is_resubmission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">list_of_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">referees_suggested</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">secondary_areas</span> <span class=\"o\">=</span> <span class=\"n\">ChoiceArrayField</span><span class=\"p\">(</span>\n        <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">),</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Refereeing fields</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNASSIGNED</span><span class=\"p\">)</span>\n    <span class=\"n\">refereeing_cycle</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_CYCLES</span><span class=\"p\">,</span>\n                                        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">CYCLE_DEFAULT</span><span class=\"p\">)</span>\n    <span class=\"n\">fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n                                    <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Primary subject area&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SUBMISSION_TYPE</span><span class=\"p\">,</span>\n                                       <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">submitted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                     <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submitted_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_fellows</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;colleges.Fellowship&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voting_pool&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Replace this by foreignkey?</span>\n    <span class=\"n\">submitted_to_journal</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_SUBMIT</span><span class=\"p\">,</span>\n                                            <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Journal to be submitted to&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">proceedings</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;proceedings.Proceedings&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                    <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Authors which have been mapped to contributors:</span>\n    <span class=\"n\">authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                            <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">authors_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                  <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_submissions&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># iThenticate Reports</span>\n    <span class=\"n\">plagiarism_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">OneToOneField</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.iThenticateReport&#39;</span><span class=\"p\">,</span>\n                                             <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SET_NULL</span><span class=\"p\">,</span>\n                                             <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Arxiv identifiers with/without version number</span>\n    <span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">15</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000v0&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_identifier_wo_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;0000.00000&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">arxiv_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;arXiv link (including version nr)&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">pdf_refereeing_pack</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REFEREE/%Y/%m/&#39;</span><span class=\"p\">,</span>\n                                           <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Metadata</span>\n    <span class=\"n\">metadata</span> <span class=\"o\">=</span> <span class=\"n\">JSONField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"p\">{},</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">submission_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;submission date&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">)</span>\n    <span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;acceptance date&#39;</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">auto_now</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">app_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__init__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"fm\">__init__</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Fill `arxiv_identifier_w_vn_nr` as a dummy field for convenience</span>\n        <span class=\"n\">arxiv_w_vn</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">{arxiv}</span><span class=\"s1\">v</span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">=</span> <span class=\"n\">arxiv_w_vn</span>\n\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">_update_cycle</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">header</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span>\n                  <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">is_current</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (current version)&#39;</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (deprecated version &#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">header</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; (published as </span><span class=\"si\">%s</span><span class=\"s1\"> (</span><span class=\"si\">%s</span><span class=\"s1\">))&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">publication_date</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"k\">return</span> <span class=\"n\">header</span>\n\n<div class=\"viewcode-block\" id=\"Submission.touch\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.touch\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">touch</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Update latest activity as a service &quot;&quot;&quot;</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n<div class=\"viewcode-block\" id=\"Submission.comments_set_complete\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Submission.comments_set_complete\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">comments_set_complete</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return comments to Submission, comments on Reports of Submission and</span>\n<span class=\"sd\">        nested comments related to this Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Comment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__reports__submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">)</span> <span class=\"o\">|</span>\n                                      <span class=\"n\">Q</span><span class=\"p\">(</span><span class=\"n\">comments__submissions</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">))</span><span class=\"o\">.</span><span class=\"n\">distinct</span><span class=\"p\">()</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">_update_cycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Append the specific submission cycle to the instance to eventually handle the</span>\n<span class=\"sd\">        complete submission cycle outside the submission instance itself.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_SHORT</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">ShortSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">DirectRecommendationSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cycle</span> <span class=\"o\">=</span> <span class=\"n\">GeneralSubmissionCycle</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">eic_recommendation_required</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_EIC_RECOMMENDATION_REQUIRED</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">reporting_deadline_has_passed</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">original_submission_date</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">submission_date</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">thread</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all versions of the Submission with that arxiv id.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission that are publicly accessible.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">other_versions_pool</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Return all other versions of the Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span>\n        <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-arxiv_vn_nr&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Underneath: All very inefficient methods as they initiate a new query</span>\n    <span class=\"k\">def</span> <span class=\"nf\">count_accepted_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_declined_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_pending_invitations</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_invited_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_contrib_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">count_obtained_reports</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_general_event</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_author</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_AUTHOR</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">):</span>\n        <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"p\">(</span>\n            <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"p\">,</span>\n            <span class=\"n\">event</span><span class=\"o\">=</span><span class=\"n\">EVENT_FOR_EIC</span><span class=\"p\">,</span>\n            <span class=\"n\">text</span><span class=\"o\">=</span><span class=\"n\">message</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n        <span class=\"n\">event</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span></div>\n\n\n<div class=\"viewcode-block\" id=\"SubmissionEvent\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.SubmissionEvent\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">SubmissionEvent</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The SubmissionEvent&#39;s goal is to act as a messaging/logging model</span>\n<span class=\"sd\">    for the Submission cycle. Its main audience will be the author(s) and</span>\n<span class=\"sd\">    the Editor-in-charge of a Submission.</span>\n\n<span class=\"sd\">    Be aware!</span>\n<span class=\"sd\">    Both the author and editor-in-charge will read the submission event.</span>\n<span class=\"sd\">    Make sure the right text is given to the right event-type, to protect</span>\n<span class=\"sd\">    the fellow&#39;s identity.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;events&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">event</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">EVENT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">EVENT_GENERAL</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEventQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">),</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_event_display</span><span class=\"p\">())</span></div>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialAssignment\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialAssignment\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialAssignment</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    EditorialAssignment is a registration for Fellows of their duties of being a</span>\n<span class=\"sd\">    Editor-in-charge for a specific Submission. This model could start as a invitation only,</span>\n<span class=\"sd\">    which should then be accepted or declined by the invited.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># attribute `deprecated&#39; becomes True if another Fellow becomes Editor-in-charge</span>\n    <span class=\"n\">deprecated</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">completed</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">date_created</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_assignments&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to become EIC of &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, requested on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_created</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:assignment_request&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span></div>\n\n\n<div class=\"viewcode-block\" id=\"RefereeInvitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.RefereeInvitation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invitations&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">TITLE_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">first_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">last_name</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">30</span><span class=\"p\">)</span>\n    <span class=\"n\">email_address</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">EmailField</span><span class=\"p\">()</span>\n    <span class=\"c1\"># if Contributor not found, person is invited to register</span>\n    <span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">40</span><span class=\"p\">)</span>\n    <span class=\"n\">date_invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;referee_invited_by&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">)</span>\n    <span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_NULLBOOL</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ASSIGNMENT_REFUSAL_REASONS</span><span class=\"p\">,</span>\n                                      <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if a Report has been submitted</span>\n    <span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>  <span class=\"c1\"># True if EIC has deactivated invitation</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; to referee &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span>\n                <span class=\"s1\">&#39;, invited on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_invited</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">,))</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">referee_str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;, &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">first_name</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">related_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">reset_content</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">=</span> <span class=\"mi\">0</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">fulfilled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">False</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports:</span>\n<span class=\"c1\">###########</span>\n\n<div class=\"viewcode-block\" id=\"Report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">Report</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Both types of reports, invited or contributed.</span>\n\n<span class=\"sd\">    This Report model acts as both a regular `Report` and a `FollowupReport`; A normal Report</span>\n<span class=\"sd\">    should have all fields required, whereas a FollowupReport only has the `report` field as</span>\n<span class=\"sd\">    a required field.</span>\n\n<span class=\"sd\">    Important note!</span>\n<span class=\"sd\">    Due to the construction of the two different types within a single model, it is important</span>\n<span class=\"sd\">    to explicitly implement the perticular differences in for example the form used.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">16</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_STATUSES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">STATUS_UNVETTED</span><span class=\"p\">)</span>\n    <span class=\"n\">report_type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">32</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_TYPES</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">REPORT_NORMAL</span><span class=\"p\">)</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">0</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">help_text</span><span class=\"o\">=</span><span class=\"s1\">&#39;This number is a unique number &#39;</span>\n                                                           <span class=\"s1\">&#39;refeering to the Report nr. of &#39;</span>\n                                                           <span class=\"s1\">&#39;the Submission&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;report_vetted_by&quot;</span><span class=\"p\">,</span>\n                                  <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `invited&#39; filled from RefereeInvitation objects at moment of report submission</span>\n    <span class=\"n\">invited</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># `flagged&#39; if author of report has been flagged by submission authors (surname check only)</span>\n    <span class=\"n\">flagged</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                               <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">qualification</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REFEREE_QUALIFICATION</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Qualification to referee this: I am&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Text-based reporting</span>\n    <span class=\"n\">strengths</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">weaknesses</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a Submission</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Qualities:</span>\n    <span class=\"n\">validity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">significance</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                    <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">originality</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">clarity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">PositiveSmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">RANKING_CHOICES</span><span class=\"p\">,</span>\n                                               <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">formatting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                          <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of paper formatting&quot;</span><span class=\"p\">)</span>\n    <span class=\"n\">grammar</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">QUALITY_SPEC</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                       <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;Quality of English grammar&quot;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the Editors only&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">needs_doi</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">NullBooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"n\">doideposit_needs_updating</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">genericdoideposit</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;journals.GenericDOIDeposit&#39;</span><span class=\"p\">,</span>\n                                        <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;genericdoideposit&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">anonymous</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Publish anonymously&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pdf_report</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">FileField</span><span class=\"p\">(</span><span class=\"n\">upload_to</span><span class=\"o\">=</span><span class=\"s1\">&#39;UPLOADS/REPORTS/%Y/%m/&#39;</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">200</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ReportQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;report_nr&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;reports&#39;</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; on &#39;</span> <span class=\"o\">+</span>\n                <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">50</span><span class=\"p\">])</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_in_draft</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_vetted</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Control Report count per Submission.</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">:</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"mi\">1</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">create_doi_label</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;SciPost.Report.&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">)</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;#report_&#39;</span> <span class=\"o\">+</span> <span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">doi_string</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;10.21468/&#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_label</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"nd\">@cached_property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">title</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        This property is (mainly) used to let Comments get the title of the Submission without</span>\n<span class=\"sd\">        annoying logic.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">is_followup_report</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the</span>\n<span class=\"sd\">        author of the report already has a vetted report in the series of the specific Submission.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"n\">submission__arxiv_vn_nr__lt</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_vn_nr</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">())</span>\n\n<div class=\"viewcode-block\" id=\"Report.latest_report_from_series\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.Report.latest_report_from_series\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">latest_report_from_series</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Get latest Report from the same author for the Submission series.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">return</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n                <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission__arxiv_identifier_wo_vn_nr&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">last</span><span class=\"p\">())</span></div>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">associated_published_doi</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return the doi of the published object.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n        <span class=\"k\">return</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">relation_to_published</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Check if the Report relates to a SciPost-published object.</span>\n<span class=\"sd\">        If it is, return a dict with info on relation to the published object,</span>\n<span class=\"sd\">        based on Crossref&#39;s peer review content type.</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">publication</span> <span class=\"o\">=</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">accepted_submission__arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Publication</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">relation</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;isReviewOfDOI&#39;</span><span class=\"p\">:</span> <span class=\"n\">publication</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;stage&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;pre-publication&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;type&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;referee-report&#39;</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;title&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Report on &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n            <span class=\"s1\">&#39;contributor_role&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;reviewer&#39;</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">relation</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">citation</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">citation</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span><span class=\"p\">:</span>\n            <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">anonymous</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Anonymous, &#39;</span>\n            <span class=\"k\">else</span><span class=\"p\">:</span>\n                <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;Report on arXiv:</span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;delivered </span><span class=\"si\">%s</span><span class=\"s1\">, &#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">date_submitted</span><span class=\"o\">.</span><span class=\"n\">strftime</span><span class=\"p\">(</span><span class=\"s1\">&#39;%Y-%m-</span><span class=\"si\">%d</span><span class=\"s1\">&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">citation</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;doi: </span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span> <span class=\"o\">%</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doi_string</span>\n        <span class=\"k\">return</span> <span class=\"n\">citation</span></div>\n\n\n<span class=\"c1\">##########################</span>\n<span class=\"c1\"># EditorialCommunication #</span>\n<span class=\"c1\">##########################</span>\n\n<div class=\"viewcode-block\" id=\"EditorialCommunication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EditorialCommunication\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EditorialCommunication</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Each individual communication between Editor-in-charge</span>\n<span class=\"sd\">    to and from Referees and Authors becomes an instance of this class.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">ED_COMM_CHOICES</span><span class=\"p\">)</span>\n    <span class=\"n\">timestamp</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">()</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationQueryset</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;timestamp&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">default_related_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;editorial_communications&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">output</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">comtype</span>\n        <span class=\"k\">if</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span>\n        <span class=\"n\">output</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"s1\">&#39; for submission &#39;</span> <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; by &#39;</span>\n                   <span class=\"o\">+</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">output</span></div>\n\n\n<div class=\"viewcode-block\" id=\"EICRecommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.EICRecommendation\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">EICRecommendation</span><span class=\"p\">(</span><span class=\"n\">SubmissionRelatedObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The EICRecommendation is the recommendation of a Submission written by</span>\n<span class=\"sd\">    the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by</span>\n<span class=\"sd\">    a subset of Fellows and should contain the actual publication decision.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions.Submission&#39;</span><span class=\"p\">,</span> <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">,</span>\n                                   <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eicrecommendations&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">date_submitted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_authors</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">requested_changes</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s2\">&quot;requested changes&quot;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">remarks_for_editorial_college</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                                     <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;optional remarks for the&#39;</span>\n                                                                  <span class=\"s1\">&#39; Editorial College&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">REPORT_REC</span><span class=\"p\">)</span>\n    <span class=\"n\">version</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">SmallIntegerField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">)</span>\n    <span class=\"n\">active</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Editorial Fellows who have assessed this recommendation:</span>\n    <span class=\"n\">eligible_to_vote</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                              <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;eligible_to_vote&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_for</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_for&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_against</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_against&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voted_abstain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                           <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;voted_abstain&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">voting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"s1\">&#39;date submitted&#39;</span><span class=\"p\">,</span> <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationQuerySet</span><span class=\"o\">.</span><span class=\"n\">as_manager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">unique_together</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;version&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">ordering</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;version&#39;</span><span class=\"p\">]</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"s1\">&#39;</span><span class=\"si\">{title}</span><span class=\"s1\"> by </span><span class=\"si\">{author}</span><span class=\"s1\">, </span><span class=\"si\">{recommendation}</span><span class=\"s1\"> version </span><span class=\"si\">{version}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n            <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">[:</span><span class=\"mi\">20</span><span class=\"p\">],</span>\n            <span class=\"n\">author</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">[:</span><span class=\"mi\">30</span><span class=\"p\">],</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">(),</span>\n            <span class=\"n\">version</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">version</span><span class=\"p\">,</span>\n        <span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"c1\"># TODO: Fix this weird redirect, but it&#39;s neccesary for the notifications to have one.</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">notification_name</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_for</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_against</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">nr_abstained</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">may_be_reformulated</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Already reformulated before; please use the latest version</span>\n            <span class=\"k\">return</span> <span class=\"kc\">False</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]</span></div>\n\n\n<div class=\"viewcode-block\" id=\"iThenticateReport\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">iThenticateReport</span><span class=\"p\">(</span><span class=\"n\">TimeStampedModel</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    iThenticateReport is the SciPost register of an iThenticate report. It saves</span>\n<span class=\"sd\">    basic information coming from iThenticate into the SciPost database for easy access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">uploaded_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">processed_time</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">doc_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">primary_key</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">part_id</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">percent_match</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">IntegerField</span><span class=\"p\">(</span><span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">class</span> <span class=\"nc\">Meta</span><span class=\"p\">:</span>\n        <span class=\"n\">verbose_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Report&#39;</span>\n        <span class=\"n\">verbose_name_plural</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;iThenticate Reports&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:plagiarism&#39;</span><span class=\"p\">,</span> <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span>\n                            <span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span>\n                            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">})</span>\n        <span class=\"k\">return</span> <span class=\"kc\">None</span>\n\n<div class=\"viewcode-block\" id=\"iThenticateReport.get_report_url\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.models.iThenticateReport.get_report_url\">[docs]</a>    <span class=\"k\">def</span> <span class=\"nf\">get_report_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">        Request new read-only url from iThenticate and return.</span>\n\n<span class=\"sd\">        Note: The read-only link is valid for only 15 minutes, saving may be worthless</span>\n<span class=\"sd\">        &quot;&quot;&quot;</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"s1\">&#39;&#39;</span>\n\n        <span class=\"kn\">from</span> <span class=\"nn\">.plagiarism</span> <span class=\"k\">import</span> <span class=\"n\">iThenticate</span>\n        <span class=\"n\">plagiarism</span> <span class=\"o\">=</span> <span class=\"n\">iThenticate</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">plagiarism</span><span class=\"o\">.</span><span class=\"n\">get_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">part_id</span><span class=\"p\">)</span></div>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Report </span><span class=\"si\">{doc_id}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">doc_id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">doc_id</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">):</span>\n            <span class=\"n\">_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39; on Submission </span><span class=\"si\">{arxiv}</span><span class=\"s1\">&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                        <span class=\"n\">arxiv</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">_str</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">save</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">obj</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"s1\">&#39;to_submission&#39;</span><span class=\"p\">)</span> <span class=\"ow\">and</span> <span class=\"n\">kwargs</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;commit&#39;</span><span class=\"p\">,</span> <span class=\"kc\">True</span><span class=\"p\">):</span>\n            <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">to_submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">obj</span>\n\n    <span class=\"nd\">@property</span>\n    <span class=\"k\">def</span> <span class=\"nf\">score</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">percent_match</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/submissions/models", "title": "submissions.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/submissions/views.fjson b/docs/codebase/_build/json/_modules/submissions/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..8e6de121398fe3f1dd6aed9ee8786d1413edb611
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/submissions/views.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for submissions.views</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">import</span> <span class=\"nn\">datetime</span>\n<span class=\"kn\">import</span> <span class=\"nn\">feedparser</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib</span> <span class=\"k\">import</span> <span class=\"n\">messages</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.decorators</span> <span class=\"k\">import</span> <span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">permission_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.auth.models</span> <span class=\"k\">import</span> <span class=\"n\">Group</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.exceptions</span> <span class=\"k\">import</span> <span class=\"n\">PermissionDenied</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.core.urlresolvers</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span><span class=\"p\">,</span> <span class=\"n\">reverse_lazy</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">transaction</span><span class=\"p\">,</span> <span class=\"n\">IntegrityError</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.http</span> <span class=\"k\">import</span> <span class=\"n\">Http404</span><span class=\"p\">,</span> <span class=\"n\">HttpResponse</span><span class=\"p\">,</span> <span class=\"n\">HttpResponseRedirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">,</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">,</span> <span class=\"n\">render</span><span class=\"p\">,</span> <span class=\"n\">redirect</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.template</span> <span class=\"k\">import</span> <span class=\"n\">Template</span><span class=\"p\">,</span> <span class=\"n\">Context</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils.decorators</span> <span class=\"k\">import</span> <span class=\"n\">method_decorator</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.base</span> <span class=\"k\">import</span> <span class=\"n\">RedirectView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.detail</span> <span class=\"k\">import</span> <span class=\"n\">DetailView</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.edit</span> <span class=\"k\">import</span> <span class=\"n\">CreateView</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.generic.list</span> <span class=\"k\">import</span> <span class=\"n\">ListView</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">guardian.shortcuts</span> <span class=\"k\">import</span> <span class=\"n\">assign_perm</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">,</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span><span class=\"p\">,</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">,</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">,</span> <span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span>\\\n                       <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.models</span> <span class=\"k\">import</span> <span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">EICRecommendation</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignment</span><span class=\"p\">,</span>\\\n                    <span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">Report</span><span class=\"p\">,</span> <span class=\"n\">SubmissionEvent</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.mixins</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionAdminViewMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.forms</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">,</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionSearchForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">,</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">,</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">,</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">EICRecommendationForm</span><span class=\"p\">,</span> <span class=\"n\">ReportForm</span><span class=\"p\">,</span> <span class=\"n\">VetReportForm</span><span class=\"p\">,</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">,</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">,</span>\\\n                   <span class=\"n\">iThenticateReportForm</span><span class=\"p\">,</span> <span class=\"n\">SubmissionPoolFilterForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.utils</span> <span class=\"k\">import</span> <span class=\"n\">SubmissionUtils</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">colleges.permissions</span> <span class=\"k\">import</span> <span class=\"n\">fellowship_required</span><span class=\"p\">,</span> <span class=\"n\">fellowship_or_admin_required</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.views</span> <span class=\"k\">import</span> <span class=\"n\">MailEditingSubView</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.forms</span> <span class=\"k\">import</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">,</span> <span class=\"n\">RemarkForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.mixins</span> <span class=\"k\">import</span> <span class=\"n\">PaginationMixin</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.models</span> <span class=\"k\">import</span> <span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">Remark</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">comments.forms</span> <span class=\"k\">import</span> <span class=\"n\">CommentForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.constants</span> <span class=\"k\">import</span> <span class=\"n\">INVITATION_REFEREEING</span>\n<span class=\"kn\">from</span> <span class=\"nn\">invitations.models</span> <span class=\"k\">import</span> <span class=\"n\">RegistrationInvitation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">mails.utils</span> <span class=\"k\">import</span> <span class=\"n\">DirectMailUtil</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.forms</span> <span class=\"k\">import</span> <span class=\"n\">ProofsDecisionForm</span>\n<span class=\"kn\">from</span> <span class=\"nn\">production.models</span> <span class=\"k\">import</span> <span class=\"n\">ProductionStream</span>\n\n<span class=\"kn\">import</span> <span class=\"nn\">strings</span>\n\n\n<span class=\"c1\">###############</span>\n<span class=\"c1\"># SUBMISSIONS:</span>\n<span class=\"c1\">###############</span>\n\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">login_required</span><span class=\"p\">,</span> <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"nd\">@method_decorator</span><span class=\"p\">(</span><span class=\"n\">permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">),</span>\n                  <span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;dispatch&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">class</span> <span class=\"nc\">RequestSubmission</span><span class=\"p\">(</span><span class=\"n\">CreateView</span><span class=\"p\">):</span>\n    <span class=\"n\">success_url</span> <span class=\"o\">=</span> <span class=\"n\">reverse_lazy</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:prefill_using_identifier&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_form_kwargs</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">kwargs</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_form_kwargs</span><span class=\"p\">()</span>\n        <span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;requested_by&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span>\n        <span class=\"k\">return</span> <span class=\"n\">kwargs</span>\n\n    <span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n    <span class=\"k\">def</span> <span class=\"nf\">form_valid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The manuscript has been submitted to </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">())</span>\n\n        <span class=\"n\">text</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for your Submission to SciPost&lt;/h3&gt;&#39;</span>\n                <span class=\"s1\">&#39;Your Submission will soon be handled by an Editor.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">text</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">},</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">)</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_resubmission_ack_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_reappointment_email</span><span class=\"p\">()</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Send emails</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_authors_submission_ack_email</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">HttpResponseRedirect</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">success_url</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">form_invalid</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"n\">form</span><span class=\"p\">):</span>\n        <span class=\"k\">for</span> <span class=\"n\">error_messages</span> <span class=\"ow\">in</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">errors</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">error_messages</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">form_invalid</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_submit_manuscript&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">prefill_using_arxiv_identifier</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">query_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionIdentifierForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span>\n                                          <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">prefill_data</span> <span class=\"o\">=</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">request_arxiv_preprint_form_prefill_data</span><span class=\"p\">()</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RequestSubmissionForm</span><span class=\"p\">(</span><span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"n\">prefill_data</span><span class=\"p\">,</span> <span class=\"n\">requested_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Submit message to user</span>\n        <span class=\"k\">if</span> <span class=\"n\">query_form</span><span class=\"o\">.</span><span class=\"n\">submission_is_resubmission</span><span class=\"p\">():</span>\n            <span class=\"n\">resubmessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;There already exists a preprint with this arXiv identifier &#39;</span>\n                            <span class=\"s1\">&#39;but a different version number. </span><span class=\"se\">\\n</span><span class=\"s1\">Your Submission will be &#39;</span>\n                            <span class=\"s1\">&#39;handled as a resubmission.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">resubmessage</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">strings</span><span class=\"o\">.</span><span class=\"n\">acknowledge_arxiv_query</span><span class=\"p\">,</span> <span class=\"n\">fail_silently</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n            <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"p\">}</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">query_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_prefill_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">SubmissionListView</span><span class=\"p\">(</span><span class=\"n\">PaginationMixin</span><span class=\"p\">,</span> <span class=\"n\">ListView</span><span class=\"p\">):</span>\n    <span class=\"n\">model</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionSearchForm</span>\n    <span class=\"n\">submission_search_list</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">paginate_by</span> <span class=\"o\">=</span> <span class=\"mi\">10</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_queryset</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public_newest</span><span class=\"p\">()</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=-</span><span class=\"mi\">60</span><span class=\"p\">),</span>\n                <span class=\"n\">submitted_to_journal</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span> <span class=\"ow\">and</span> <span class=\"s1\">&#39;nrweeksback&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">nrweeksback</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n                <span class=\"n\">discipline</span><span class=\"o\">=</span><span class=\"n\">discipline</span><span class=\"p\">,</span>\n                <span class=\"n\">latest_activity__gte</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">weeks</span><span class=\"o\">=-</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">nrweeksback</span><span class=\"p\">))</span>\n            <span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">queryset</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">search_results</span><span class=\"p\">()</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">queryset</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Call the base implementation first to get a context</span>\n        <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form into the context!</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span>\n\n        <span class=\"c1\"># To customize display in the template</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;to_journal&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;to_journal&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"s1\">&#39;discipline&#39;</span> <span class=\"ow\">in</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;discipline&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;nrweeksback&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;browse&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"ow\">not</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_changed</span><span class=\"p\">():</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;recent&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">context</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail_wo_vn_nr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_wo_vn_nr</span><span class=\"p\">,</span>\n                                   <span class=\"n\">is_current</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span><span class=\"p\">(</span><span class=\"n\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">))</span>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">submission_detail</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span>\n                               <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                               <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">))</span>\n        <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;proofs_decision_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">ProofsDecisionForm</span><span class=\"p\">()</span>\n    <span class=\"k\">except</span> <span class=\"ne\">AttributeError</span><span class=\"p\">:</span>\n        <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">unfinished_report_for_user</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">in</span> <span class=\"n\">SUBMISSION_STATUS_PUBLICLY_INVISIBLE</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">groups</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">name__in</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"s1\">&#39;SciPost Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">,</span>\n                                                         <span class=\"s1\">&#39;Editorial College&#39;</span><span class=\"p\">])</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">()</span>\n            <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">is_author</span><span class=\"p\">):</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">CommentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">invited_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">contributed_reports</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">invited</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">author_replies</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">comments</span><span class=\"o\">.</span><span class=\"n\">vetted</span><span class=\"p\">()</span>\n                      <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">is_author_reply</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_submitted&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># User is referee for the Submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">is_authenticated</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitations</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitations</span><span class=\"p\">:</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editorial_communications</span><span class=\"o\">.</span><span class=\"n\">for_referees</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comments&#39;</span><span class=\"p\">:</span> <span class=\"n\">comments</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invited_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">invited_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;contributed_reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">contributed_reports</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;unfinished_report_for_user&#39;</span><span class=\"p\">:</span> <span class=\"n\">unfinished_report_for_user</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;author_replies&#39;</span><span class=\"p\">:</span> <span class=\"n\">author_replies</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;is_author_unchecked&#39;</span><span class=\"p\">:</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;invitations&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitations</span><span class=\"p\">,</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/submission_detail.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<div class=\"viewcode-block\" id=\"report_detail_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.report_detail_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">report_detail_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Download the PDF of a Report if available.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span>\n                               <span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span>\n                               <span class=\"n\">pdf_report__isnull</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span> <span class=\"n\">report_nr</span><span class=\"o\">=</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">pdf_report</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">_report-</span><span class=\"si\">%i</span><span class=\"s1\">.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">report_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<div class=\"viewcode-block\" id=\"submission_refereeing_package_pdf\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submission_refereeing_package_pdf\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submission_refereeing_package_pdf</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view let&#39;s the user download all Report PDF&#39;s in a single merged PDF.</span>\n<span class=\"sd\">    The merging takes places every time its downloaded to make sure all available report PDF&#39;s</span>\n<span class=\"sd\">    are included and the EdColAdmin doesn&#39;t have to compile the package every time again.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">public</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exclude</span><span class=\"p\">(</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">=</span><span class=\"s1\">&#39;&#39;</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">response</span> <span class=\"o\">=</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">pdf_refereeing_pack</span><span class=\"o\">.</span><span class=\"n\">read</span><span class=\"p\">(),</span> <span class=\"n\">content_type</span><span class=\"o\">=</span><span class=\"s1\">&#39;application/pdf&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">filename</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\">-refereeing-package.pdf&#39;</span> <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span>\n    <span class=\"n\">response</span><span class=\"p\">[</span><span class=\"s1\">&#39;Content-Disposition&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;filename=&#39;</span> <span class=\"o\">+</span> <span class=\"n\">filename</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">response</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"reports_accepted_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reports_accepted_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reports_accepted_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">()</span>\n               <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_report&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">prefetch_related</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">reports</span> <span class=\"o\">=</span> <span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;reports&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">report_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">accepted</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportPDFForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:reports_accepted_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/report_compile_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"treated_submissions_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.treated_submissions_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">treated_submissions_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This view lists all accepted Reports. This shows if Report needs a PDF update/compile</span>\n<span class=\"sd\">    in a convenient way.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;pdf_refereeing_pack&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-acceptance_date&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_manage_reports&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">treated_submission_pdf_compile</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">treated</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionReportsForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">FILES</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Upload complete.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:treated_submissions_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/treated_submission_pdf_compile.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"c1\">######################</span>\n<span class=\"c1\"># Editorial workflow #</span>\n<span class=\"c1\">######################</span>\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_workflow\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_workflow\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_workflow</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Summary page for Editorial Fellows, containing a digest</span>\n<span class=\"sd\">    of the actions to take to handle Submissions.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/editorial_workflow.html&#39;</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"pool\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.pool\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The Submissions pool contains all submissions which are undergoing</span>\n<span class=\"sd\">    the editorial process, from submission</span>\n<span class=\"sd\">    to publication acceptance or rejection.</span>\n<span class=\"sd\">    All members of the Editorial College have access.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"c1\"># Search</span>\n    <span class=\"n\">search_form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionPoolFilterForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">GET</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">search_form</span><span class=\"o\">.</span><span class=\"n\">search</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Mainly as fallback for the old-pool while in test phase.</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span>\n    <span class=\"n\">recs_to_vote_on</span> <span class=\"o\">=</span> <span class=\"n\">recommendations</span><span class=\"o\">.</span><span class=\"n\">user_may_vote_on</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Forms</span>\n    <span class=\"n\">consider_assignment_form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">()</span>\n    <span class=\"n\">rec_vote_form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">()</span>\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;status&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;-submission_date&#39;</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;submission_status&#39;</span><span class=\"p\">:</span> <span class=\"n\">SUBMISSION_STATUS</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recommendations&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendations</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;consider_assignment_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">consider_assignment_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;recs_to_vote_on&#39;</span><span class=\"p\">:</span> <span class=\"n\">recs_to_vote_on</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;rec_vote_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">rec_vote_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;remark_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">remark_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n\n    <span class=\"c1\"># Show specific submission in the pool</span>\n    <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span>\n                <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n\n    <span class=\"c1\"># EdColAdmin related variables</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;latest_submission_events&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionEvent</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">for_eic</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">last_hours</span><span class=\"p\">()</span>\\\n            <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submissions&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"c1\"># Pool gets Submission details via ajax request</span>\n    <span class=\"k\">if</span> <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span> <span class=\"ow\">and</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">is_ajax</span><span class=\"p\">():</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;partials/submissions/pool/submission_details.html&#39;</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">template</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/pool.html&#39;</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">template</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"add_remark\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.add_remark\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">add_remark</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    With this method, an Editorial Fellow or Board Member</span>\n<span class=\"sd\">    is adding a remark on a Submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">remark_form</span> <span class=\"o\">=</span> <span class=\"n\">RemarkForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                        <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                        <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">remark_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your remark has succesfully been posted&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The form was invalidly filled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"assign_submission\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assign_submission\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assign_submission</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Assign Editor-in-charge to Submission.</span>\n<span class=\"sd\">    Action done by SciPost Administration or Editorial College Administration.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">ed_assignment</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">ed_assignment</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_assignment_request_email</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Your assignment request has been sent successfully.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission_to_assign&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_request\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_request\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_request</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">assignment_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Process EditorialAssignment acceptance/denial form or show if not submitted.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignment</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">assignment_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n\n    <span class=\"k\">elif</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                        <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Assignments can get stuck here,</span>\n        <span class=\"c1\"># if errormessage is given the contributor can&#39;t close the assignment!!</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderAssignmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">to</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n            <span class=\"k\">if</span> <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n                <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvents</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                          <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;unassigned&#39;</span>\n\n            <span class=\"c1\"># Save assignment and submission</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">msg</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Thank you for considering&#39;</span>\n            <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Form submitted, redirect user</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">msg</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">url</span><span class=\"p\">)</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignment_request.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"volunteer_as_EIC\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.volunteer_as_EIC\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">volunteer_as_EIC</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called when a Fellow volunteers while perusing the submissions pool.</span>\n<span class=\"sd\">    This is an adapted version of the assignment_request method.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;assignment_failed&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;This Submission has failed pre-screening and has been rejected.&#39;</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&lt;h3&gt;Thank you for considering.&lt;/h3&gt;&#39;</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">+=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&#39; &#39;</span> <span class=\"o\">+</span>\n                         <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span>\n                         <span class=\"s1\">&#39; has already agreed to be Editor-in-charge of this Submission.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># The Contributor may already have an EditorialAssignment due to an earlier invitation.</span>\n    <span class=\"n\">assignment</span><span class=\"p\">,</span> <span class=\"n\">__</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get_or_create</span><span class=\"p\">(</span>\n        <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">date_answered</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">assignment</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Set deadlines</span>\n    <span class=\"n\">deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>  <span class=\"c1\"># for papers</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">submitted_to_journal</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;SciPostPhysLectNotes&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">28</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Update Submission data</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"n\">STATUS_EIC_ASSIGNED</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">=</span> <span class=\"n\">contributor</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">deadline</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">touch</span><span class=\"p\">()</span>\n\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;assignment&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignment</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_other_assignments</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_EIC_appointment_email</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_prescreening_passed_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editor-in-charge has been assigned.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for becoming Editor-in-charge of this submission.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_assign_submissions&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"assignment_failed\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignment_failed\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignment_failed</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    No Editorial Fellow has accepted or volunteered to become Editor-in-charge.</span>\n<span class=\"sd\">    The submission is rejected.</span>\n<span class=\"sd\">    This method is called from pool.html by an Editorial Administrator.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;assignment_failed&#39;</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n                                  <span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;personal_message&#39;</span><span class=\"p\">]})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">deprecate_all_assignments</span><span class=\"p\">()</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">assignment_failed_email_authors</span><span class=\"p\">()</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_header&#39;</span><span class=\"p\">:</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Submission &#39;</span> <span class=\"o\">+</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span> <span class=\"o\">+</span>\n                                      <span class=\"s1\">&#39; has failed pre-screening and been rejected. &#39;</span>\n                                      <span class=\"s1\">&#39;Authors have been informed by email.&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n                       <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n                       <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ModifyPersonalMessageForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/editorial_assignment_failed.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"assignments\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.assignments\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">assignments</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This page provides a Fellow with an explicit task list</span>\n<span class=\"sd\">    of editorial actions which should be undertaken.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">assignments</span> <span class=\"o\">=</span> <span class=\"n\">EditorialAssignment</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">to</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;-date_created&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">assignments_to_consider</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">,</span>\n                                                 <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">current_assignments</span> <span class=\"o\">=</span> <span class=\"n\">assignments</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">accepted</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n                                             <span class=\"n\">deprecated</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">,</span>\n                                             <span class=\"n\">completed</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;assignments_to_consider&#39;</span><span class=\"p\">:</span> <span class=\"n\">assignments_to_consider</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;current_assignments&#39;</span><span class=\"p\">:</span> <span class=\"n\">current_assignments</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/assignments.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"editorial_page\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.editorial_page\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">editorial_page</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    The central page for the EIC to manage all its Editorial duties.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n        <span class=\"c1\"># Administrators will be able to see all Submissions</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">!=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># The current user is not EIC of the Submission!</span>\n            <span class=\"n\">full_access</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">voting_fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">contributor__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n                <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;set_deadline_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(),</span>\n        <span class=\"s1\">&#39;cycle_choice_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">),</span>\n        <span class=\"s1\">&#39;full_access&#39;</span><span class=\"p\">:</span> <span class=\"n\">full_access</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/editorial_page.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"cycle_form_submit\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cycle_form_submit\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cycle_form_submit</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If Submission is `resubmission_incoming` the EIC should first choose what refereeing</span>\n<span class=\"sd\">    cycle to choose.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SubmissionCycleChoiceForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_status</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">update_deadline</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">cycle</span><span class=\"o\">.</span><span class=\"n\">reinvite_referees</span><span class=\"p\">(</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;referees_reinvite&#39;</span><span class=\"p\">],</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Your choice has been confirmed&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;The new cycle will be &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_refereeing_cycle_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">refereeing_cycle</span> <span class=\"o\">==</span> <span class=\"n\">CYCLE_DIRECT_REC</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect to EIC Recommendation page immediately</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:eic_recommendation&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span>\n        <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"select_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.select_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">select_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Select/Invite referees by first listing them here.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;&#39;</span>\n\n    <span class=\"n\">ref_search_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeSelectForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">contributors_found</span> <span class=\"o\">=</span> <span class=\"n\">Contributor</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">user__last_name__icontains</span><span class=\"o\">=</span><span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;contributors_found&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">contributors_found</span>\n\n        <span class=\"c1\"># Check for recent co-authorship (thus referee disqualification)</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">submission</span>\n                                           <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                           <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n            <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n            <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n            <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">ref_search_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n            <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                        <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                        <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n            <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n        <span class=\"k\">except</span> <span class=\"ne\">KeyError</span><span class=\"p\">:</span>\n            <span class=\"k\">pass</span>\n        <span class=\"n\">context</span><span class=\"p\">[</span><span class=\"s1\">&#39;ref_recruit_form&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">()</span>\n\n    <span class=\"n\">context</span><span class=\"o\">.</span><span class=\"n\">update</span><span class=\"p\">({</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;ref_search_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">ref_search_form</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;queryresults&#39;</span><span class=\"p\">:</span> <span class=\"n\">queryresults</span>\n    <span class=\"p\">})</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"recruit_referee\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.recruit_referee\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">recruit_referee</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    If the Editor-in-charge does not find the desired referee among Contributors</span>\n<span class=\"sd\">    (otherwise, the method send_refereeing_invitation below is used instead),</span>\n<span class=\"sd\">    he/she can invite somebody by providing name + contact details.</span>\n<span class=\"sd\">    This function emails a registration invitation to this person.</span>\n<span class=\"sd\">    The pending refereeing invitation is then recognized upon registration,</span>\n<span class=\"sd\">    using the invitation token.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">method</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;POST&#39;</span><span class=\"p\">:</span>\n        <span class=\"n\">ref_recruit_form</span> <span class=\"o\">=</span> <span class=\"n\">RefereeRecruitmentForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span><span class=\"p\">)</span>\n        <span class=\"k\">if</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n            <span class=\"c1\"># TODO check if email already taken</span>\n            <span class=\"n\">ref_invitation</span> <span class=\"o\">=</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invited_by</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n\n            <span class=\"c1\"># Create and send a registration invitation</span>\n            <span class=\"n\">ref_inv_message_head</span> <span class=\"o\">=</span> <span class=\"p\">(</span>\n                <span class=\"s1\">&#39;On behalf of the Editor-in-charge </span><span class=\"si\">{eic_title}</span><span class=\"s1\"> </span><span class=\"si\">{eic_last_name}</span><span class=\"s1\">, we would &#39;</span>\n                <span class=\"s1\">&#39;like to invite you to referee a Submission to </span><span class=\"si\">{journal}</span><span class=\"s1\">, namely&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"si\">{sub_title}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">by </span><span class=\"si\">{sub_author_list}</span><span class=\"s1\">&#39;</span>\n                <span class=\"s1\">&#39;</span><span class=\"se\">\\n</span><span class=\"s1\">(see https://scipost.org/</span><span class=\"si\">{sub_url}</span><span class=\"s1\">).&#39;</span>\n                <span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                    <span class=\"n\">eic_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">get_title_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">eic_last_name</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                    <span class=\"n\">journal</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_submitted_to_journal_display</span><span class=\"p\">(),</span>\n                    <span class=\"n\">sub_title</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_author_list</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">,</span>\n                    <span class=\"n\">sub_url</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n            <span class=\"n\">reg_invitation</span> <span class=\"o\">=</span> <span class=\"n\">RegistrationInvitation</span><span class=\"p\">(</span>\n                <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;first_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">email</span><span class=\"o\">=</span><span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_address&#39;</span><span class=\"p\">],</span>\n                <span class=\"n\">invitation_type</span><span class=\"o\">=</span><span class=\"n\">INVITATION_REFEREEING</span><span class=\"p\">,</span>\n                <span class=\"n\">created_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span>\n                <span class=\"n\">personal_message</span><span class=\"o\">=</span><span class=\"n\">ref_inv_message_head</span><span class=\"p\">)</span>\n\n            <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"c1\"># Copy the key to the refereeing invitation</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span> <span class=\"o\">=</span> <span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">invitation_key</span>\n            <span class=\"n\">ref_invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n            <span class=\"n\">mail_sender</span> <span class=\"o\">=</span> <span class=\"n\">DirectMailUtil</span><span class=\"p\">(</span><span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;registration_invitation&#39;</span><span class=\"p\">,</span>\n                                         <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">reg_invitation</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">set_alternative_sender</span><span class=\"p\">(</span><span class=\"s1\">&#39;SciPost Refereeing&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;refereeing@scipost.org&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">mail_sender</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Referee </span><span class=\"si\">{}</span><span class=\"s1\"> invited&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">reg_invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">))</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has been recruited and invited as a referee.&#39;</span>\n                                         <span class=\"o\">%</span> <span class=\"n\">ref_recruit_form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;last_name&#39;</span><span class=\"p\">])</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"send_refereeing_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.send_refereeing_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">send_refereeing_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">contributor_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is called by the EIC from the submission&#39;s editorial_page,</span>\n<span class=\"sd\">    in the case where the referee is an identified Contributor.</span>\n<span class=\"sd\">    For a referee who isn&#39;t a Contributor yet, the method recruit_referee above</span>\n<span class=\"sd\">    is called instead.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">contributor</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">contributor_id</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">is_currently_available</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;This Contributor is marked as currently unavailable. &#39;</span>\n                        <span class=\"s1\">&#39;Please go back and select another referee.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/error.html&#39;</span><span class=\"p\">,</span> <span class=\"p\">{</span><span class=\"s1\">&#39;errormessage&#39;</span><span class=\"p\">:</span> <span class=\"n\">errormessage</span><span class=\"p\">})</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                                   <span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                                   <span class=\"n\">title</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">title</span><span class=\"p\">,</span>\n                                   <span class=\"n\">first_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">first_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">last_name</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                   <span class=\"n\">email_address</span><span class=\"o\">=</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">,</span>\n                                   <span class=\"c1\"># the key is only used for inviting unregistered users</span>\n                                   <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"s1\">&#39;notused&#39;</span><span class=\"p\">,</span>\n                                   <span class=\"n\">date_invited</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">invited_by</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n    <span class=\"n\">mail_request</span> <span class=\"o\">=</span> <span class=\"n\">MailEditingSubView</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">mail_code</span><span class=\"o\">=</span><span class=\"s1\">&#39;submissions_referee_invite&#39;</span><span class=\"p\">,</span>\n                                      <span class=\"n\">invitation</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"c1\"># SubmissionUtils.load({&#39;invitation&#39;: invitation})</span>\n        <span class=\"c1\"># SubmissionUtils.send_refereeing_invitation_email()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has been invited.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has been invited.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Invitation sent&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">send</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"k\">return</span> <span class=\"n\">mail_request</span><span class=\"o\">.</span><span class=\"n\">return_render</span><span class=\"p\">()</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"ref_invitation_reminder\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.ref_invitation_reminder\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">ref_invitation_reminder</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    when a referee has been invited but hasn&#39;t answered yet.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">nr_reminders</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_last_reminded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_unreg_ref_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Reminder sent succesfully.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"accept_or_decline_ref_invitations\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.accept_or_decline_ref_invitations\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">accept_or_decline_ref_invitations</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    RefereeInvitations need to be either accepted or declined by the invited user</span>\n<span class=\"sd\">    using this view. The decision will be taken one invitation at a time.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">invitation_id</span><span class=\"p\">:</span>\n        <span class=\"k\">try</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n        <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;There are no more Refereeing Invitations for you to consider.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;Thank you for agreeing to referee this Submission&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;&lt;p&gt;When you are ready, please go to the &#39;</span>\n                                       <span class=\"s1\">&#39;&lt;a href=&quot;</span><span class=\"si\">{url}</span><span class=\"s1\">&quot;&gt;Submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s page&lt;/a&gt; to&#39;</span>\n                                       <span class=\"s1\">&#39; submit your Report.&lt;/p&gt;&#39;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span>\n                                            <span class=\"n\">url</span><span class=\"o\">=</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())))</span>\n        <span class=\"k\">else</span><span class=\"p\">:</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n            <span class=\"n\">decision_string</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;declined&#39;</span>\n            <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;You have declined to contribute a Report&lt;/h3&gt;&#39;</span>\n                                       <span class=\"s1\">&#39;Nonetheless, we thank you very much for considering&#39;</span>\n                                       <span class=\"s1\">&#39; this refereeing invitation.&lt;/p&gt;&#39;</span><span class=\"p\">))</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_in_response_to_decision</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                   <span class=\"o\">%</span> <span class=\"n\">decision_string</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has </span><span class=\"si\">%s</span><span class=\"s1\"> the refereeing invitation.&#39;</span>\n                                                <span class=\"o\">%</span> <span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">referee</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">,</span>\n                                                   <span class=\"n\">decision_string</span><span class=\"p\">))</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">awaiting_response</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">exists</span><span class=\"p\">():</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:accept_or_decline_ref_invitations&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">()</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"k\">def</span> <span class=\"nf\">decline_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"p\">):</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">RefereeInvitation</span><span class=\"p\">,</span> <span class=\"n\">invitation_key</span><span class=\"o\">=</span><span class=\"n\">invitation_key</span><span class=\"p\">,</span>\n                                   <span class=\"n\">accepted__isnull</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ConsiderRefereeInvitationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">:</span> <span class=\"kc\">False</span><span class=\"p\">})</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;accept&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;True&#39;</span><span class=\"p\">:</span>\n            <span class=\"c1\"># User filled in: Accept</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Please login and go to your personal page if you&#39;</span>\n                                      <span class=\"s1\">&#39; want to accept the invitation.&#39;</span><span class=\"p\">)</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">accepted</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">date_responded</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">refusal_reason</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;refusal_reason&#39;</span><span class=\"p\">]</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_response_to_EIC</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee has declined the&#39;</span>\n                                                   <span class=\"s1\">&#39; refereeing invitation.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee </span><span class=\"si\">%s</span><span class=\"s1\"> has declined the refereeing &#39;</span>\n                                                <span class=\"s1\">&#39;invitation.&#39;</span> <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for informing us that you will not provide a Report.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:index&#39;</span><span class=\"p\">))</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/referee_invitations_decline.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"cancel_ref_invitation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.cancel_ref_invitation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">cancel_ref_invitation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">invitation_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method is used by the Editor-in-charge from the editorial_page</span>\n<span class=\"sd\">    to remove a referee for the list of invited ones.</span>\n<span class=\"sd\">    It can be used for registered as well as unregistered referees.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">invitation_id</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">RefereeInvitation</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">cancelled</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;invitation&#39;</span><span class=\"p\">:</span> <span class=\"n\">invitation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_ref_cancellation_email</span><span class=\"p\">()</span>\n\n    <span class=\"c1\"># Add SubmissionEvents</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A referee invitation has been cancelled.&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;Referee invitation for </span><span class=\"si\">%s</span><span class=\"s1\"> has been cancelled.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">invitation</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"extend_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.extend_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">extend_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">days</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Extend Refereeing deadline for Submission and open reporting and commenting.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"nb\">int</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"p\">))</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"set_refereeing_deadline\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.set_refereeing_deadline\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">set_refereeing_deadline</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Set Refereeing deadline for Submission and open reporting and commenting if</span>\n<span class=\"sd\">    the new date is in the future.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">SetRefereeingDeadlineForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;deadline&#39;</span><span class=\"p\">]</span> <span class=\"o\">&gt;</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"p\">():</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n            <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;EICassigned&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new refereeing deadline is set.&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;New reporting deadline set.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">error</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The deadline has not been set. Please try again.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"close_refereeing_round\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.close_refereeing_round\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">close_refereeing_round</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Called by the Editor-in-charge when a satisfactory number of</span>\n<span class=\"sd\">    reports have been gathered.</span>\n<span class=\"sd\">    Automatically emails the authors to ask them if they want to</span>\n<span class=\"sd\">    round off any replies to reports or comments before the</span>\n<span class=\"sd\">    editorial recommendation is formulated.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"kc\">False</span>\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;EICassigned&#39;</span><span class=\"p\">:</span>  <span class=\"c1\"># only close if currently undergoing refereeing</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;review_closed&#39;</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_general_event</span><span class=\"p\">(</span><span class=\"s1\">&#39;Refereeing round has been closed.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                            <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">refereeing_overview</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions_under_refereeing</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span>\n                                    <span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">status</span><span class=\"o\">=</span><span class=\"n\">STATUS_EIC_ASSIGNED</span><span class=\"p\">)</span>\n                                    <span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;submission_date&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submissions_under_refereeing&#39;</span><span class=\"p\">:</span> <span class=\"n\">submissions_under_refereeing</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/refereeing_overview.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<div class=\"viewcode-block\" id=\"communication\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.communication\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">communication</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,</span> <span class=\"n\">comtype</span><span class=\"p\">,</span> <span class=\"n\">referee_id</span><span class=\"o\">=</span><span class=\"kc\">None</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Communication between editor-in-charge, author or referee</span>\n<span class=\"sd\">    occurring during the submission refereeing.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Editor to {Author, Referee, Editorial Administration}</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Author to Editor</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_author</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;RtoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Referee to Editor (Contributor account required)</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"nb\">hasattr</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">,</span> <span class=\"s1\">&#39;contributor&#39;</span><span class=\"p\">):</span>\n            <span class=\"c1\"># Raise PermissionDenied to let the user know something is wrong with its account.</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n            <span class=\"n\">referee_invitations__referee__user</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Editorial Administration to Editor</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">has_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_oversee_refereeing&#39;</span><span class=\"p\">):</span>\n            <span class=\"k\">raise</span> <span class=\"n\">PermissionDenied</span>\n        <span class=\"n\">submissions_qs</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Invalid commtype in the url!</span>\n        <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n\n    <span class=\"c1\"># Get the showpiece itself or return 404</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">submissions_qs</span><span class=\"p\">,</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">referee_id</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">referee</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Get the Contributor to communicate with if not already defined (`Eto?` communication)</span>\n        <span class=\"c1\"># To Fix: Assuming the Editorial Administrator won&#39;t make any `referee_id` mistakes</span>\n        <span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Contributor</span><span class=\"p\">,</span> <span class=\"n\">pk</span><span class=\"o\">=</span><span class=\"n\">referee_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EditorialCommunicationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">communication</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">(</span><span class=\"n\">commit</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">submission</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">comtype</span> <span class=\"o\">=</span> <span class=\"n\">comtype</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">referee</span> <span class=\"o\">=</span> <span class=\"n\">referee</span>\n        <span class=\"n\">communication</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;communication&#39;</span><span class=\"p\">:</span> <span class=\"n\">communication</span><span class=\"p\">})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_communication_email</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">comtype</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"s1\">&#39;EtoA&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoR&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;EtoS&#39;</span><span class=\"p\">]:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;AtoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">elif</span> <span class=\"n\">comtype</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;StoE&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;comtype&#39;</span><span class=\"p\">:</span> <span class=\"n\">comtype</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;referee_id&#39;</span><span class=\"p\">:</span> <span class=\"n\">referee_id</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/communication.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Write EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">eic_recommendation_required</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;&lt;h3&gt;An Editorial Recommendation is not required&lt;/h3&gt;&#39;</span>\n                                   <span class=\"s1\">&#39;This submission</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s current status is: &lt;em&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/em&gt;&#39;</span>\n                                   <span class=\"o\">%</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_status_display</span><span class=\"p\">()))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Find EditorialAssignment for user</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">has_assignment</span><span class=\"p\">():</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;You cannot formulate an Editorial Recommendation,&#39;</span>\n                                   <span class=\"s1\">&#39; because the Editorial Assignment has not been set properly.&#39;</span>\n                                   <span class=\"s1\">&#39; Please &#39;</span>\n                                   <span class=\"s1\">&#39;&lt;a href=&quot;mailto:admin@scipost.org&quot;&gt;report the problem&lt;/a&gt;.&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully submitted&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"reformulate_eic_recommendation\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.reformulate_eic_recommendation\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">reformulate_eic_recommendation</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reformulate EIC Recommendation.</span>\n\n<span class=\"sd\">    Accessible for: Editor-in-charge and Editorial Administration</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"n\">STATUS_VOTING_IN_PREPARATION</span><span class=\"p\">,</span> <span class=\"n\">STATUS_PUT_TO_EC_VOTING</span><span class=\"p\">]:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;With the current status of the Submission you are not &#39;</span>\n                                   <span class=\"s1\">&#39;allowed to reformulate the Editorial Recommendation&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendationForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"n\">reformulate</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">revision_requested</span><span class=\"p\">():</span>\n            <span class=\"c1\"># Send mail to authors to notify about the request for revision.</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span>\n                <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"p\">,</span>\n                <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n            <span class=\"p\">})</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_revision_requested_email</span><span class=\"p\">()</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Editorial Recommendation succesfully reformulated&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">kwargs</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;arxiv_identifier_w_vn_nr&#39;</span><span class=\"p\">:</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">}))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation_formulate_rewrite.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"c1\">###########</span>\n<span class=\"c1\"># Reports</span>\n<span class=\"c1\">###########</span>\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_referee&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"submit_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.submit_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">submit_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    A form to submit a report on a submission will be shown and processed here.</span>\n\n<span class=\"sd\">    Important checks to be aware of include an author check for the submission,</span>\n<span class=\"sd\">    has the reporting deadline not been reached yet and does there exist any invitation</span>\n<span class=\"sd\">    for the current user on this submission.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">(),</span>\n                                   <span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"o\">=</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n    <span class=\"c1\"># Check whether the user can submit a report:</span>\n    <span class=\"n\">current_contributor</span> <span class=\"o\">=</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span>\n    <span class=\"n\">is_author</span> <span class=\"o\">=</span> <span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n    <span class=\"n\">is_author_unchecked</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"ow\">not</span> <span class=\"n\">is_author</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span>\n                           <span class=\"p\">(</span><span class=\"n\">current_contributor</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">authors_false_claims</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">())</span> <span class=\"ow\">and</span>\n                           <span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">author_list</span><span class=\"p\">))</span>\n    <span class=\"n\">invitation</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">referee_invitations</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">referee</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">first</span><span class=\"p\">()</span>\n\n    <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"kc\">None</span>\n    <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">invitation</span><span class=\"p\">:</span>\n        <span class=\"k\">if</span> <span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">()</span> <span class=\"o\">&gt;</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reporting_deadline</span> <span class=\"o\">+</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">timedelta</span><span class=\"p\">(</span><span class=\"n\">days</span><span class=\"o\">=</span><span class=\"mi\">1</span><span class=\"p\">):</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The reporting deadline has passed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">open_for_reporting</span><span class=\"p\">:</span>\n            <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Reporting for this submission has closed. You cannot submit&#39;</span>\n                            <span class=\"s1\">&#39; a Report anymore.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Remove old drafts from the database</span>\n            <span class=\"n\">reports_in_draft_to_remove</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span>\n                                          <span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">))</span>\n            <span class=\"k\">if</span> <span class=\"n\">reports_in_draft_to_remove</span><span class=\"p\">:</span>\n                <span class=\"n\">reports_in_draft_to_remove</span><span class=\"o\">.</span><span class=\"n\">delete</span><span class=\"p\">()</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;You are an author of this Submission and cannot submit a Report.&#39;</span>\n    <span class=\"k\">if</span> <span class=\"n\">is_author_unchecked</span><span class=\"p\">:</span>\n        <span class=\"n\">errormessage</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;The system flagged you as a potential author of this Submission. &#39;</span>\n                        <span class=\"s1\">&#39;Please go to your personal page under the Submissions tab&#39;</span>\n                        <span class=\"s1\">&#39; to clarify this.&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"k\">if</span> <span class=\"n\">errormessage</span><span class=\"p\">:</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">errormessage</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost:personal_page&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"c1\"># Find and fill earlier version of report</span>\n    <span class=\"k\">try</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">reports</span><span class=\"o\">.</span><span class=\"n\">in_draft</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">)</span>\n    <span class=\"k\">except</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">DoesNotExist</span><span class=\"p\">:</span>\n        <span class=\"n\">report_in_draft</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"p\">(</span><span class=\"n\">author</span><span class=\"o\">=</span><span class=\"n\">current_contributor</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">ReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">report_in_draft</span><span class=\"p\">,</span> <span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Check if data sent is valid</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">newreport</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"n\">newreport</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_DRAFT</span><span class=\"p\">:</span>\n            <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"p\">(</span><span class=\"s1\">&#39;Your Report has been saved. &#39;</span>\n                                       <span class=\"s1\">&#39;You may carry on working on it,&#39;</span>\n                                       <span class=\"s1\">&#39; or leave the page and finish it later.&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n            <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Send mails if report is submitted</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">newreport</span><span class=\"p\">},</span> <span class=\"n\">request</span><span class=\"p\">)</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_EIC_report_delivered</span><span class=\"p\">()</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">email_referee_report_delivered</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvents for the EIC only, as it can also be rejected still</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;</span><span class=\"si\">%s</span><span class=\"s1\"> has submitted a new Report.&#39;</span>\n                                     <span class=\"o\">%</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your Report&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">())</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/report_form.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_reports_list\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_reports_list\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_reports_list</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Reports with status `unvetted` will be shown (oldest first).</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">get_list_or_404</span><span class=\"p\">(</span><span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">))</span>\n    <span class=\"n\">reports_to_vet</span> <span class=\"o\">=</span> <span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">order_by</span><span class=\"p\">(</span><span class=\"s1\">&#39;date_submitted&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;reports_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">reports_to_vet</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_reports_list.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"vet_submitted_report\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.vet_submitted_report\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">vet_submitted_report</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">report_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Report with status `unvetted` will be shown. A user may only vet reports of submissions</span>\n<span class=\"sd\">    he/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</span>\n\n<span class=\"sd\">    After vetting an email is sent to the report author, bcc EIC. If report</span>\n<span class=\"sd\">    has not been refused, the submission author is also mailed.</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter_for_eic</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">Report</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">awaiting_vetting</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">report_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">VetReportForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">initial</span><span class=\"o\">=</span><span class=\"p\">{</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">})</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">report</span> <span class=\"o\">=</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">process_vetting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># email report author</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;report&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span>\n                              <span class=\"s1\">&#39;email_response&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;email_response_field&#39;</span><span class=\"p\">]})</span>\n        <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">acknowledge_report_email</span><span class=\"p\">()</span>  <span class=\"c1\"># email report author, bcc EIC</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for the EIC</span>\n        <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Report by </span><span class=\"si\">%s</span><span class=\"s1\"> is vetted.&#39;</span>\n                                            <span class=\"o\">%</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">author</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">==</span> <span class=\"n\">STATUS_VETTED</span><span class=\"p\">:</span>\n            <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_report_received_email</span><span class=\"p\">()</span>\n\n            <span class=\"c1\"># Add SubmissionEvent to tell the author about the new report</span>\n            <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;A new Report has been submitted.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"n\">message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Submitted Report vetted for &lt;a href=&quot;</span><span class=\"si\">%s</span><span class=\"s1\">&quot;&gt;</span><span class=\"si\">%s</span><span class=\"s1\">&lt;/a&gt;.&#39;</span> <span class=\"o\">%</span> <span class=\"p\">(</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">get_absolute_url</span><span class=\"p\">(),</span>\n                    <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">)</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">message</span><span class=\"p\">)</span>\n\n        <span class=\"k\">if</span> <span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">editor_in_charge</span> <span class=\"o\">==</span> <span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">:</span>\n            <span class=\"c1\"># Redirect a EIC back to the Editorial Page!</span>\n            <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                    <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">(</span><span class=\"n\">report</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">,)))</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:vet_submitted_reports_list&#39;</span><span class=\"p\">))</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;report_to_vet&#39;</span><span class=\"p\">:</span> <span class=\"n\">report</span><span class=\"p\">,</span> <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/vet_submitted_report.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">prepare_for_voting</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">fellows_with_expertise</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">fellows</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">contributor__expertises__contains</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">subject_area</span><span class=\"p\">])</span>\n\n    <span class=\"n\">coauthorships</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n\n    <span class=\"n\">eligibility_form</span> <span class=\"o\">=</span> <span class=\"n\">VotingEligibilityForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">,</span> <span class=\"n\">instance</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"n\">eligibility_form</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;We have registered your selection.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvents</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial Recommendation has been &#39;</span>\n                                                    <span class=\"s1\">&#39;put forward to the College for voting.&#39;</span><span class=\"p\">)</span>\n\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:editorial_page&#39;</span><span class=\"p\">,</span>\n                                <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">arxiv_identifier_w_vn_nr</span><span class=\"p\">]))</span>\n    <span class=\"k\">else</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Identify possible co-authorships in last 3 years, disqualifying Fellow from voting:</span>\n        <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span> <span class=\"ow\">is</span> <span class=\"ow\">not</span> <span class=\"kc\">None</span><span class=\"p\">:</span>\n            <span class=\"k\">for</span> <span class=\"n\">fellow</span> <span class=\"ow\">in</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">:</span>\n                <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;((&#39;</span> <span class=\"o\">+</span> <span class=\"p\">(</span><span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n                                               <span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span>\n                                               <span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">])</span>\n                <span class=\"k\">for</span> <span class=\"n\">author</span> <span class=\"ow\">in</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">metadata</span><span class=\"p\">[</span><span class=\"s1\">&#39;entries&#39;</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">][</span><span class=\"s1\">&#39;authors&#39;</span><span class=\"p\">][</span><span class=\"mi\">1</span><span class=\"p\">:]:</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;+OR+&#39;</span> <span class=\"o\">+</span> <span class=\"n\">author</span><span class=\"p\">[</span><span class=\"s1\">&#39;name&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n                    <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;)+AND+&#39;</span>\n                    <span class=\"n\">search_str</span> <span class=\"o\">=</span> <span class=\"n\">sub_auth_boolean_str</span> <span class=\"o\">+</span> <span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;)&#39;</span>\n                    <span class=\"n\">queryurl</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"s1\">&#39;http://export.arxiv.org/api/query?search_query=au:</span><span class=\"si\">%s</span><span class=\"s1\">&#39;</span>\n                                <span class=\"o\">%</span> <span class=\"n\">search_str</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&amp;sortBy=submittedDate&amp;sortOrder=descending&#39;</span>\n                                <span class=\"s1\">&#39;&amp;max_results=5&#39;</span><span class=\"p\">)</span>\n                    <span class=\"n\">arxivquery</span> <span class=\"o\">=</span> <span class=\"n\">feedparser</span><span class=\"o\">.</span><span class=\"n\">parse</span><span class=\"p\">(</span><span class=\"n\">queryurl</span><span class=\"p\">)</span>\n                    <span class=\"n\">queryresults</span> <span class=\"o\">=</span> <span class=\"n\">arxivquery</span>\n                    <span class=\"k\">if</span> <span class=\"n\">queryresults</span><span class=\"o\">.</span><span class=\"n\">entries</span><span class=\"p\">:</span>\n                        <span class=\"n\">coauthorships</span><span class=\"p\">[</span><span class=\"n\">fellow</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">last_name</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">queryresults</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;fellows_with_expertise&#39;</span><span class=\"p\">:</span> <span class=\"n\">fellows_with_expertise</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;coauthorships&#39;</span><span class=\"p\">:</span> <span class=\"n\">coauthorships</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;eligibility_form&#39;</span><span class=\"p\">:</span> <span class=\"n\">eligibility_form</span><span class=\"p\">,</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/admin/recommendation_prepare_for_voting.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@login_required</span>\n<span class=\"nd\">@fellowship_or_admin_required</span><span class=\"p\">()</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<span class=\"k\">def</span> <span class=\"nf\">vote_on_rec</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n        <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span><span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">form</span> <span class=\"o\">=</span> <span class=\"n\">RecommendationVoteForm</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">POST</span> <span class=\"ow\">or</span> <span class=\"kc\">None</span><span class=\"p\">)</span>\n    <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">is_valid</span><span class=\"p\">():</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;agree&#39;</span><span class=\"p\">:</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;disagree&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n        <span class=\"k\">elif</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;vote&#39;</span><span class=\"p\">]</span> <span class=\"o\">==</span> <span class=\"s1\">&#39;abstain&#39;</span><span class=\"p\">:</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">try</span><span class=\"p\">:</span>\n                <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">add</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">)</span>\n            <span class=\"k\">except</span> <span class=\"n\">IntegrityError</span><span class=\"p\">:</span>\n                <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">warning</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;You have already voted for this Recommendation.&#39;</span><span class=\"p\">)</span>\n                <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n        <span class=\"k\">if</span> <span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">]:</span>\n            <span class=\"n\">remark</span> <span class=\"o\">=</span> <span class=\"n\">Remark</span><span class=\"p\">(</span><span class=\"n\">contributor</span><span class=\"o\">=</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">contributor</span><span class=\"p\">,</span>\n                            <span class=\"n\">recommendation</span><span class=\"o\">=</span><span class=\"n\">recommendation</span><span class=\"p\">,</span>\n                            <span class=\"n\">date</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">(),</span>\n                            <span class=\"n\">remark</span><span class=\"o\">=</span><span class=\"n\">form</span><span class=\"o\">.</span><span class=\"n\">cleaned_data</span><span class=\"p\">[</span><span class=\"s1\">&#39;remark&#39;</span><span class=\"p\">])</span>\n            <span class=\"n\">remark</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;Thank you for your vote.&#39;</span><span class=\"p\">)</span>\n        <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span>\n\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n        <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">,</span>\n        <span class=\"s1\">&#39;form&#39;</span><span class=\"p\">:</span> <span class=\"n\">form</span>\n    <span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_prepare_recommendations_for_voting&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<div class=\"viewcode-block\" id=\"remind_Fellows_to_vote\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.remind_Fellows_to_vote\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">remind_Fellows_to_vote</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    This method sends an email to all Fellow with pending voting duties.</span>\n<span class=\"sd\">    It must be called by and Editorial Administrator.</span>\n\n<span class=\"sd\">    TODO: This reminder function doesn&#39;t filter per submission?!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_editable</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendations</span> <span class=\"o\">=</span> <span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">active</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">put_to_voting</span><span class=\"p\">()</span>\n\n    <span class=\"n\">Fellow_emails</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"n\">Fellow_names</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">rec</span> <span class=\"ow\">in</span> <span class=\"n\">recommendations</span><span class=\"p\">:</span>\n        <span class=\"k\">for</span> <span class=\"n\">Fellow</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">eligible_to_vote</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">():</span>\n            <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_for</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_against</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">rec</span><span class=\"o\">.</span><span class=\"n\">voted_abstain</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">()</span>\n                <span class=\"ow\">and</span> <span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span> <span class=\"ow\">not</span> <span class=\"ow\">in</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">):</span>\n                <span class=\"n\">Fellow_emails</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"o\">.</span><span class=\"n\">email</span><span class=\"p\">)</span>\n                <span class=\"n\">Fellow_names</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">Fellow</span><span class=\"p\">))</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;Fellow_emails&#39;</span><span class=\"p\">:</span> <span class=\"n\">Fellow_emails</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_Fellows_voting_reminder_email</span><span class=\"p\">()</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;Email reminders have been sent to: &lt;ul&gt;&#39;</span>\n    <span class=\"k\">for</span> <span class=\"n\">name</span> <span class=\"ow\">in</span> <span class=\"nb\">sorted</span><span class=\"p\">(</span><span class=\"n\">Fellow_names</span><span class=\"p\">):</span>\n        <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;li&gt;&#39;</span> <span class=\"o\">+</span> <span class=\"n\">name</span> <span class=\"o\">+</span> <span class=\"s1\">&#39;&lt;/li&gt;&#39;</span>\n    <span class=\"n\">ack_message</span> <span class=\"o\">+=</span> <span class=\"s1\">&#39;&lt;/ul&gt;&#39;</span>\n    <span class=\"n\">context</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&#39;ack_message&#39;</span><span class=\"p\">:</span> <span class=\"n\">Template</span><span class=\"p\">(</span><span class=\"n\">ack_message</span><span class=\"p\">)</span><span class=\"o\">.</span><span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">Context</span><span class=\"p\">({})),</span>\n               <span class=\"s1\">&#39;followup_message&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Return to the &#39;</span><span class=\"p\">,</span>\n               <span class=\"s1\">&#39;followup_link&#39;</span><span class=\"p\">:</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">),</span>\n               <span class=\"s1\">&#39;followup_link_label&#39;</span><span class=\"p\">:</span> <span class=\"s1\">&#39;Submissions pool&#39;</span><span class=\"p\">}</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;scipost/acknowledgement.html&#39;</span><span class=\"p\">,</span> <span class=\"n\">context</span><span class=\"p\">)</span></div>\n\n\n<span class=\"nd\">@permission_required</span><span class=\"p\">(</span><span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span><span class=\"p\">,</span> <span class=\"n\">raise_exception</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n<span class=\"nd\">@transaction</span><span class=\"o\">.</span><span class=\"n\">atomic</span>\n<div class=\"viewcode-block\" id=\"fix_College_decision\"><a class=\"viewcode-back\" href=\"../../../apps/submissions/#submissions.views.fix_College_decision\">[docs]</a><span class=\"k\">def</span> <span class=\"nf\">fix_College_decision</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"n\">rec_id</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot;</span>\n<span class=\"sd\">    Terminates the voting on a Recommendation.</span>\n<span class=\"sd\">    Called by an Editorial Administrator.</span>\n\n<span class=\"sd\">    # TODO - 2 bugs:</span>\n\n<span class=\"sd\">    TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.</span>\n<span class=\"sd\">    TO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</span>\n<span class=\"sd\">    &quot;&quot;&quot;</span>\n    <span class=\"n\">submissions</span> <span class=\"o\">=</span> <span class=\"n\">Submission</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">pool_full</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"o\">.</span><span class=\"n\">user</span><span class=\"p\">)</span>\n    <span class=\"n\">recommendation</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span><span class=\"n\">EICRecommendation</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">filter</span><span class=\"p\">(</span>\n        <span class=\"n\">submission__in</span><span class=\"o\">=</span><span class=\"n\">submissions</span><span class=\"p\">),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"n\">rec_id</span><span class=\"p\">)</span>\n\n    <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">submission</span>\n    <span class=\"k\">if</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"ow\">in</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]:</span>\n        <span class=\"c1\"># Publish as Tier I, II or III</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;accepted&#39;</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">acceptance_date</span> <span class=\"o\">=</span> <span class=\"n\">datetime</span><span class=\"o\">.</span><span class=\"n\">date</span><span class=\"o\">.</span><span class=\"n\">today</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Create a ProductionStream object</span>\n        <span class=\"n\">prodstream</span> <span class=\"o\">=</span> <span class=\"n\">ProductionStream</span><span class=\"p\">(</span><span class=\"n\">submission</span><span class=\"o\">=</span><span class=\"n\">submission</span><span class=\"p\">)</span>\n        <span class=\"n\">prodstream</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n        <span class=\"n\">ed_admins</span> <span class=\"o\">=</span> <span class=\"n\">Group</span><span class=\"o\">.</span><span class=\"n\">objects</span><span class=\"o\">.</span><span class=\"n\">get</span><span class=\"p\">(</span><span class=\"n\">name</span><span class=\"o\">=</span><span class=\"s1\">&#39;Editorial Administrators&#39;</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_perform_supervisory_actions&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n        <span class=\"n\">assign_perm</span><span class=\"p\">(</span><span class=\"s1\">&#39;can_work_for_stream&#39;</span><span class=\"p\">,</span> <span class=\"n\">ed_admins</span><span class=\"p\">,</span> <span class=\"n\">prodstream</span><span class=\"p\">)</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n    <span class=\"k\">elif</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">recommendation</span> <span class=\"o\">==</span> <span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">:</span>\n        <span class=\"c1\"># Reject + update-reject other versions of submission</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;rejected&#39;</span>\n        <span class=\"k\">for</span> <span class=\"n\">sub</span> <span class=\"ow\">in</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">other_versions_pool</span><span class=\"p\">:</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">status</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;resubmitted_rejected&#39;</span>\n            <span class=\"n\">sub</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n\n        <span class=\"c1\"># Add SubmissionEvent for authors</span>\n        <span class=\"c1\"># Do not write a new event for minor/major modification: already done at moment of</span>\n        <span class=\"c1\"># creation.</span>\n        <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_author</span><span class=\"p\">(</span><span class=\"s1\">&#39;An Editorial Recommendation has been formulated: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                        <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"c1\"># Add SubmissionEvent for EIC</span>\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">add_event_for_eic</span><span class=\"p\">(</span><span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed: </span><span class=\"si\">%s</span><span class=\"s1\">.&#39;</span>\n                                 <span class=\"o\">%</span> <span class=\"n\">recommendation</span><span class=\"o\">.</span><span class=\"n\">get_recommendation_display</span><span class=\"p\">())</span>\n\n    <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">save</span><span class=\"p\">()</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">load</span><span class=\"p\">({</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">:</span> <span class=\"n\">submission</span><span class=\"p\">,</span> <span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">:</span> <span class=\"n\">recommendation</span><span class=\"p\">})</span>\n    <span class=\"n\">SubmissionUtils</span><span class=\"o\">.</span><span class=\"n\">send_author_College_decision_email</span><span class=\"p\">()</span>\n    <span class=\"n\">messages</span><span class=\"o\">.</span><span class=\"n\">success</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s1\">&#39;The Editorial College</span><span class=\"se\">\\&#39;</span><span class=\"s1\">s decision has been fixed.&#39;</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">redirect</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;submissions:pool&#39;</span><span class=\"p\">))</span></div>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">EICRecommendationView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">DetailView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_fix_College_decision&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/pool/recommendation.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_context_data</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"sd\">&quot;&quot;&quot; Get the EICRecommendation as a submission-related instance. &quot;&quot;&quot;</span>\n        <span class=\"n\">ctx</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_context_data</span><span class=\"p\">(</span><span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">)</span>\n        <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;recommendation&#39;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"n\">get_object_or_404</span><span class=\"p\">(</span>\n            <span class=\"n\">ctx</span><span class=\"p\">[</span><span class=\"s1\">&#39;submission&#39;</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">eicrecommendations</span><span class=\"o\">.</span><span class=\"n\">all</span><span class=\"p\">(),</span> <span class=\"nb\">id</span><span class=\"o\">=</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">kwargs</span><span class=\"p\">[</span><span class=\"s1\">&#39;rec_id&#39;</span><span class=\"p\">])</span>\n        <span class=\"k\">return</span> <span class=\"n\">ctx</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">UpdateView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">template_name</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;submissions/admin/plagiarism_report.html&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n    <span class=\"n\">form_class</span> <span class=\"o\">=</span> <span class=\"n\">iThenticateReportForm</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_object</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"nb\">super</span><span class=\"p\">()</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">return</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span>\n\n\n<span class=\"k\">class</span> <span class=\"nc\">PlagiarismReportPDFView</span><span class=\"p\">(</span><span class=\"n\">SubmissionAdminViewMixin</span><span class=\"p\">,</span> <span class=\"n\">SingleObjectMixin</span><span class=\"p\">,</span> <span class=\"n\">RedirectView</span><span class=\"p\">):</span>\n    <span class=\"n\">permission_required</span> <span class=\"o\">=</span> <span class=\"s1\">&#39;scipost.can_do_plagiarism_checks&#39;</span>\n    <span class=\"n\">editorial_page</span> <span class=\"o\">=</span> <span class=\"kc\">True</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_redirect_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">,</span> <span class=\"o\">*</span><span class=\"n\">args</span><span class=\"p\">,</span> <span class=\"o\">**</span><span class=\"n\">kwargs</span><span class=\"p\">):</span>\n        <span class=\"n\">submission</span> <span class=\"o\">=</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">get_object</span><span class=\"p\">()</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"n\">url</span> <span class=\"o\">=</span> <span class=\"n\">submission</span><span class=\"o\">.</span><span class=\"n\">plagiarism_report</span><span class=\"o\">.</span><span class=\"n\">get_report_url</span><span class=\"p\">()</span>\n\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">url</span><span class=\"p\">:</span>\n            <span class=\"k\">raise</span> <span class=\"n\">Http404</span>\n        <span class=\"k\">return</span> <span class=\"n\">url</span>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/submissions/views", "title": "submissions.views", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_modules/theses/models.fjson b/docs/codebase/_build/json/_modules/theses/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..e9f16879c39cbe57f38767afd882b43d6b2fd736
--- /dev/null
+++ b/docs/codebase/_build/json/_modules/theses/models.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<h1>Source code for theses.models</h1><div class=\"highlight\"><pre>\n<span></span><span class=\"kn\">from</span> <span class=\"nn\">django.db</span> <span class=\"k\">import</span> <span class=\"n\">models</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.contrib.contenttypes.fields</span> <span class=\"k\">import</span> <span class=\"n\">GenericRelation</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.urls</span> <span class=\"k\">import</span> <span class=\"n\">reverse</span>\n<span class=\"kn\">from</span> <span class=\"nn\">django.utils</span> <span class=\"k\">import</span> <span class=\"n\">timezone</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">journals.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span>\n<span class=\"kn\">from</span> <span class=\"nn\">scipost.constants</span> <span class=\"k\">import</span> <span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span> <span class=\"n\">SCIPOST_SUBJECT_AREAS</span>\n\n<span class=\"kn\">from</span> <span class=\"nn\">.constants</span> <span class=\"k\">import</span> <span class=\"n\">THESIS_TYPES</span>\n<span class=\"kn\">from</span> <span class=\"nn\">.managers</span> <span class=\"k\">import</span> <span class=\"n\">ThesisLinkManager</span>\n\n\n<div class=\"viewcode-block\" id=\"ThesisLink\"><a class=\"viewcode-back\" href=\"../../../apps/theses/#theses.models.ThesisLink\">[docs]</a><span class=\"k\">class</span> <span class=\"nc\">ThesisLink</span><span class=\"p\">(</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">Model</span><span class=\"p\">):</span>\n    <span class=\"sd\">&quot;&quot;&quot; An URL pointing to a thesis &quot;&quot;&quot;</span>\n    <span class=\"n\">requested_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;requested_theses&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">vetted_by</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ForeignKey</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span> <span class=\"n\">null</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">on_delete</span><span class=\"o\">=</span><span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CASCADE</span><span class=\"p\">)</span>\n    <span class=\"nb\">type</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">THESIS_TYPES</span><span class=\"p\">,</span> <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">)</span>\n    <span class=\"n\">discipline</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">20</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_DISCIPLINES</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;physics&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">domain</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_JOURNALS_DOMAINS</span><span class=\"p\">,</span>\n        <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">False</span><span class=\"p\">)</span>\n    <span class=\"n\">subject_area</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">10</span><span class=\"p\">,</span>\n        <span class=\"n\">choices</span><span class=\"o\">=</span><span class=\"n\">SCIPOST_SUBJECT_AREAS</span><span class=\"p\">,</span>\n        <span class=\"n\">default</span><span class=\"o\">=</span><span class=\"s1\">&#39;Phys:QP&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">open_for_commenting</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">BooleanField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">)</span>\n    <span class=\"n\">title</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span> <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;title&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">pub_link</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">URLField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;URL (external repository)&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">author_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">author_false_claims</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;false_claimed_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span><span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">1000</span><span class=\"p\">)</span>\n    <span class=\"n\">supervisor_as_cont</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">ManyToManyField</span><span class=\"p\">(</span>\n        <span class=\"s1\">&#39;scipost.Contributor&#39;</span><span class=\"p\">,</span> <span class=\"n\">blank</span><span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervisor(s)&#39;</span><span class=\"p\">,</span>\n        <span class=\"n\">related_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;supervised_theses&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">institution</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">CharField</span><span class=\"p\">(</span>\n        <span class=\"n\">max_length</span><span class=\"o\">=</span><span class=\"mi\">300</span><span class=\"p\">,</span>\n        <span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;degree granting institution&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">defense_date</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;date of thesis defense&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">abstract</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">TextField</span><span class=\"p\">(</span><span class=\"n\">verbose_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;abstract, outline or summary&#39;</span><span class=\"p\">)</span>\n    <span class=\"n\">latest_activity</span> <span class=\"o\">=</span> <span class=\"n\">models</span><span class=\"o\">.</span><span class=\"n\">DateTimeField</span><span class=\"p\">(</span><span class=\"n\">default</span><span class=\"o\">=</span><span class=\"n\">timezone</span><span class=\"o\">.</span><span class=\"n\">now</span><span class=\"p\">)</span>\n\n    <span class=\"c1\"># Comments can be added to a ThesisLink</span>\n    <span class=\"n\">comments</span> <span class=\"o\">=</span> <span class=\"n\">GenericRelation</span><span class=\"p\">(</span><span class=\"s1\">&#39;comments.Comment&#39;</span><span class=\"p\">,</span> <span class=\"n\">related_query_name</span><span class=\"o\">=</span><span class=\"s1\">&#39;theses&#39;</span><span class=\"p\">)</span>\n\n    <span class=\"n\">objects</span> <span class=\"o\">=</span> <span class=\"n\">ThesisLinkManager</span><span class=\"p\">()</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">__str__</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">title</span>\n\n    <span class=\"k\">def</span> <span class=\"nf\">get_absolute_url</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"k\">return</span> <span class=\"n\">reverse</span><span class=\"p\">(</span><span class=\"s1\">&#39;theses:thesis&#39;</span><span class=\"p\">,</span> <span class=\"n\">args</span><span class=\"o\">=</span><span class=\"p\">[</span><span class=\"bp\">self</span><span class=\"o\">.</span><span class=\"n\">id</span><span class=\"p\">])</span></div>\n</pre></div>", "parents": [{"link": "../../", "title": "Module code"}], "current_page_name": "_modules/theses/models", "title": "theses.models", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/_sources/apps.txt b/docs/codebase/_build/json/_sources/apps.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ecdef2c3e7a0d0ee28a9823e55739f2567aff948
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps.txt
@@ -0,0 +1,12 @@
+Apps
+====
+
+.. toctree::
+   :maxdepth: 2
+
+   apps/scipost
+   apps/submissions
+   apps/journals
+   apps/comments
+   apps/commentaries
+   apps/theses
diff --git a/docs/codebase/_build/json/_sources/apps/commentaries.txt b/docs/codebase/_build/json/_sources/apps/commentaries.txt
new file mode 100644
index 0000000000000000000000000000000000000000..836c1c618ad6a977a43591cafa64b06b2aafb0de
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/commentaries.txt
@@ -0,0 +1,14 @@
+commentaries
+============
+
+
+Models
+------
+.. automodule:: commentaries.models
+   :members:
+
+Views
+-----
+
+.. automodule:: commentaries.views
+   :members:
diff --git a/docs/codebase/_build/json/_sources/apps/comments.txt b/docs/codebase/_build/json/_sources/apps/comments.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fc2e9278c2d9379e076117c731735d0b66ba424e
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/comments.txt
@@ -0,0 +1,14 @@
+comments
+========
+
+
+Models
+------
+.. automodule:: comments.models
+   :members:
+
+Views
+-----
+
+.. automodule:: comments.views
+   :members:
diff --git a/docs/codebase/_build/json/_sources/apps/journals.txt b/docs/codebase/_build/json/_sources/apps/journals.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ec0fbbd8eef199c9e1a8660be7b327a749d533e6
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/journals.txt
@@ -0,0 +1,14 @@
+journals
+========
+
+
+Models
+------
+.. automodule:: journals.models
+   :members:
+
+Views
+-----
+
+.. automodule:: journals.views
+   :members:
diff --git a/docs/codebase/_build/json/_sources/apps/scipost.txt b/docs/codebase/_build/json/_sources/apps/scipost.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e8eed73e92bdee22d0bde919634365cc3e2dd174
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/scipost.txt
@@ -0,0 +1,14 @@
+scipost
+=======
+
+
+Models
+------
+.. automodule:: scipost.models
+   :members:
+
+Views
+-----
+
+.. automodule:: scipost.views
+   :members:
diff --git a/docs/codebase/_build/json/_sources/apps/submissions.txt b/docs/codebase/_build/json/_sources/apps/submissions.txt
new file mode 100644
index 0000000000000000000000000000000000000000..04a840204fc86bb67ebe7bc82fd4b62969e02519
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/submissions.txt
@@ -0,0 +1,14 @@
+submissions
+===========
+
+
+Models
+------
+.. automodule:: submissions.models
+   :members:
+
+Views
+-----
+
+.. automodule:: submissions.views
+   :members:
diff --git a/docs/codebase/_build/json/_sources/apps/theses.txt b/docs/codebase/_build/json/_sources/apps/theses.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4dd9f1ee8d2ae4394723950256a5c935b0faa170
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/apps/theses.txt
@@ -0,0 +1,14 @@
+theses
+=======
+
+
+Models
+------
+.. automodule:: theses.models
+   :members:
+
+Views
+-----
+
+.. automodule:: theses.views
+   :members:
diff --git a/docs/developers/codebase/codebase.rst b/docs/codebase/_build/json/_sources/codebase.txt
similarity index 100%
rename from docs/developers/codebase/codebase.rst
rename to docs/codebase/_build/json/_sources/codebase.txt
diff --git a/docs/codebase/_build/json/_sources/index.txt b/docs/codebase/_build/json/_sources/index.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1b16b88b3e58574aefa91938304c57c313104def
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/index.txt
@@ -0,0 +1,18 @@
+Welcome to SciPost's codebase documentation
+===========================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   maintenance
+   apps
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/codebase/_build/json/_sources/maintenance.txt b/docs/codebase/_build/json/_sources/maintenance.txt
new file mode 100644
index 0000000000000000000000000000000000000000..97d1c9fe0edbe3243494ff48819fa53e02b7d65f
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/maintenance.txt
@@ -0,0 +1,8 @@
+Maintenance
+===========
+
+
+.. toctree::
+   :maxdepth: 2
+
+   maintenance/docs
diff --git a/docs/codebase/_build/json/_sources/maintenance/docs.txt b/docs/codebase/_build/json/_sources/maintenance/docs.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3235a64ff568d3c4d8345cdfa85711d954828af2
--- /dev/null
+++ b/docs/codebase/_build/json/_sources/maintenance/docs.txt
@@ -0,0 +1,34 @@
+Maintenance of SciPost documentation
+====================================
+
+
+
+Sphinx-generated docs
+---------------------
+
+
+Generating the static html files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In the `docs` subfolders `codebase`, `admin` and `users`, invoke ``make html``. The html files will be automatically generated and put in `_build/html` subfolders.
+
+
+
+Sphinxdoc-generated docs (viewable online)
+------------------------------------------
+
+
+Setting things up
+~~~~~~~~~~~~~~~~~
+
+The `django-sphinxdoc` app creates `Project` and `Document` classes. In the admin, one should create the following projects (slug in parentheses):
+
+   * SciPost Admin (admin)
+   * SciPost Codebase (codebase)
+   * SciPost Users (users)
+
+
+Updating the docs:
+~~~~~~~~~~~~~~~~~~
+
+Use the management command ``python manage.py updatedoc -b <project-slug>`` with slugs `codebase`, `admin` and `users`.
diff --git a/docs/developers/codebase/modules/models.rst b/docs/codebase/_build/json/_sources/modules/models.txt
similarity index 100%
rename from docs/developers/codebase/modules/models.rst
rename to docs/codebase/_build/json/_sources/modules/models.txt
diff --git a/docs/developers/codebase/modules/views.rst b/docs/codebase/_build/json/_sources/modules/views.txt
similarity index 100%
rename from docs/developers/codebase/modules/views.rst
rename to docs/codebase/_build/json/_sources/modules/views.txt
diff --git a/docs/codebase/_build/json/_static/pygments.css b/docs/codebase/_build/json/_static/pygments.css
new file mode 100644
index 0000000000000000000000000000000000000000..20c4814dcf0d3f437ee9a46f5957e3165aa5fb17
--- /dev/null
+++ b/docs/codebase/_build/json/_static/pygments.css
@@ -0,0 +1,69 @@
+.highlight .hll { background-color: #ffffcc }
+.highlight  { background: #eeffcc; }
+.highlight .c { color: #408090; font-style: italic } /* Comment */
+.highlight .err { border: 1px solid #FF0000 } /* Error */
+.highlight .k { color: #007020; font-weight: bold } /* Keyword */
+.highlight .o { color: #666666 } /* Operator */
+.highlight .ch { color: #408090; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #007020 } /* Comment.Preproc */
+.highlight .cpf { color: #408090; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.highlight .gd { color: #A00000 } /* Generic.Deleted */
+.highlight .ge { font-style: italic } /* Generic.Emph */
+.highlight .gr { color: #FF0000 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #333333 } /* Generic.Output */
+.highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.highlight .gs { font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #0044DD } /* Generic.Traceback */
+.highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #007020 } /* Keyword.Pseudo */
+.highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #902000 } /* Keyword.Type */
+.highlight .m { color: #208050 } /* Literal.Number */
+.highlight .s { color: #4070a0 } /* Literal.String */
+.highlight .na { color: #4070a0 } /* Name.Attribute */
+.highlight .nb { color: #007020 } /* Name.Builtin */
+.highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.highlight .no { color: #60add5 } /* Name.Constant */
+.highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.highlight .ne { color: #007020 } /* Name.Exception */
+.highlight .nf { color: #06287e } /* Name.Function */
+.highlight .nl { color: #002070; font-weight: bold } /* Name.Label */
+.highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #bb60d5 } /* Name.Variable */
+.highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */
+.highlight .w { color: #bbbbbb } /* Text.Whitespace */
+.highlight .mb { color: #208050 } /* Literal.Number.Bin */
+.highlight .mf { color: #208050 } /* Literal.Number.Float */
+.highlight .mh { color: #208050 } /* Literal.Number.Hex */
+.highlight .mi { color: #208050 } /* Literal.Number.Integer */
+.highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
+.highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
+.highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
+.highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4070a0 } /* Literal.String.Double */
+.highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */
+.highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.highlight .sx { color: #c65d09 } /* Literal.String.Other */
+.highlight .sr { color: #235388 } /* Literal.String.Regex */
+.highlight .s1 { color: #4070a0 } /* Literal.String.Single */
+.highlight .ss { color: #517918 } /* Literal.String.Symbol */
+.highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287e } /* Name.Function.Magic */
+.highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
+.highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
+.highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
+.highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps.fjson b/docs/codebase/_build/json/apps.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..9a537d1ff9ea65ff590337b71a1476b163db2aa9
--- /dev/null
+++ b/docs/codebase/_build/json/apps.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"apps\">\n<h1>Apps<a class=\"headerlink\" href=\"#apps\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"scipost/\">scipost</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"scipost/#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions/\">submissions</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions/#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"journals/\">journals</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"journals/#module-journals.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"comments/\">comments</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"comments/#module-comments.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"commentaries/\">commentaries</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"commentaries/#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"theses/\">theses</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.models\">Models</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"theses/#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "current_page_name": "apps", "sourcename": "apps.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": {"link": "../maintenance/docs/", "title": "Maintenance of SciPost documentation"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/scipost", "scipost", "N", "next"], ["maintenance/docs", "Maintenance of SciPost documentation", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Apps</a></li>\n</ul>\n", "display_toc": false, "metatags": "", "sidebars": null, "title": "Apps", "next": {"link": "scipost/", "title": "scipost"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/commentaries.fjson b/docs/codebase/_build/json/apps/commentaries.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..aacaa0260233c194d337344b4ccd302d1a7ff6a6
--- /dev/null
+++ b/docs/codebase/_build/json/apps/commentaries.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"commentaries\">\n<h1>commentaries<a class=\"headerlink\" href=\"#commentaries\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-commentaries.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-commentaries.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"commentaries.models.Commentary\">\n<em class=\"property\">class </em><code class=\"descclassname\">commentaries.models.</code><code class=\"descname\">Commentary</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Commentary contains all the contents of a SciPost Commentary page for a given publication.</p>\n<dl class=\"method\">\n<dt id=\"commentaries.models.Commentary.parse_links_into_urls\">\n<code class=\"descname\">parse_links_into_urls</code><span class=\"sig-paren\">(</span><em>commit=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary.parse_links_into_urls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary.parse_links_into_urls\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Takes the arXiv nr or DOI and turns it into the urls</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-commentaries.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-commentaries.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"commentaries.views.comment_on_publication\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">comment_on_publication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#comment_on_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.comment_on_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This will let authors of an SciPost publication comment on their Publication by\nautomatically creating a Commentary page if not exist already.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.modify_commentary_request\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">modify_commentary_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#modify_commentary_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.modify_commentary_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Modify a commentary request after vetting with status &#8216;modified&#8217;.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.vet_commentary_requests\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">vet_commentary_requests</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#vet_commentary_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.vet_commentary_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Show the first commentary thats awaiting vetting</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/commentaries", "sourcename": "apps/commentaries.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../comments/", "title": "comments"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/theses", "theses", "N", "next"], ["apps/comments", "comments", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">commentaries</a><ul>\n<li><a class=\"reference internal\" href=\"#module-commentaries.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-commentaries.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "commentaries", "next": {"link": "../theses/", "title": "theses"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/comments.fjson b/docs/codebase/_build/json/apps/comments.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..2e160fef725a6f180c3c2d6ca8a8366c20409126
--- /dev/null
+++ b/docs/codebase/_build/json/apps/comments.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"comments\">\n<h1>comments<a class=\"headerlink\" href=\"#comments\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-comments.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-comments.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"comments.models.Comment\">\n<em class=\"property\">class </em><code class=\"descclassname\">comments.models.</code><code class=\"descname\">Comment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Comment is an unsollicited note, submitted by a Contributor,\non a particular publication or in reply to an earlier Comment.</p>\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author\">\n<code class=\"descname\">get_author</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author_str\">\n<code class=\"descname\">get_author_str</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author_str\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author_str\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author string, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#comments.models.Comment.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Comment relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#comments.models.Comment.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-comments.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-comments.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"comments.views.attachment\">\n<code class=\"descclassname\">comments.views.</code><code class=\"descname\">attachment</code><span class=\"sig-paren\">(</span><em>request</em>, <em>comment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/views/#attachment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.views.attachment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Open/read attachment of Comment if available.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/comments", "sourcename": "apps/comments.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../journals/", "title": "journals"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "N", "next"], ["apps/journals", "journals", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">comments</a><ul>\n<li><a class=\"reference internal\" href=\"#module-comments.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-comments.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "comments", "next": {"link": "../commentaries/", "title": "commentaries"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/journals.fjson b/docs/codebase/_build/json/apps/journals.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..ab3f36d1d04bd7f07ac3012c98f5606175872294
--- /dev/null
+++ b/docs/codebase/_build/json/apps/journals.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"journals\">\n<h1>journals<a class=\"headerlink\" href=\"#journals\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-journals.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-journals.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"journals.models.DOAJDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">DOAJDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#DOAJDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.DOAJDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>For the Directory of Open Access Journals.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Deposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Deposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each time a Crossref deposit is made for a Publication,\na Deposit object instance is created containing the Publication&#8217;s\ncurrent version of the metadata_xml field.\nAll deposit history is thus contained here.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.GenericDOIDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">GenericDOIDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#GenericDOIDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.GenericDOIDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Instances of this class represent Crossref deposits for non-publication\nobjects such as Reports, Comments etc.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Issue\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Issue</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_volume</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>status</em>, <em>doi_label</em>, <em>path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Issue.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Journal\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Journal</code><span class=\"sig-paren\">(</span><em>id</em>, <em>name</em>, <em>doi_label</em>, <em>issn</em>, <em>active</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Journal.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Publication\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Publication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Publication is an object directly related to an accepted Submission. It contains metadata,\nthe actual publication file, author data, etc. etc.</p>\n<dl class=\"method\">\n<dt id=\"journals.models.Publication.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.PublicationAuthorsTable\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">PublicationAuthorsTable</code><span class=\"sig-paren\">(</span><em>id</em>, <em>publication</em>, <em>unregistered_author</em>, <em>contributor</em>, <em>order</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#PublicationAuthorsTable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.PublicationAuthorsTable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Reference\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Reference</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Reference\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Reference\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Refence is a reference used in a specific Publication.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.UnregisteredAuthor\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">UnregisteredAuthor</code><span class=\"sig-paren\">(</span><em>id</em>, <em>first_name</em>, <em>last_name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#UnregisteredAuthor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.UnregisteredAuthor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Volume\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Volume</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_journal</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Volume.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-journals.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-journals.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"journals.views.accepted\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">accepted</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#accepted\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.accepted\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for submissions to SciPost Physics which\nhave been accepted but are not yet published.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_associated_grant\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_associated_grant</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_associated_grant\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_associated_grant\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a grant from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_author\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_author</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>contributor_id=None</em>, <em>unregistered_author_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If not all authors are registered Contributors or if they have not\nall claimed authorship, this method allows editorial administrators\nto associated them to the publication.\nThis is important for the Crossref metadata, in which all authors must appear.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_generic_funder\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_generic_funder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_generic_funder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_generic_funder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a funder (generic, not via grant) from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_citation_list_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_citation_list_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_citation_list_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_citation_list_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the citation_list dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_funding_info_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_funding_info_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_funding_info_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_funding_info_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the funding_info dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_metadata_xml\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_metadata_xml</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_metadata_xml\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_metadata_xml\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>To be called by an EdAdmin after the citation_list,\nfunding_info entries have been filled.\nPopulates the metadata_xml field of a Publication instance.\nThe contents can then be sent to Crossref for registration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.email_object_made_citable\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">email_object_made_citable</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#email_object_made_citable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.email_object_made_citable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to the author of a Report or a Comment,\nto notify that the object has been made citable (doi registered).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.generic_metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">generic_metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#generic_metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.generic_metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method creates the metadata for non-Publication objects\nsuch as Reports and Comments, and deposits the metadata to\nCrossref.\nIf there exists a relation to a SciPost-published object,\nthe deposit uses Crossref&#8217;s peer review content type.\nOtherwise the deposit is done as a dataset.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.initiate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">initiate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#initiate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.initiate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nPublish the manuscript after proofs have been accepted.\nThis method prefills a ValidatePublicationForm for further\nprocessing (verification in validate_publication method).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.journals\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">journals</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#journals\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.journals\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main landing page for Journals application.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_comment_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_comment_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_comment_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_comment_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Comments.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_report_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_report_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_report_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_report_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Reports.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_DOAJ_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_DOAJ_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_DOAJ_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_DOAJ_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>DOAJ metadata deposit.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>option='test'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Crossref metadata deposit.\nIf test==True, test the metadata_xml using the Crossref test server.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.recent\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">recent</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#recent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.recent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for the most recent 20 publications in SciPost Physics.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.sign_existing_report\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">sign_existing_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#sign_existing_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.sign_existing_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Allows the author of a Report, originally submitted anonymously,\nto sign the Report.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.update_references\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">update_references</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#update_references\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.update_references\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update the References for a certain Publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.validate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">validate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#validate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.validate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This creates a Publication instance from the ValidatePublicationForm,\npre-filled by the initiate_publication method above.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/journals", "sourcename": "apps/journals.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../submissions/", "title": "submissions"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/comments", "comments", "N", "next"], ["apps/submissions", "submissions", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">journals</a><ul>\n<li><a class=\"reference internal\" href=\"#module-journals.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-journals.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "journals", "next": {"link": "../comments/", "title": "comments"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/scipost.fjson b/docs/codebase/_build/json/apps/scipost.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..b5fed6f90dd1b73419ab94da4e8f8868f8b29e91
--- /dev/null
+++ b/docs/codebase/_build/json/apps/scipost.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"scipost\">\n<h1>scipost<a class=\"headerlink\" href=\"#scipost\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-scipost.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-scipost.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"scipost.models.AuthorshipClaim\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">AuthorshipClaim</code><span class=\"sig-paren\">(</span><em>id</em>, <em>claimant</em>, <em>publication</em>, <em>submission</em>, <em>commentary</em>, <em>thesislink</em>, <em>vetted_by</em>, <em>status</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#AuthorshipClaim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.AuthorshipClaim\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.CitationNotification\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">CitationNotification</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#CitationNotification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.CitationNotification\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Contributor\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Contributor</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All <em>science</em> users of SciPost are Contributors.\nusername, password, email, first_name and last_name are inherited from User.</p>\n<dl class=\"method\">\n<dt id=\"scipost.models.Contributor.generate_key\">\n<code class=\"descname\">generate_key</code><span class=\"sig-paren\">(</span><em>feed=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor.generate_key\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor.generate_key\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Generate and save a new activation_key for the contributor, given a certain feed.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.DraftInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">DraftInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#DraftInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.DraftInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Draft of an invitation, filled in by an officer.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollege\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollege</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollege\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollege\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A SciPost Editorial College for a specific discipline.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollegeFellowship\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollegeFellowship</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollegeFellowship\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollegeFellowship\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Editorial College Fellowship connecting Editorial College and Contributors,\nmaybe with a limiting start/until date.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.PrecookedEmail\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">PrecookedEmail</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#PrecookedEmail\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.PrecookedEmail\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each instance contains an email template in both plain and html formats.\nCan only be created by Admins.\nFor further use in scipost:send_precooked_email method.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.RegistrationInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">RegistrationInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#RegistrationInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.RegistrationInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Remark\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Remark</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>feedback</em>, <em>nomination</em>, <em>motion</em>, <em>submission</em>, <em>recommendation</em>, <em>date</em>, <em>remark</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.UnavailabilityPeriod\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">UnavailabilityPeriod</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>start</em>, <em>end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#UnavailabilityPeriod\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.UnavailabilityPeriod\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.models.get_sentinel_user\">\n<code class=\"descclassname\">scipost.models.</code><code class=\"descname\">get_sentinel_user</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#get_sentinel_user\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.get_sentinel_user\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Temporary fix: eventually the &#8216;to-be-removed-Contributor&#8217; should be\nstatus: &#8220;deactivated&#8221; and anonymized.\nFallback user for models relying on Contributor that is being deleted.</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-scipost.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-scipost.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"scipost.views.activation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">activation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#activation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.activation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>After registration, an email verification link is sent.\nOnce clicked, the account is activated.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.claim_authorships\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">claim_authorships</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#claim_authorships\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.claim_authorships\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The system auto-detects potential authorships (of submissions,\npapers subject to commentaries, theses, ...).\nThe contributor must confirm/deny authorship from the\nPersonal Page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.contributor_info\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">contributor_info</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#contributor_info\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.contributor_info\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All visitors can see a digest of a\nContributor&#8217;s activities/contributions by clicking\non the relevant name (in listing headers of Submissions, ...).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.csrf_failure\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">csrf_failure</code><span class=\"sig-paren\">(</span><em>request</em>, <em>reason=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#csrf_failure\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.csrf_failure\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Custom CSRF Failure. Informing admins via email as well.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.delete_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">delete_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em>, <em>period_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#delete_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.delete_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Delete period unavailable registered.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_group_members\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_group_members</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_group_members\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_group_members\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send bulk emails to (members of) selected groups</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_particular\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_particular</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_particular\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_particular\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.index\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">index</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.index\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.invitation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If a scientist has recieved an invitation (RegistrationInvitation)\nhe/she will finish it&#8217;s invitation via still view which will prefill\nthe default registration form.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.is_registered\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">is_registered</code><span class=\"sig-paren\">(</span><em>user</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#is_registered\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.is_registered\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method checks if user is activated assuming an validated user\nhas at least one permission group (<cite>Registered Contributor</cite> or <cite>Partner Accounts</cite>).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.login_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">login_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#login_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.login_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view shows and processes a user&#8217;s login session.</p>\n<p>The function based method login() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.logout_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">logout_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#logout_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.logout_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The function based method logout() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.mark_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">mark_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#mark_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.mark_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Mark period unavailable for Contributor using this view.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.personal_page\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">personal_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>tab='account'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#personal_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.personal_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Personal Page is the main view for accessing user functions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.protected_serve\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">protected_serve</code><span class=\"sig-paren\">(</span><em>request</em>, <em>path</em>, <em>show_indexes=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#protected_serve\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.protected_serve\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!\nThis will be usefull eg. in the admin pages.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.register\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">register</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.register\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This public registration view shows and processes the form\nthat will create new user account requests. After registration\nthe Contributor will need to activate its account via the mail\nsent. After activation the user needs to be vetted by the SciPost\nadmin.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>List all inactive users. These are users that have filled the registration form,\nbut did not yet activate their account using the validation email.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests_reset\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests_reset</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests_reset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests_reset\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reset specific activation_key for Contributor and resend activation mail.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.request_new_activation_link\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">request_new_activation_link</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#request_new_activation_link\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.request_new_activation_link\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Once a user tries to activate its account using the email verification link sent\nand the key has expired, the user redirected to possibly request a new token.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.send_precooked_email\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">send_precooked_email</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#send_precooked_email\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.send_precooked_email\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send precooked emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.unsubscribe\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">unsubscribe</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#unsubscribe\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.unsubscribe\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The link to this method is included in all email communications\nwith a Contributor. The key used is the original activation key.\nAt this link, the Contributor can confirm that he/she does not\nwant to receive any non-essential email notifications from SciPost.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/scipost", "sourcename": "apps/scipost.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../", "title": "Apps"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/submissions", "submissions", "N", "next"], ["apps", "Apps", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">scipost</a><ul>\n<li><a class=\"reference internal\" href=\"#module-scipost.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-scipost.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "scipost", "next": {"link": "../submissions/", "title": "submissions"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/submissions.fjson b/docs/codebase/_build/json/apps/submissions.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..bc41f12c9c9a6a06565deea153d5ec0698be4f5e
--- /dev/null
+++ b/docs/codebase/_build/json/apps/submissions.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"submissions\">\n<h1>submissions<a class=\"headerlink\" href=\"#submissions\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-submissions.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-submissions.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"submissions.models.EICRecommendation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EICRecommendation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EICRecommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EICRecommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The EICRecommendation is the recommendation of a Submission written by\nthe Editor-in-charge made at the end of the refereeing cycle. It can be voted for by\na subset of Fellows and should contain the actual publication decision.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialAssignment\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialAssignment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialAssignment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialAssignment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>EditorialAssignment is a registration for Fellows of their duties of being a\nEditor-in-charge for a specific Submission. This model could start as a invitation only,\nwhich should then be accepted or declined by the invited.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialCommunication\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialCommunication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialCommunication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialCommunication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each individual communication between Editor-in-charge\nto and from Referees and Authors becomes an instance of this class.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.RefereeInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">RefereeInvitation</code><span class=\"sig-paren\">(</span><em>id</em>, <em>submission</em>, <em>referee</em>, <em>title</em>, <em>first_name</em>, <em>last_name</em>, <em>email_address</em>, <em>invitation_key</em>, <em>date_invited</em>, <em>invited_by</em>, <em>nr_reminders</em>, <em>date_last_reminded</em>, <em>accepted</em>, <em>date_responded</em>, <em>refusal_reason</em>, <em>fulfilled</em>, <em>cancelled</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#RefereeInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.RefereeInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Report\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Report</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Both types of reports, invited or contributed.</p>\n<p>This Report model acts as both a regular <cite>Report</cite> and a <cite>FollowupReport</cite>; A normal Report\nshould have all fields required, whereas a FollowupReport only has the <cite>report</cite> field as\na required field.</p>\n<p>Important note!\nDue to the construction of the two different types within a single model, it is important\nto explicitly implement the perticular differences in for example the form used.</p>\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.associated_published_doi\">\n<code class=\"descname\">associated_published_doi</code><a class=\"headerlink\" href=\"#submissions.models.Report.associated_published_doi\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return the doi of the published object.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.is_followup_report\">\n<code class=\"descname\">is_followup_report</code><a class=\"headerlink\" href=\"#submissions.models.Report.is_followup_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if current Report is a <cite>FollowupReport</cite>. A Report is a <cite>FollowupReport</cite> if the\nauthor of the report already has a vetted report in the series of the specific Submission.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Report.latest_report_from_series\">\n<code class=\"descname\">latest_report_from_series</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report.latest_report_from_series\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report.latest_report_from_series\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get latest Report from the same author for the Submission series.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#submissions.models.Report.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#submissions.models.Report.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Submission\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Submission</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Submission is a SciPost register of an ArXiv article. This object is the central\ninstance for every action, recommendation, communication, etc. etc. that is related to the\nrefereeing cycle of a Submission. A possible Publication object is later directly related\nto this Submission instance.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.comments_set_complete\">\n<code class=\"descname\">comments_set_complete</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.comments_set_complete\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.comments_set_complete\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return comments to Submission, comments on Reports of Submission and\nnested comments related to this Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions\">\n<code class=\"descname\">other_versions</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission that are publicly accessible.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions_pool\">\n<code class=\"descname\">other_versions_pool</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions_pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.thread\">\n<code class=\"descname\">thread</code><a class=\"headerlink\" href=\"#submissions.models.Submission.thread\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all versions of the Submission with that arxiv id.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.touch\">\n<code class=\"descname\">touch</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.touch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.touch\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update latest activity as a service</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.SubmissionEvent\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">SubmissionEvent</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#SubmissionEvent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.SubmissionEvent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The SubmissionEvent&#8217;s goal is to act as a messaging/logging model\nfor the Submission cycle. Its main audience will be the author(s) and\nthe Editor-in-charge of a Submission.</p>\n<p>Be aware!\nBoth the author and editor-in-charge will read the submission event.\nMake sure the right text is given to the right event-type, to protect\nthe fellow&#8217;s identity.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.iThenticateReport\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">iThenticateReport</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>iThenticateReport is the SciPost register of an iThenticate report. It saves\nbasic information coming from iThenticate into the SciPost database for easy access.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.iThenticateReport.get_report_url\">\n<code class=\"descname\">get_report_url</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport.get_report_url\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport.get_report_url\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Request new read-only url from iThenticate and return.</p>\n<p>Note: The read-only link is valid for only 15 minutes, saving may be worthless</p>\n</dd></dl>\n\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-submissions.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-submissions.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"function\">\n<dt id=\"submissions.views.accept_or_decline_ref_invitations\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">accept_or_decline_ref_invitations</code><span class=\"sig-paren\">(</span><em>request</em>, <em>invitation_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#accept_or_decline_ref_invitations\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.accept_or_decline_ref_invitations\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>RefereeInvitations need to be either accepted or declined by the invited user\nusing this view. The decision will be taken one invitation at a time.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.add_remark\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">add_remark</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#add_remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.add_remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>With this method, an Editorial Fellow or Board Member\nis adding a remark on a Submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assign_submission\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assign_submission</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assign_submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assign_submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Assign Editor-in-charge to Submission.\nAction done by SciPost Administration or Editorial College Administration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_failed\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_failed</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_failed\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_failed\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>No Editorial Fellow has accepted or volunteered to become Editor-in-charge.\nThe submission is rejected.\nThis method is called from pool.html by an Editorial Administrator.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_request\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>assignment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Process EditorialAssignment acceptance/denial form or show if not submitted.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignments\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignments</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignments\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignments\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page provides a Fellow with an explicit task list\nof editorial actions which should be undertaken.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cancel_ref_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cancel_ref_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cancel_ref_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cancel_ref_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nto remove a referee for the list of invited ones.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.close_refereeing_round\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">close_refereeing_round</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#close_refereeing_round\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.close_refereeing_round\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by the Editor-in-charge when a satisfactory number of\nreports have been gathered.\nAutomatically emails the authors to ask them if they want to\nround off any replies to reports or comments before the\neditorial recommendation is formulated.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.communication\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">communication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>comtype</em>, <em>referee_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#communication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.communication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Communication between editor-in-charge, author or referee\noccurring during the submission refereeing.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cycle_form_submit\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cycle_form_submit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cycle_form_submit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cycle_form_submit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If Submission is <cite>resubmission_incoming</cite> the EIC should first choose what refereeing\ncycle to choose.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_page\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The central page for the EIC to manage all its Editorial duties.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_workflow\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_workflow</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_workflow\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_workflow\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Summary page for Editorial Fellows, containing a digest\nof the actions to take to handle Submissions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Write EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.extend_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">extend_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>days</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#extend_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.extend_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Extend Refereeing deadline for Submission and open reporting and commenting.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.fix_College_decision\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">fix_College_decision</code><span class=\"sig-paren\">(</span><em>request</em>, <em>rec_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#fix_College_decision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.fix_College_decision\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Terminates the voting on a Recommendation.\nCalled by an Editorial Administrator.</p>\n<p># TODO - 2 bugs:</p>\n<p>TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.\nTO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.pool\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">pool</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#pool\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Submissions pool contains all submissions which are undergoing\nthe editorial process, from submission\nto publication acceptance or rejection.\nAll members of the Editorial College have access.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.recruit_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">recruit_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#recruit_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.recruit_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If the Editor-in-charge does not find the desired referee among Contributors\n(otherwise, the method send_refereeing_invitation below is used instead),\nhe/she can invite somebody by providing name + contact details.\nThis function emails a registration invitation to this person.\nThe pending refereeing invitation is then recognized upon registration,\nusing the invitation token.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.ref_invitation_reminder\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">ref_invitation_reminder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#ref_invitation_reminder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.ref_invitation_reminder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nwhen a referee has been invited but hasn&#8217;t answered yet.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reformulate_eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reformulate_eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reformulate_eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reformulate_eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reformulate EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.remind_Fellows_to_vote\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">remind_Fellows_to_vote</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#remind_Fellows_to_vote\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.remind_Fellows_to_vote\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to all Fellow with pending voting duties.\nIt must be called by and Editorial Administrator.</p>\n<p>TODO: This reminder function doesn&#8217;t filter per submission?!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.report_detail_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">report_detail_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>report_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#report_detail_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.report_detail_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Download the PDF of a Report if available.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reports_accepted_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reports_accepted_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reports_accepted_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reports_accepted_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.select_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">select_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#select_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.select_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Select/Invite referees by first listing them here.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.send_refereeing_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">send_refereeing_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#send_refereeing_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.send_refereeing_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is called by the EIC from the submission&#8217;s editorial_page,\nin the case where the referee is an identified Contributor.\nFor a referee who isn&#8217;t a Contributor yet, the method recruit_referee above\nis called instead.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.set_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">set_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#set_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.set_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Set Refereeing deadline for Submission and open reporting and commenting if\nthe new date is in the future.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submission_refereeing_package_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submission_refereeing_package_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submission_refereeing_package_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submission_refereeing_package_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view let&#8217;s the user download all Report PDF&#8217;s in a single merged PDF.\nThe merging takes places every time its downloaded to make sure all available report PDF&#8217;s\nare included and the EdColAdmin doesn&#8217;t have to compile the package every time again.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submit_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submit_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submit_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submit_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A form to submit a report on a submission will be shown and processed here.</p>\n<p>Important checks to be aware of include an author check for the submission,\nhas the reporting deadline not been reached yet and does there exist any invitation\nfor the current user on this submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.treated_submissions_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">treated_submissions_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#treated_submissions_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.treated_submissions_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Report with status <cite>unvetted</cite> will be shown. A user may only vet reports of submissions\nhe/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</p>\n<p>After vetting an email is sent to the report author, bcc EIC. If report\nhas not been refused, the submission author is also mailed.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_reports_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_reports_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_reports_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_reports_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reports with status <cite>unvetted</cite> will be shown (oldest first).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.volunteer_as_EIC\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">volunteer_as_EIC</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#volunteer_as_EIC\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.volunteer_as_EIC\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called when a Fellow volunteers while perusing the submissions pool.\nThis is an adapted version of the assignment_request method.</p>\n</dd></dl>\n\n</div>\n</div>\n", "current_page_name": "apps/submissions", "sourcename": "apps/submissions.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../scipost/", "title": "scipost"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/journals", "journals", "N", "next"], ["apps/scipost", "scipost", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">submissions</a><ul>\n<li><a class=\"reference internal\" href=\"#module-submissions.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-submissions.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "submissions", "next": {"link": "../journals/", "title": "journals"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/apps/theses.fjson b/docs/codebase/_build/json/apps/theses.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..840ff00210d86f29786ada41bfcfae8cd39cc2c1
--- /dev/null
+++ b/docs/codebase/_build/json/apps/theses.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"theses\">\n<h1>theses<a class=\"headerlink\" href=\"#theses\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"module-theses.models\">\n<span id=\"models\"></span><h2>Models<a class=\"headerlink\" href=\"#module-theses.models\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<dl class=\"class\">\n<dt id=\"theses.models.ThesisLink\">\n<em class=\"property\">class </em><code class=\"descclassname\">theses.models.</code><code class=\"descname\">ThesisLink</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/theses/models/#ThesisLink\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#theses.models.ThesisLink\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>An URL pointing to a thesis</p>\n</dd></dl>\n\n</div>\n<div class=\"section\" id=\"module-theses.views\">\n<span id=\"views\"></span><h2>Views<a class=\"headerlink\" href=\"#module-theses.views\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "current_page_name": "apps/theses", "sourcename": "apps/theses.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Apps"}], "prev": {"link": "../commentaries/", "title": "commentaries"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps/commentaries", "commentaries", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">theses</a><ul>\n<li><a class=\"reference internal\" href=\"#module-theses.models\">Models</a></li>\n<li><a class=\"reference internal\" href=\"#module-theses.views\">Views</a></li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "theses", "next": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/codebase.fjson b/docs/codebase/_build/json/codebase.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..55bd276d5f3ebe72c2c6f112d9d5d92dbe22738c
--- /dev/null
+++ b/docs/codebase/_build/json/codebase.fjson
@@ -0,0 +1 @@
+{"prev": {"title": "Maintenance of SciPost documentation", "link": "../maintenance/docs/"}, "alabaster_version": "0.7.10", "meta": {}, "parents": [], "customsidebar": null, "display_toc": false, "title": "SciPost codebase", "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">SciPost codebase</a></li>\n</ul>\n", "sourcename": "codebase.txt", "next": {"title": "Models", "link": "../modules/models/"}, "body": "<div class=\"section\" id=\"scipost-codebase\">\n<h1>SciPost codebase<a class=\"headerlink\" href=\"#scipost-codebase\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../modules/models/\">Models</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"../modules/views/\">Views</a></li>\n</ul>\n</div>\n</div>\n", "current_page_name": "codebase", "metatags": "", "sidebars": null, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["modules/models", "Models", "N", "next"], ["maintenance/docs", "Maintenance of SciPost documentation", "P", "previous"]]}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/environment.pickle b/docs/codebase/_build/json/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..3a216e7c1e34f45e2b7de010516855ce8377ea65
Binary files /dev/null and b/docs/codebase/_build/json/environment.pickle differ
diff --git a/docs/codebase/_build/json/genindex.fjson b/docs/codebase/_build/json/genindex.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..388906a2368e564ac4093bf8659467c9028f7e33
--- /dev/null
+++ b/docs/codebase/_build/json/genindex.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "genindexentries": [["A", [["accept_or_decline_ref_invitations() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.accept_or_decline_ref_invitations"]], [], null]], ["accepted() (in module journals.views)", [[["", "../apps/journals/#journals.views.accepted"]], [], null]], ["activation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.activation"]], [], null]], ["add_associated_grant() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_associated_grant"]], [], null]], ["add_author() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_author"]], [], null]], ["add_generic_funder() (in module journals.views)", [[["", "../apps/journals/#journals.views.add_generic_funder"]], [], null]], ["add_remark() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.add_remark"]], [], null]], ["assign_submission() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assign_submission"]], [], null]], ["assignment_failed() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_failed"]], [], null]], ["assignment_request() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignment_request"]], [], null]], ["assignments() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.assignments"]], [], null]], ["associated_published_doi (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.associated_published_doi"]], [], null]], ["attachment() (in module comments.views)", [[["", "../apps/comments/#comments.views.attachment"]], [], null]], ["AuthorshipClaim (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.AuthorshipClaim"]], [], null]]]], ["C", [["cancel_ref_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cancel_ref_invitation"]], [], null]], ["citation_rate() (journals.models.Issue method)", [[["", "../apps/journals/#journals.models.Issue.citation_rate"]], [["(journals.models.Journal method)", [["", "../apps/journals/#journals.models.Journal.citation_rate"]]], ["(journals.models.Publication method)", [["", "../apps/journals/#journals.models.Publication.citation_rate"]]], ["(journals.models.Volume method)", [["", "../apps/journals/#journals.models.Volume.citation_rate"]]]], null]], ["CitationNotification (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.CitationNotification"]], [], null]], ["claim_authorships() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.claim_authorships"]], [], null]], ["close_refereeing_round() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.close_refereeing_round"]], [], null]], ["Comment (class in comments.models)", [[["", "../apps/comments/#comments.models.Comment"]], [], null]], ["comment_on_publication() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.comment_on_publication"]], [], null]], ["commentaries.models (module)", [[["", "../apps/commentaries/#module-commentaries.models"]], [], null]], ["commentaries.views (module)", [[["", "../apps/commentaries/#module-commentaries.views"]], [], null]], ["Commentary (class in commentaries.models)", [[["", "../apps/commentaries/#commentaries.models.Commentary"]], [], null]], ["comments.models (module)", [[["", "../apps/comments/#module-comments.models"]], [], null]], ["comments.views (module)", [[["", "../apps/comments/#module-comments.views"]], [], null]], ["comments_set_complete() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.comments_set_complete"]], [], null]], ["communication() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.communication"]], [], null]], ["Contributor (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Contributor"]], [], null]], ["contributor_info() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.contributor_info"]], [], null]], ["create_citation_list_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_citation_list_metadata"]], [], null]], ["create_funding_info_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_funding_info_metadata"]], [], null]], ["create_metadata_xml() (in module journals.views)", [[["", "../apps/journals/#journals.views.create_metadata_xml"]], [], null]], ["csrf_failure() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.csrf_failure"]], [], null]], ["cycle_form_submit() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.cycle_form_submit"]], [], null]]]], ["D", [["delete_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.delete_unavailable_period"]], [], null]], ["Deposit (class in journals.models)", [[["", "../apps/journals/#journals.models.Deposit"]], [], null]], ["DOAJDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.DOAJDeposit"]], [], null]], ["DraftInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.DraftInvitation"]], [], null]]]], ["E", [["editorial_page() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_page"]], [], null]], ["editorial_workflow() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.editorial_workflow"]], [], null]], ["EditorialAssignment (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialAssignment"]], [], null]], ["EditorialCollege (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollege"]], [], null]], ["EditorialCollegeFellowship (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.EditorialCollegeFellowship"]], [], null]], ["EditorialCommunication (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EditorialCommunication"]], [], null]], ["eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.eic_recommendation"]], [], null]], ["EICRecommendation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.EICRecommendation"]], [], null]], ["email_group_members() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_group_members"]], [], null]], ["email_object_made_citable() (in module journals.views)", [[["", "../apps/journals/#journals.views.email_object_made_citable"]], [], null]], ["email_particular() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.email_particular"]], [], null]], ["extend_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.extend_refereeing_deadline"]], [], null]]]], ["F", [["fix_College_decision() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.fix_College_decision"]], [], null]]]], ["G", [["generate_key() (scipost.models.Contributor method)", [[["", "../apps/scipost/#scipost.models.Contributor.generate_key"]], [], null]], ["generic_metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.generic_metadata_xml_deposit"]], [], null]], ["GenericDOIDeposit (class in journals.models)", [[["", "../apps/journals/#journals.models.GenericDOIDeposit"]], [], null]], ["get_author() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author"]], [], null]], ["get_author_str() (comments.models.Comment method)", [[["", "../apps/comments/#comments.models.Comment.get_author_str"]], [], null]], ["get_report_url() (submissions.models.iThenticateReport method)", [[["", "../apps/submissions/#submissions.models.iThenticateReport.get_report_url"]], [], null]], ["get_sentinel_user() (in module scipost.models)", [[["", "../apps/scipost/#scipost.models.get_sentinel_user"]], [], null]]]], ["I", [["index() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.index"]], [], null]], ["initiate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.initiate_publication"]], [], null]], ["invitation() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.invitation"]], [], null]], ["is_followup_report (submissions.models.Report attribute)", [[["", "../apps/submissions/#submissions.models.Report.is_followup_report"]], [], null]], ["is_registered() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.is_registered"]], [], null]], ["Issue (class in journals.models)", [[["", "../apps/journals/#journals.models.Issue"]], [], null]], ["iThenticateReport (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.iThenticateReport"]], [], null]]]], ["J", [["Journal (class in journals.models)", [[["", "../apps/journals/#journals.models.Journal"]], [], null]], ["journals() (in module journals.views)", [[["", "../apps/journals/#journals.views.journals"]], [], null]], ["journals.models (module)", [[["", "../apps/journals/#module-journals.models"]], [], null]], ["journals.views (module)", [[["", "../apps/journals/#module-journals.views"]], [], null]]]], ["L", [["latest_report_from_series() (submissions.models.Report method)", [[["", "../apps/submissions/#submissions.models.Report.latest_report_from_series"]], [], null]], ["login_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.login_view"]], [], null]], ["logout_view() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.logout_view"]], [], null]]]], ["M", [["manage_comment_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_comment_metadata"]], [], null]], ["manage_report_metadata() (in module journals.views)", [[["", "../apps/journals/#journals.views.manage_report_metadata"]], [], null]], ["mark_unavailable_period() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.mark_unavailable_period"]], [], null]], ["metadata_DOAJ_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_DOAJ_deposit"]], [], null]], ["metadata_xml_deposit() (in module journals.views)", [[["", "../apps/journals/#journals.views.metadata_xml_deposit"]], [], null]], ["modify_commentary_request() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.modify_commentary_request"]], [], null]]]], ["O", [["other_versions (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions"]], [], null]], ["other_versions_pool (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.other_versions_pool"]], [], null]]]], ["P", [["parse_links_into_urls() (commentaries.models.Commentary method)", [[["", "../apps/commentaries/#commentaries.models.Commentary.parse_links_into_urls"]], [], null]], ["personal_page() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.personal_page"]], [], null]], ["pool() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.pool"]], [], null]], ["PrecookedEmail (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.PrecookedEmail"]], [], null]], ["protected_serve() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.protected_serve"]], [], null]], ["Publication (class in journals.models)", [[["", "../apps/journals/#journals.models.Publication"]], [], null]], ["PublicationAuthorsTable (class in journals.models)", [[["", "../apps/journals/#journals.models.PublicationAuthorsTable"]], [], null]]]], ["R", [["recent() (in module journals.views)", [[["", "../apps/journals/#journals.views.recent"]], [], null]], ["recruit_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.recruit_referee"]], [], null]], ["ref_invitation_reminder() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.ref_invitation_reminder"]], [], null]], ["RefereeInvitation (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.RefereeInvitation"]], [], null]], ["Reference (class in journals.models)", [[["", "../apps/journals/#journals.models.Reference"]], [], null]], ["reformulate_eic_recommendation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reformulate_eic_recommendation"]], [], null]], ["register() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.register"]], [], null]], ["registration_requests() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests"]], [], null]], ["registration_requests_reset() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.registration_requests_reset"]], [], null]], ["RegistrationInvitation (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.RegistrationInvitation"]], [], null]], ["relation_to_published (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.relation_to_published"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.relation_to_published"]]]], null]], ["Remark (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.Remark"]], [], null]], ["remind_Fellows_to_vote() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.remind_Fellows_to_vote"]], [], null]], ["Report (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Report"]], [], null]], ["report_detail_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.report_detail_pdf"]], [], null]], ["reports_accepted_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.reports_accepted_list"]], [], null]], ["request_new_activation_link() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.request_new_activation_link"]], [], null]]]], ["S", [["scipost.models (module)", [[["", "../apps/scipost/#module-scipost.models"]], [], null]], ["scipost.views (module)", [[["", "../apps/scipost/#module-scipost.views"]], [], null]], ["select_referee() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.select_referee"]], [], null]], ["send_precooked_email() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.send_precooked_email"]], [], null]], ["send_refereeing_invitation() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.send_refereeing_invitation"]], [], null]], ["set_refereeing_deadline() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.set_refereeing_deadline"]], [], null]], ["sign_existing_report() (in module journals.views)", [[["", "../apps/journals/#journals.views.sign_existing_report"]], [], null]], ["Submission (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.Submission"]], [], null]], ["submission_refereeing_package_pdf() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submission_refereeing_package_pdf"]], [], null]], ["SubmissionEvent (class in submissions.models)", [[["", "../apps/submissions/#submissions.models.SubmissionEvent"]], [], null]], ["submissions.models (module)", [[["", "../apps/submissions/#module-submissions.models"]], [], null]], ["submissions.views (module)", [[["", "../apps/submissions/#module-submissions.views"]], [], null]], ["submit_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.submit_report"]], [], null]]]], ["T", [["theses.models (module)", [[["", "../apps/theses/#module-theses.models"]], [], null]], ["theses.views (module)", [[["", "../apps/theses/#module-theses.views"]], [], null]], ["ThesisLink (class in theses.models)", [[["", "../apps/theses/#theses.models.ThesisLink"]], [], null]], ["thread (submissions.models.Submission attribute)", [[["", "../apps/submissions/#submissions.models.Submission.thread"]], [], null]], ["title (comments.models.Comment attribute)", [[["", "../apps/comments/#comments.models.Comment.title"]], [["(submissions.models.Report attribute)", [["", "../apps/submissions/#submissions.models.Report.title"]]]], null]], ["touch() (submissions.models.Submission method)", [[["", "../apps/submissions/#submissions.models.Submission.touch"]], [], null]], ["treated_submissions_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.treated_submissions_list"]], [], null]]]], ["U", [["UnavailabilityPeriod (class in scipost.models)", [[["", "../apps/scipost/#scipost.models.UnavailabilityPeriod"]], [], null]], ["UnregisteredAuthor (class in journals.models)", [[["", "../apps/journals/#journals.models.UnregisteredAuthor"]], [], null]], ["unsubscribe() (in module scipost.views)", [[["", "../apps/scipost/#scipost.views.unsubscribe"]], [], null]], ["update_references() (in module journals.views)", [[["", "../apps/journals/#journals.views.update_references"]], [], null]]]], ["V", [["validate_publication() (in module journals.views)", [[["", "../apps/journals/#journals.views.validate_publication"]], [], null]], ["vet_commentary_requests() (in module commentaries.views)", [[["", "../apps/commentaries/#commentaries.views.vet_commentary_requests"]], [], null]], ["vet_submitted_report() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_report"]], [], null]], ["vet_submitted_reports_list() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.vet_submitted_reports_list"]], [], null]], ["Volume (class in journals.models)", [[["", "../apps/journals/#journals.models.Volume"]], [], null]], ["volunteer_as_EIC() (in module submissions.views)", [[["", "../apps/submissions/#submissions.views.volunteer_as_EIC"]], [], null]]]]], "split_index": false, "current_page_name": "genindex", "genindexcounts": [14, 24, 4, 12, 1, 7, 7, 4, 3, 6, 2, 7, 18, 13, 8, 4, 6], "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/index.fjson b/docs/codebase/_build/json/index.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..41083c153310813ab4793aaba42932b7675205e0
--- /dev/null
+++ b/docs/codebase/_build/json/index.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"welcome-to-scipost-s-codebase-documentation\">\n<h1>Welcome to SciPost&#8217;s codebase documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-codebase-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/docs/\">Maintenance of SciPost documentation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"apps/\">Apps</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/scipost/\">scipost</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/submissions/\">submissions</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/journals/\">journals</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/comments/\">comments</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/commentaries/\">commentaries</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"apps/theses/\">theses</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "current_page_name": "index", "sourcename": "index.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": null, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance", "Maintenance", "N", "next"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s codebase documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "Welcome to SciPost&#8217;s codebase documentation", "next": {"link": "maintenance/", "title": "Maintenance"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/last_build b/docs/codebase/_build/json/last_build
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/docs/codebase/_build/json/maintenance.fjson b/docs/codebase/_build/json/maintenance.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..9e2c48154f75de1e614243e509ce57f5bb1acc91
--- /dev/null
+++ b/docs/codebase/_build/json/maintenance.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"maintenance\">\n<h1>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"docs/\">Maintenance of SciPost documentation</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinx-generated-docs\">Sphinx-generated docs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"docs/#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "current_page_name": "maintenance", "sourcename": "maintenance.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [], "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s codebase documentation"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["maintenance/docs", "Maintenance of SciPost documentation", "N", "next"], ["index", "Welcome to SciPost&#8217;s codebase documentation", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance</a></li>\n</ul>\n", "display_toc": false, "metatags": "", "sidebars": null, "title": "Maintenance", "next": {"link": "docs/", "title": "Maintenance of SciPost documentation"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/maintenance/docs.fjson b/docs/codebase/_build/json/maintenance/docs.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..8c445cd1bf168e55e6c52bb86fdf747a04779345
--- /dev/null
+++ b/docs/codebase/_build/json/maintenance/docs.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "body": "<div class=\"section\" id=\"maintenance-of-scipost-documentation\">\n<h1>Maintenance of SciPost documentation<a class=\"headerlink\" href=\"#maintenance-of-scipost-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"section\" id=\"sphinx-generated-docs\">\n<h2>Sphinx-generated docs<a class=\"headerlink\" href=\"#sphinx-generated-docs\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"generating-the-static-html-files\">\n<h3>Generating the static html files<a class=\"headerlink\" href=\"#generating-the-static-html-files\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>In the <cite>docs</cite> subfolders <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>, invoke <code class=\"docutils literal\"><span class=\"pre\">make</span> <span class=\"pre\">html</span></code>. The html files will be automatically generated and put in <cite>_build/html</cite> subfolders.</p>\n</div>\n</div>\n<div class=\"section\" id=\"sphinxdoc-generated-docs-viewable-online\">\n<h2>Sphinxdoc-generated docs (viewable online)<a class=\"headerlink\" href=\"#sphinxdoc-generated-docs-viewable-online\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"setting-things-up\">\n<h3>Setting things up<a class=\"headerlink\" href=\"#setting-things-up\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>The <cite>django-sphinxdoc</cite> app creates <cite>Project</cite> and <cite>Document</cite> classes. In the admin, one should create the following projects (slug in parentheses):</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li>SciPost Admin (admin)</li>\n<li>SciPost Codebase (codebase)</li>\n<li>SciPost Users (users)</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"updating-the-docs\">\n<h3>Updating the docs:<a class=\"headerlink\" href=\"#updating-the-docs\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Use the management command <code class=\"docutils literal\"><span class=\"pre\">python</span> <span class=\"pre\">manage.py</span> <span class=\"pre\">updatedoc</span> <span class=\"pre\">-b</span> <span class=\"pre\">&lt;project-slug&gt;</span></code> with slugs <cite>codebase</cite>, <cite>admin</cite> and <cite>users</cite>.</p>\n</div>\n</div>\n</div>\n", "current_page_name": "maintenance/docs", "sourcename": "maintenance/docs.txt", "page_source_suffix": ".rst", "alabaster_version": "0.7.10", "parents": [{"link": "../", "title": "Maintenance"}], "prev": {"link": "../", "title": "Maintenance"}, "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["apps", "Apps", "N", "next"], ["maintenance", "Maintenance", "P", "previous"]], "meta": {}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost documentation</a><ul>\n<li><a class=\"reference internal\" href=\"#sphinx-generated-docs\">Sphinx-generated docs</a><ul>\n<li><a class=\"reference internal\" href=\"#generating-the-static-html-files\">Generating the static html files</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#sphinxdoc-generated-docs-viewable-online\">Sphinxdoc-generated docs (viewable online)</a><ul>\n<li><a class=\"reference internal\" href=\"#setting-things-up\">Setting things up</a></li>\n<li><a class=\"reference internal\" href=\"#updating-the-docs\">Updating the docs:</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "display_toc": true, "metatags": "", "sidebars": null, "title": "Maintenance of SciPost documentation", "next": {"link": "../../apps/", "title": "Apps"}}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/modules/models.fjson b/docs/codebase/_build/json/modules/models.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..c17818cb56edcdcc17001a16d15de5f8661bbb06
--- /dev/null
+++ b/docs/codebase/_build/json/modules/models.fjson
@@ -0,0 +1 @@
+{"prev": {"title": "SciPost codebase", "link": "../../codebase/"}, "alabaster_version": "0.7.10", "meta": {}, "parents": [{"title": "SciPost codebase", "link": "../../codebase/"}], "customsidebar": null, "display_toc": false, "title": "Models", "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Models</a></li>\n</ul>\n", "sourcename": "modules/models.txt", "next": {"title": "Views", "link": "../views/"}, "body": "<div class=\"section\" id=\"module-scipost.models\">\n<span id=\"models\"></span><h1>Models<a class=\"headerlink\" href=\"#module-scipost.models\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<dl class=\"class\">\n<dt id=\"scipost.models.AuthorshipClaim\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">AuthorshipClaim</code><span class=\"sig-paren\">(</span><em>id</em>, <em>claimant</em>, <em>publication</em>, <em>submission</em>, <em>commentary</em>, <em>thesislink</em>, <em>vetted_by</em>, <em>status</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#AuthorshipClaim\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.AuthorshipClaim\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.CitationNotification\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">CitationNotification</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#CitationNotification\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.CitationNotification\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Contributor\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Contributor</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All <em>science</em> users of SciPost are Contributors.\nusername, password, email, first_name and last_name are inherited from User.</p>\n<dl class=\"method\">\n<dt id=\"scipost.models.Contributor.generate_key\">\n<code class=\"descname\">generate_key</code><span class=\"sig-paren\">(</span><em>feed=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Contributor.generate_key\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Contributor.generate_key\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Generate and save a new activation_key for the contributor, given a certain feed.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.DraftInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">DraftInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#DraftInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.DraftInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Draft of an invitation, filled in by an officer.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollege\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollege</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollege\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollege\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A SciPost Editorial College for a specific discipline.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.EditorialCollegeFellowship\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">EditorialCollegeFellowship</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#EditorialCollegeFellowship\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.EditorialCollegeFellowship\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Editorial College Fellowship connecting Editorial College and Contributors,\nmaybe with a limiting start/until date.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.PrecookedEmail\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">PrecookedEmail</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#PrecookedEmail\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.PrecookedEmail\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each instance contains an email template in both plain and html formats.\nCan only be created by Admins.\nFor further use in scipost:send_precooked_email method.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.RegistrationInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">RegistrationInvitation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#RegistrationInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.RegistrationInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Deprecated: Use the <cite>invitations</cite> app</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.Remark\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">Remark</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>feedback</em>, <em>nomination</em>, <em>motion</em>, <em>submission</em>, <em>recommendation</em>, <em>date</em>, <em>remark</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#Remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.Remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"scipost.models.UnavailabilityPeriod\">\n<em class=\"property\">class </em><code class=\"descclassname\">scipost.models.</code><code class=\"descname\">UnavailabilityPeriod</code><span class=\"sig-paren\">(</span><em>id</em>, <em>contributor</em>, <em>start</em>, <em>end</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#UnavailabilityPeriod\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.UnavailabilityPeriod\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.models.get_sentinel_user\">\n<code class=\"descclassname\">scipost.models.</code><code class=\"descname\">get_sentinel_user</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/models/#get_sentinel_user\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.models.get_sentinel_user\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Temporary fix: eventually the &#8216;to-be-removed-Contributor&#8217; should be\nstatus: &#8220;deactivated&#8221; and anonymized.\nFallback user for models relying on Contributor that is being deleted.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-journals.models\"></span><dl class=\"class\">\n<dt id=\"journals.models.DOAJDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">DOAJDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#DOAJDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.DOAJDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>For the Directory of Open Access Journals.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Deposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Deposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each time a Crossref deposit is made for a Publication,\na Deposit object instance is created containing the Publication&#8217;s\ncurrent version of the metadata_xml field.\nAll deposit history is thus contained here.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.GenericDOIDeposit\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">GenericDOIDeposit</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#GenericDOIDeposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.GenericDOIDeposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Instances of this class represent Crossref deposits for non-publication\nobjects such as Reports, Comments etc.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Issue\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Issue</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_volume</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>status</em>, <em>doi_label</em>, <em>path</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Issue.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Issue.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Issue.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Journal\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Journal</code><span class=\"sig-paren\">(</span><em>id</em>, <em>name</em>, <em>doi_label</em>, <em>issn</em>, <em>active</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Journal.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Journal.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Journal.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Publication\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Publication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Publication is an object directly related to an accepted Submission. It contains metadata,\nthe actual publication file, author data, etc. etc.</p>\n<dl class=\"method\">\n<dt id=\"journals.models.Publication.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Publication.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Publication.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.PublicationAuthorsTable\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">PublicationAuthorsTable</code><span class=\"sig-paren\">(</span><em>id</em>, <em>publication</em>, <em>unregistered_author</em>, <em>contributor</em>, <em>order</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#PublicationAuthorsTable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.PublicationAuthorsTable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Reference\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Reference</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Reference\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Reference\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Refence is a reference used in a specific Publication.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.UnregisteredAuthor\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">UnregisteredAuthor</code><span class=\"sig-paren\">(</span><em>id</em>, <em>first_name</em>, <em>last_name</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#UnregisteredAuthor\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.UnregisteredAuthor\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"journals.models.Volume\">\n<em class=\"property\">class </em><code class=\"descclassname\">journals.models.</code><code class=\"descname\">Volume</code><span class=\"sig-paren\">(</span><em>id</em>, <em>in_journal</em>, <em>number</em>, <em>start_date</em>, <em>until_date</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><dl class=\"method\">\n<dt id=\"journals.models.Volume.citation_rate\">\n<code class=\"descname\">citation_rate</code><span class=\"sig-paren\">(</span><em>tier=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/models/#Volume.citation_rate\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.models.Volume.citation_rate\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Returns the citation rate in units of nr citations per article per year.</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-comments.models\"></span><dl class=\"class\">\n<dt id=\"comments.models.Comment\">\n<em class=\"property\">class </em><code class=\"descclassname\">comments.models.</code><code class=\"descname\">Comment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Comment is an unsollicited note, submitted by a Contributor,\non a particular publication or in reply to an earlier Comment.</p>\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author\">\n<code class=\"descname\">get_author</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"comments.models.Comment.get_author_str\">\n<code class=\"descname\">get_author_str</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/models/#Comment.get_author_str\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.models.Comment.get_author_str\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get author string, if and only if comment is not anonymous!!!</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#comments.models.Comment.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Comment relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"comments.models.Comment.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#comments.models.Comment.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-commentaries.models\"></span><dl class=\"class\">\n<dt id=\"commentaries.models.Commentary\">\n<em class=\"property\">class </em><code class=\"descclassname\">commentaries.models.</code><code class=\"descname\">Commentary</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A Commentary contains all the contents of a SciPost Commentary page for a given publication.</p>\n<dl class=\"method\">\n<dt id=\"commentaries.models.Commentary.parse_links_into_urls\">\n<code class=\"descname\">parse_links_into_urls</code><span class=\"sig-paren\">(</span><em>commit=True</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/models/#Commentary.parse_links_into_urls\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.models.Commentary.parse_links_into_urls\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Takes the arXiv nr or DOI and turns it into the urls</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-submissions.models\"></span><dl class=\"class\">\n<dt id=\"submissions.models.EICRecommendation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EICRecommendation</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EICRecommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EICRecommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The EICRecommendation is the recommendation of a Submission written by\nthe Editor-in-charge made at the end of the refereeing cycle. It can be voted for by\na subset of Fellows and should contain the actual publication decision.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialAssignment\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialAssignment</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialAssignment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialAssignment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>EditorialAssignment is a registration for Fellows of their duties of being a\nEditor-in-charge for a specific Submission. This model could start as a invitation only,\nwhich should then be accepted or declined by the invited.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.EditorialCommunication\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">EditorialCommunication</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#EditorialCommunication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.EditorialCommunication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Each individual communication between Editor-in-charge\nto and from Referees and Authors becomes an instance of this class.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.RefereeInvitation\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">RefereeInvitation</code><span class=\"sig-paren\">(</span><em>id</em>, <em>submission</em>, <em>referee</em>, <em>title</em>, <em>first_name</em>, <em>last_name</em>, <em>email_address</em>, <em>invitation_key</em>, <em>date_invited</em>, <em>invited_by</em>, <em>nr_reminders</em>, <em>date_last_reminded</em>, <em>accepted</em>, <em>date_responded</em>, <em>refusal_reason</em>, <em>fulfilled</em>, <em>cancelled</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#RefereeInvitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.RefereeInvitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd></dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Report\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Report</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Both types of reports, invited or contributed.</p>\n<p>This Report model acts as both a regular <cite>Report</cite> and a <cite>FollowupReport</cite>; A normal Report\nshould have all fields required, whereas a FollowupReport only has the <cite>report</cite> field as\na required field.</p>\n<p>Important note!\nDue to the construction of the two different types within a single model, it is important\nto explicitly implement the perticular differences in for example the form used.</p>\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.associated_published_doi\">\n<code class=\"descname\">associated_published_doi</code><a class=\"headerlink\" href=\"#submissions.models.Report.associated_published_doi\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return the doi of the published object.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.is_followup_report\">\n<code class=\"descname\">is_followup_report</code><a class=\"headerlink\" href=\"#submissions.models.Report.is_followup_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if current Report is a <cite>FollowupReport</cite>. A Report is a <cite>FollowupReport</cite> if the\nauthor of the report already has a vetted report in the series of the specific Submission.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Report.latest_report_from_series\">\n<code class=\"descname\">latest_report_from_series</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Report.latest_report_from_series\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Report.latest_report_from_series\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Get latest Report from the same author for the Submission series.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.relation_to_published\">\n<code class=\"descname\">relation_to_published</code><a class=\"headerlink\" href=\"#submissions.models.Report.relation_to_published\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Check if the Report relates to a SciPost-published object.\nIf it is, return a dict with info on relation to the published object,\nbased on Crossref&#8217;s peer review content type.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Report.title\">\n<code class=\"descname\">title</code><a class=\"headerlink\" href=\"#submissions.models.Report.title\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This property is (mainly) used to let Comments get the title of the Submission without\nannoying logic.</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.Submission\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">Submission</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Submission is a SciPost register of an ArXiv article. This object is the central\ninstance for every action, recommendation, communication, etc. etc. that is related to the\nrefereeing cycle of a Submission. A possible Publication object is later directly related\nto this Submission instance.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.comments_set_complete\">\n<code class=\"descname\">comments_set_complete</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.comments_set_complete\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.comments_set_complete\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return comments to Submission, comments on Reports of Submission and\nnested comments related to this Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions\">\n<code class=\"descname\">other_versions</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission that are publicly accessible.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.other_versions_pool\">\n<code class=\"descname\">other_versions_pool</code><a class=\"headerlink\" href=\"#submissions.models.Submission.other_versions_pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all other versions of the Submission.</p>\n</dd></dl>\n\n<dl class=\"attribute\">\n<dt id=\"submissions.models.Submission.thread\">\n<code class=\"descname\">thread</code><a class=\"headerlink\" href=\"#submissions.models.Submission.thread\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Return all versions of the Submission with that arxiv id.</p>\n</dd></dl>\n\n<dl class=\"method\">\n<dt id=\"submissions.models.Submission.touch\">\n<code class=\"descname\">touch</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#Submission.touch\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.Submission.touch\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update latest activity as a service</p>\n</dd></dl>\n\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.SubmissionEvent\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">SubmissionEvent</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#SubmissionEvent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.SubmissionEvent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The SubmissionEvent&#8217;s goal is to act as a messaging/logging model\nfor the Submission cycle. Its main audience will be the author(s) and\nthe Editor-in-charge of a Submission.</p>\n<p>Be aware!\nBoth the author and editor-in-charge will read the submission event.\nMake sure the right text is given to the right event-type, to protect\nthe fellow&#8217;s identity.</p>\n</dd></dl>\n\n<dl class=\"class\">\n<dt id=\"submissions.models.iThenticateReport\">\n<em class=\"property\">class </em><code class=\"descclassname\">submissions.models.</code><code class=\"descname\">iThenticateReport</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>iThenticateReport is the SciPost register of an iThenticate report. It saves\nbasic information coming from iThenticate into the SciPost database for easy access.</p>\n<dl class=\"method\">\n<dt id=\"submissions.models.iThenticateReport.get_report_url\">\n<code class=\"descname\">get_report_url</code><span class=\"sig-paren\">(</span><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/models/#iThenticateReport.get_report_url\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.models.iThenticateReport.get_report_url\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Request new read-only url from iThenticate and return.</p>\n<p>Note: The read-only link is valid for only 15 minutes, saving may be worthless</p>\n</dd></dl>\n\n</dd></dl>\n\n<span class=\"target\" id=\"module-theses.models\"></span><dl class=\"class\">\n<dt id=\"theses.models.ThesisLink\">\n<em class=\"property\">class </em><code class=\"descclassname\">theses.models.</code><code class=\"descname\">ThesisLink</code><span class=\"sig-paren\">(</span><em>*args</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/theses/models/#ThesisLink\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#theses.models.ThesisLink\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>An URL pointing to a thesis</p>\n</dd></dl>\n\n</div>\n", "current_page_name": "modules/models", "metatags": "", "sidebars": null, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["modules/views", "Views", "N", "next"], ["codebase", "SciPost codebase", "P", "previous"]]}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/modules/views.fjson b/docs/codebase/_build/json/modules/views.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..48df5c6e3e7841b050d98a5c2e883be0602e978c
--- /dev/null
+++ b/docs/codebase/_build/json/modules/views.fjson
@@ -0,0 +1 @@
+{"prev": {"title": "Models", "link": "../models/"}, "alabaster_version": "0.7.10", "meta": {}, "parents": [{"title": "SciPost codebase", "link": "../../codebase/"}], "customsidebar": null, "display_toc": false, "title": "Views", "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Views</a></li>\n</ul>\n", "sourcename": "modules/views.txt", "next": null, "body": "<div class=\"section\" id=\"module-scipost.views\">\n<span id=\"views\"></span><h1>Views<a class=\"headerlink\" href=\"#module-scipost.views\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<dl class=\"function\">\n<dt id=\"scipost.views.activation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">activation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#activation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.activation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>After registration, an email verification link is sent.\nOnce clicked, the account is activated.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.claim_authorships\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">claim_authorships</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#claim_authorships\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.claim_authorships\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The system auto-detects potential authorships (of submissions,\npapers subject to commentaries, theses, ...).\nThe contributor must confirm/deny authorship from the\nPersonal Page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.contributor_info\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">contributor_info</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#contributor_info\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.contributor_info\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>All visitors can see a digest of a\nContributor&#8217;s activities/contributions by clicking\non the relevant name (in listing headers of Submissions, ...).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.csrf_failure\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">csrf_failure</code><span class=\"sig-paren\">(</span><em>request</em>, <em>reason=''</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#csrf_failure\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.csrf_failure\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Custom CSRF Failure. Informing admins via email as well.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.delete_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">delete_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em>, <em>period_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#delete_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.delete_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Delete period unavailable registered.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_group_members\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_group_members</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_group_members\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_group_members\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send bulk emails to (members of) selected groups</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.email_particular\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">email_particular</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#email_particular\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.email_particular\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.index\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">index</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#index\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.index\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main page.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.invitation\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If a scientist has recieved an invitation (RegistrationInvitation)\nhe/she will finish it&#8217;s invitation via still view which will prefill\nthe default registration form.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.is_registered\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">is_registered</code><span class=\"sig-paren\">(</span><em>user</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#is_registered\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.is_registered\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method checks if user is activated assuming an validated user\nhas at least one permission group (<cite>Registered Contributor</cite> or <cite>Partner Accounts</cite>).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.login_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">login_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#login_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.login_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view shows and processes a user&#8217;s login session.</p>\n<p>The function based method login() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.logout_view\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">logout_view</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#logout_view\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.logout_view\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The function based method logout() is deprecated from\nDjango 1.11 and replaced by Class Based Views.</p>\n<p>See:\n<a class=\"reference external\" href=\"https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth\">https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth</a></p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.mark_unavailable_period\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">mark_unavailable_period</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#mark_unavailable_period\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.mark_unavailable_period\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Mark period unavailable for Contributor using this view.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.personal_page\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">personal_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>tab='account'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#personal_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.personal_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Personal Page is the main view for accessing user functions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.protected_serve\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">protected_serve</code><span class=\"sig-paren\">(</span><em>request</em>, <em>path</em>, <em>show_indexes=False</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#protected_serve\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.protected_serve\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!\nThis will be usefull eg. in the admin pages.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.register\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">register</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#register\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.register\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This public registration view shows and processes the form\nthat will create new user account requests. After registration\nthe Contributor will need to activate its account via the mail\nsent. After activation the user needs to be vetted by the SciPost\nadmin.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>List all inactive users. These are users that have filled the registration form,\nbut did not yet activate their account using the validation email.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.registration_requests_reset\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">registration_requests_reset</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#registration_requests_reset\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.registration_requests_reset\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reset specific activation_key for Contributor and resend activation mail.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.request_new_activation_link\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">request_new_activation_link</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#request_new_activation_link\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.request_new_activation_link\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Once a user tries to activate its account using the email verification link sent\nand the key has expired, the user redirected to possibly request a new token.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.send_precooked_email\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">send_precooked_email</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#send_precooked_email\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.send_precooked_email\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Method to send precooked emails to individuals (registered or not)</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"scipost.views.unsubscribe\">\n<code class=\"descclassname\">scipost.views.</code><code class=\"descname\">unsubscribe</code><span class=\"sig-paren\">(</span><em>request</em>, <em>contributor_id</em>, <em>key</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/scipost/views/#unsubscribe\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#scipost.views.unsubscribe\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The link to this method is included in all email communications\nwith a Contributor. The key used is the original activation key.\nAt this link, the Contributor can confirm that he/she does not\nwant to receive any non-essential email notifications from SciPost.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-journals.views\"></span><dl class=\"function\">\n<dt id=\"journals.views.accepted\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">accepted</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#accepted\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.accepted\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for submissions to SciPost Physics which\nhave been accepted but are not yet published.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_associated_grant\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_associated_grant</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_associated_grant\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_associated_grant\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a grant from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_author\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_author</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>contributor_id=None</em>, <em>unregistered_author_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_author\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_author\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If not all authors are registered Contributors or if they have not\nall claimed authorship, this method allows editorial administrators\nto associated them to the publication.\nThis is important for the Crossref metadata, in which all authors must appear.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.add_generic_funder\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">add_generic_funder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#add_generic_funder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.add_generic_funder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis associates a funder (generic, not via grant) from the database to this publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_citation_list_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_citation_list_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_citation_list_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_citation_list_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the citation_list dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_funding_info_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_funding_info_metadata</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_funding_info_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_funding_info_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nThis populates the funding_info dictionary entry\nin the metadata field in a Publication instance.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.create_metadata_xml\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">create_metadata_xml</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#create_metadata_xml\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.create_metadata_xml\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>To be called by an EdAdmin after the citation_list,\nfunding_info entries have been filled.\nPopulates the metadata_xml field of a Publication instance.\nThe contents can then be sent to Crossref for registration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.email_object_made_citable\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">email_object_made_citable</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#email_object_made_citable\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.email_object_made_citable\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to the author of a Report or a Comment,\nto notify that the object has been made citable (doi registered).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.generic_metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">generic_metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>**kwargs</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#generic_metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.generic_metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method creates the metadata for non-Publication objects\nsuch as Reports and Comments, and deposits the metadata to\nCrossref.\nIf there exists a relation to a SciPost-published object,\nthe deposit uses Crossref&#8217;s peer review content type.\nOtherwise the deposit is done as a dataset.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.initiate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">initiate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#initiate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.initiate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by an Editorial Administrator.\nPublish the manuscript after proofs have been accepted.\nThis method prefills a ValidatePublicationForm for further\nprocessing (verification in validate_publication method).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.journals\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">journals</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#journals\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.journals\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Main landing page for Journals application.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_comment_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_comment_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_comment_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_comment_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Comments.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.manage_report_metadata\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">manage_report_metadata</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#manage_report_metadata\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.manage_report_metadata\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page offers Editorial Administrators tools for managing\nthe metadata of Reports.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_DOAJ_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_DOAJ_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_DOAJ_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_DOAJ_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>DOAJ metadata deposit.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.metadata_xml_deposit\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">metadata_xml_deposit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em>, <em>option='test'</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#metadata_xml_deposit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.metadata_xml_deposit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Crossref metadata deposit.\nIf test==True, test the metadata_xml using the Crossref test server.\nMakes use of the python requests module.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.recent\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">recent</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#recent\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.recent\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Display page for the most recent 20 publications in SciPost Physics.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.sign_existing_report\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">sign_existing_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#sign_existing_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.sign_existing_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Allows the author of a Report, originally submitted anonymously,\nto sign the Report.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.update_references\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">update_references</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#update_references\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.update_references\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Update the References for a certain Publication.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"journals.views.validate_publication\">\n<code class=\"descclassname\">journals.views.</code><code class=\"descname\">validate_publication</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/journals/views/#validate_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#journals.views.validate_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This creates a Publication instance from the ValidatePublicationForm,\npre-filled by the initiate_publication method above.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-comments.views\"></span><dl class=\"function\">\n<dt id=\"comments.views.attachment\">\n<code class=\"descclassname\">comments.views.</code><code class=\"descname\">attachment</code><span class=\"sig-paren\">(</span><em>request</em>, <em>comment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/comments/views/#attachment\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#comments.views.attachment\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Open/read attachment of Comment if available.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-commentaries.views\"></span><dl class=\"function\">\n<dt id=\"commentaries.views.comment_on_publication\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">comment_on_publication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>doi_label</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#comment_on_publication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.comment_on_publication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This will let authors of an SciPost publication comment on their Publication by\nautomatically creating a Commentary page if not exist already.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.modify_commentary_request\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">modify_commentary_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#modify_commentary_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.modify_commentary_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Modify a commentary request after vetting with status &#8216;modified&#8217;.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"commentaries.views.vet_commentary_requests\">\n<code class=\"descclassname\">commentaries.views.</code><code class=\"descname\">vet_commentary_requests</code><span class=\"sig-paren\">(</span><em>request</em>, <em>commentary_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/commentaries/views/#vet_commentary_requests\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#commentaries.views.vet_commentary_requests\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Show the first commentary thats awaiting vetting</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-submissions.views\"></span><dl class=\"function\">\n<dt id=\"submissions.views.accept_or_decline_ref_invitations\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">accept_or_decline_ref_invitations</code><span class=\"sig-paren\">(</span><em>request</em>, <em>invitation_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#accept_or_decline_ref_invitations\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.accept_or_decline_ref_invitations\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>RefereeInvitations need to be either accepted or declined by the invited user\nusing this view. The decision will be taken one invitation at a time.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.add_remark\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">add_remark</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#add_remark\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.add_remark\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>With this method, an Editorial Fellow or Board Member\nis adding a remark on a Submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assign_submission\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assign_submission</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assign_submission\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assign_submission\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Assign Editor-in-charge to Submission.\nAction done by SciPost Administration or Editorial College Administration.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_failed\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_failed</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_failed\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_failed\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>No Editorial Fellow has accepted or volunteered to become Editor-in-charge.\nThe submission is rejected.\nThis method is called from pool.html by an Editorial Administrator.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignment_request\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignment_request</code><span class=\"sig-paren\">(</span><em>request</em>, <em>assignment_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignment_request\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignment_request\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Process EditorialAssignment acceptance/denial form or show if not submitted.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.assignments\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">assignments</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#assignments\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.assignments\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This page provides a Fellow with an explicit task list\nof editorial actions which should be undertaken.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cancel_ref_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cancel_ref_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cancel_ref_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cancel_ref_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nto remove a referee for the list of invited ones.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.close_refereeing_round\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">close_refereeing_round</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#close_refereeing_round\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.close_refereeing_round\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called by the Editor-in-charge when a satisfactory number of\nreports have been gathered.\nAutomatically emails the authors to ask them if they want to\nround off any replies to reports or comments before the\neditorial recommendation is formulated.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.communication\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">communication</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>comtype</em>, <em>referee_id=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#communication\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.communication\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Communication between editor-in-charge, author or referee\noccurring during the submission refereeing.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.cycle_form_submit\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">cycle_form_submit</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#cycle_form_submit\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.cycle_form_submit\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If Submission is <cite>resubmission_incoming</cite> the EIC should first choose what refereeing\ncycle to choose.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_page\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_page</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_page\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_page\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The central page for the EIC to manage all its Editorial duties.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.editorial_workflow\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">editorial_workflow</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#editorial_workflow\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.editorial_workflow\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Summary page for Editorial Fellows, containing a digest\nof the actions to take to handle Submissions.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Write EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.extend_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">extend_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>days</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#extend_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.extend_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Extend Refereeing deadline for Submission and open reporting and commenting.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.fix_College_decision\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">fix_College_decision</code><span class=\"sig-paren\">(</span><em>request</em>, <em>rec_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#fix_College_decision\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.fix_College_decision\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Terminates the voting on a Recommendation.\nCalled by an Editorial Administrator.</p>\n<p># TODO - 2 bugs:</p>\n<p>TO FIX: If multiple recommendations are submitted; decisions may be overruled unexpectedly.\nTO FIX: A college decision can be fixed multiple times, there is no already-fixed mechanism!!!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.pool\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">pool</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr=None</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#pool\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.pool\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>The Submissions pool contains all submissions which are undergoing\nthe editorial process, from submission\nto publication acceptance or rejection.\nAll members of the Editorial College have access.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.recruit_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">recruit_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#recruit_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.recruit_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>If the Editor-in-charge does not find the desired referee among Contributors\n(otherwise, the method send_refereeing_invitation below is used instead),\nhe/she can invite somebody by providing name + contact details.\nThis function emails a registration invitation to this person.\nThe pending refereeing invitation is then recognized upon registration,\nusing the invitation token.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.ref_invitation_reminder\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">ref_invitation_reminder</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>invitation_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#ref_invitation_reminder\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.ref_invitation_reminder\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is used by the Editor-in-charge from the editorial_page\nwhen a referee has been invited but hasn&#8217;t answered yet.\nIt can be used for registered as well as unregistered referees.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reformulate_eic_recommendation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reformulate_eic_recommendation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reformulate_eic_recommendation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reformulate_eic_recommendation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reformulate EIC Recommendation.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.remind_Fellows_to_vote\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">remind_Fellows_to_vote</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#remind_Fellows_to_vote\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.remind_Fellows_to_vote\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method sends an email to all Fellow with pending voting duties.\nIt must be called by and Editorial Administrator.</p>\n<p>TODO: This reminder function doesn&#8217;t filter per submission?!</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.report_detail_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">report_detail_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>report_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#report_detail_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.report_detail_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Download the PDF of a Report if available.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.reports_accepted_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">reports_accepted_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#reports_accepted_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.reports_accepted_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.select_referee\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">select_referee</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#select_referee\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.select_referee\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Select/Invite referees by first listing them here.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.send_refereeing_invitation\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">send_refereeing_invitation</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em>, <em>contributor_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#send_refereeing_invitation\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.send_refereeing_invitation\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This method is called by the EIC from the submission&#8217;s editorial_page,\nin the case where the referee is an identified Contributor.\nFor a referee who isn&#8217;t a Contributor yet, the method recruit_referee above\nis called instead.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.set_refereeing_deadline\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">set_refereeing_deadline</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#set_refereeing_deadline\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.set_refereeing_deadline\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Set Refereeing deadline for Submission and open reporting and commenting if\nthe new date is in the future.</p>\n<p>Accessible for: Editor-in-charge and Editorial Administration</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submission_refereeing_package_pdf\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submission_refereeing_package_pdf</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submission_refereeing_package_pdf\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submission_refereeing_package_pdf\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view let&#8217;s the user download all Report PDF&#8217;s in a single merged PDF.\nThe merging takes places every time its downloaded to make sure all available report PDF&#8217;s\nare included and the EdColAdmin doesn&#8217;t have to compile the package every time again.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.submit_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">submit_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#submit_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.submit_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>A form to submit a report on a submission will be shown and processed here.</p>\n<p>Important checks to be aware of include an author check for the submission,\nhas the reporting deadline not been reached yet and does there exist any invitation\nfor the current user on this submission.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.treated_submissions_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">treated_submissions_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#treated_submissions_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.treated_submissions_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>This view lists all accepted Reports. This shows if Report needs a PDF update/compile\nin a convenient way.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_report\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_report</code><span class=\"sig-paren\">(</span><em>request</em>, <em>report_id</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_report\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_report\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Report with status <cite>unvetted</cite> will be shown. A user may only vet reports of submissions\nhe/she is EIC of or if he/she is SciPost Admin or Vetting Editor.</p>\n<p>After vetting an email is sent to the report author, bcc EIC. If report\nhas not been refused, the submission author is also mailed.</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.vet_submitted_reports_list\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">vet_submitted_reports_list</code><span class=\"sig-paren\">(</span><em>request</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#vet_submitted_reports_list\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.vet_submitted_reports_list\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Reports with status <cite>unvetted</cite> will be shown (oldest first).</p>\n</dd></dl>\n\n<dl class=\"function\">\n<dt id=\"submissions.views.volunteer_as_EIC\">\n<code class=\"descclassname\">submissions.views.</code><code class=\"descname\">volunteer_as_EIC</code><span class=\"sig-paren\">(</span><em>request</em>, <em>arxiv_identifier_w_vn_nr</em><span class=\"sig-paren\">)</span><a class=\"reference internal\" href=\"../../_modules/submissions/views/#volunteer_as_EIC\"><span class=\"viewcode-link\">[source]</span></a><a class=\"headerlink\" href=\"#submissions.views.volunteer_as_EIC\" title=\"Permalink to this definition\">\u00b6</a></dt>\n<dd><p>Called when a Fellow volunteers while perusing the submissions pool.\nThis is an adapted version of the assignment_request method.</p>\n</dd></dl>\n\n<span class=\"target\" id=\"module-theses.views\"></span></div>\n", "current_page_name": "modules/views", "metatags": "", "sidebars": null, "page_source_suffix": ".rst", "rellinks": [["genindex", "General Index", "I", "index"], ["py-modindex", "Python Module Index", "", "modules"], ["modules/models", "Models", "P", "previous"]]}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/objects.inv b/docs/codebase/_build/json/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..08bd272ba413de0a0d37630b9038461a2fc66b9e
Binary files /dev/null and b/docs/codebase/_build/json/objects.inv differ
diff --git a/docs/codebase/_build/json/py-modindex.fjson b/docs/codebase/_build/json/py-modindex.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..8b4e73de9734efa561fa2eb371cc7856ac64a326
--- /dev/null
+++ b/docs/codebase/_build/json/py-modindex.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "collapse_index": false, "content": [["c", [["commentaries", 1, "", "", "", "", ""], ["commentaries.models", 2, "apps/commentaries", "module-commentaries.models", "", "", ""], ["commentaries.views", 2, "apps/commentaries", "module-commentaries.views", "", "", ""], ["comments", 1, "", "", "", "", ""], ["comments.models", 2, "apps/comments", "module-comments.models", "", "", ""], ["comments.views", 2, "apps/comments", "module-comments.views", "", "", ""]]], ["j", [["journals", 1, "", "", "", "", ""], ["journals.models", 2, "apps/journals", "module-journals.models", "", "", ""], ["journals.views", 2, "apps/journals", "module-journals.views", "", "", ""]]], ["s", [["scipost", 1, "", "", "", "", ""], ["scipost.models", 2, "apps/scipost", "module-scipost.models", "", "", ""], ["scipost.views", 2, "apps/scipost", "module-scipost.views", "", "", ""], ["submissions", 1, "", "", "", "", ""], ["submissions.models", 2, "apps/submissions", "module-submissions.models", "", "", ""], ["submissions.views", 2, "apps/submissions", "module-submissions.views", "", "", ""]]], ["t", [["theses", 1, "", "", "", "", ""], ["theses.models", 2, "apps/theses", "module-theses.models", "", "", ""], ["theses.views", 2, "apps/theses", "module-theses.views", "", "", ""]]]], "current_page_name": "py-modindex", "indextitle": "Python Module Index", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/_build/json/search.fjson b/docs/codebase/_build/json/search.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..098d2c3dac11424fdaee026fa2e7223588813877
--- /dev/null
+++ b/docs/codebase/_build/json/search.fjson
@@ -0,0 +1 @@
+{"customsidebar": null, "current_page_name": "search", "alabaster_version": "0.7.10", "sidebars": null}
\ No newline at end of file
diff --git a/docs/codebase/apps.rst b/docs/codebase/apps.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ecdef2c3e7a0d0ee28a9823e55739f2567aff948
--- /dev/null
+++ b/docs/codebase/apps.rst
@@ -0,0 +1,12 @@
+Apps
+====
+
+.. toctree::
+   :maxdepth: 2
+
+   apps/scipost
+   apps/submissions
+   apps/journals
+   apps/comments
+   apps/commentaries
+   apps/theses
diff --git a/docs/codebase/apps/commentaries.rst b/docs/codebase/apps/commentaries.rst
new file mode 100644
index 0000000000000000000000000000000000000000..836c1c618ad6a977a43591cafa64b06b2aafb0de
--- /dev/null
+++ b/docs/codebase/apps/commentaries.rst
@@ -0,0 +1,14 @@
+commentaries
+============
+
+
+Models
+------
+.. automodule:: commentaries.models
+   :members:
+
+Views
+-----
+
+.. automodule:: commentaries.views
+   :members:
diff --git a/docs/codebase/apps/comments.rst b/docs/codebase/apps/comments.rst
new file mode 100644
index 0000000000000000000000000000000000000000..fc2e9278c2d9379e076117c731735d0b66ba424e
--- /dev/null
+++ b/docs/codebase/apps/comments.rst
@@ -0,0 +1,14 @@
+comments
+========
+
+
+Models
+------
+.. automodule:: comments.models
+   :members:
+
+Views
+-----
+
+.. automodule:: comments.views
+   :members:
diff --git a/docs/codebase/apps/journals.rst b/docs/codebase/apps/journals.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ec0fbbd8eef199c9e1a8660be7b327a749d533e6
--- /dev/null
+++ b/docs/codebase/apps/journals.rst
@@ -0,0 +1,14 @@
+journals
+========
+
+
+Models
+------
+.. automodule:: journals.models
+   :members:
+
+Views
+-----
+
+.. automodule:: journals.views
+   :members:
diff --git a/docs/codebase/apps/scipost.rst b/docs/codebase/apps/scipost.rst
new file mode 100644
index 0000000000000000000000000000000000000000..e8eed73e92bdee22d0bde919634365cc3e2dd174
--- /dev/null
+++ b/docs/codebase/apps/scipost.rst
@@ -0,0 +1,14 @@
+scipost
+=======
+
+
+Models
+------
+.. automodule:: scipost.models
+   :members:
+
+Views
+-----
+
+.. automodule:: scipost.views
+   :members:
diff --git a/docs/codebase/apps/submissions.rst b/docs/codebase/apps/submissions.rst
new file mode 100644
index 0000000000000000000000000000000000000000..04a840204fc86bb67ebe7bc82fd4b62969e02519
--- /dev/null
+++ b/docs/codebase/apps/submissions.rst
@@ -0,0 +1,14 @@
+submissions
+===========
+
+
+Models
+------
+.. automodule:: submissions.models
+   :members:
+
+Views
+-----
+
+.. automodule:: submissions.views
+   :members:
diff --git a/docs/codebase/apps/theses.rst b/docs/codebase/apps/theses.rst
new file mode 100644
index 0000000000000000000000000000000000000000..4dd9f1ee8d2ae4394723950256a5c935b0faa170
--- /dev/null
+++ b/docs/codebase/apps/theses.rst
@@ -0,0 +1,14 @@
+theses
+=======
+
+
+Models
+------
+.. automodule:: theses.models
+   :members:
+
+Views
+-----
+
+.. automodule:: theses.views
+   :members:
diff --git a/docs/codebase/conf.py b/docs/codebase/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..1abedddd45987b5764b55baea1ad3decf618bc9e
--- /dev/null
+++ b/docs/codebase/conf.py
@@ -0,0 +1,302 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# SciPost documentation build configuration file, created by
+# sphinx-quickstart on Fri Nov 25 11:01:13 2016.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+import django
+from django.conf import settings
+
+sys.path.insert(0, os.path.abspath('../..'))
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings")
+
+#settings.configure()
+django.setup()
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.viewcode',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = 'SciPost'
+copyright = '2016, Jean-Sébastien Caux'
+author = 'Jean-Sébastien Caux'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.0'
+# The full version, including alpha/beta/rc tags.
+release = '1.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+# html_theme = 'alabaster'
+html_theme = 'sphinx_rtd_theme'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['../_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'
+#html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+#html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'SciPostCodebasedoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  (master_doc, 'SciPost_Codebase.tex', 'SciPost Codebase Documentation',
+   'Jean-Sébastien Caux', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'scipost codebase', 'SciPost Codebase Documentation',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  (master_doc, 'SciPost codebase', 'SciPost Codebase Documentation',
+   author, 'SciPost', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
diff --git a/docs/codebase/index.rst b/docs/codebase/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..1b16b88b3e58574aefa91938304c57c313104def
--- /dev/null
+++ b/docs/codebase/index.rst
@@ -0,0 +1,18 @@
+Welcome to SciPost's codebase documentation
+===========================================
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   maintenance
+   apps
+
+
+Indices and tables
+==================
+
+* :ref:`genindex`
+* :ref:`modindex`
+* :ref:`search`
diff --git a/docs/developers/maintenance/maintenance.rst b/docs/codebase/maintenance.rst
similarity index 73%
rename from docs/developers/maintenance/maintenance.rst
rename to docs/codebase/maintenance.rst
index 3122094aaccb78ef912ad93b26daff58a6b985b7..97d1c9fe0edbe3243494ff48819fa53e02b7d65f 100644
--- a/docs/developers/maintenance/maintenance.rst
+++ b/docs/codebase/maintenance.rst
@@ -5,4 +5,4 @@ Maintenance
 .. toctree::
    :maxdepth: 2
 
-   docs
+   maintenance/docs
diff --git a/docs/codebase/maintenance/docs.rst b/docs/codebase/maintenance/docs.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3235a64ff568d3c4d8345cdfa85711d954828af2
--- /dev/null
+++ b/docs/codebase/maintenance/docs.rst
@@ -0,0 +1,34 @@
+Maintenance of SciPost documentation
+====================================
+
+
+
+Sphinx-generated docs
+---------------------
+
+
+Generating the static html files
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+In the `docs` subfolders `codebase`, `admin` and `users`, invoke ``make html``. The html files will be automatically generated and put in `_build/html` subfolders.
+
+
+
+Sphinxdoc-generated docs (viewable online)
+------------------------------------------
+
+
+Setting things up
+~~~~~~~~~~~~~~~~~
+
+The `django-sphinxdoc` app creates `Project` and `Document` classes. In the admin, one should create the following projects (slug in parentheses):
+
+   * SciPost Admin (admin)
+   * SciPost Codebase (codebase)
+   * SciPost Users (users)
+
+
+Updating the docs:
+~~~~~~~~~~~~~~~~~~
+
+Use the management command ``python manage.py updatedoc -b <project-slug>`` with slugs `codebase`, `admin` and `users`.
diff --git a/docs/developers/developers.rst b/docs/developers/developers.rst
deleted file mode 100644
index 557c2eaf7ba92fea4f507844425a4920b0c464ea..0000000000000000000000000000000000000000
--- a/docs/developers/developers.rst
+++ /dev/null
@@ -1,9 +0,0 @@
-For Developers
-==============
-
-
-.. toctree::
-   :maxdepth: 2
-
-   maintenance/maintenance
-   codebase/codebase
diff --git a/docs/guides/guides.rst b/docs/guides/guides.rst
deleted file mode 100644
index fcb34041d6e101fc71e625ecd489cc46bafc71bd..0000000000000000000000000000000000000000
--- a/docs/guides/guides.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Guides
-======
-
-
-.. toctree::
-   :maxdepth: 2
-
-   submissions_processing/submissions_processing
-   production/production
-   maintenance/maintenance
diff --git a/docs/guides/production/production.rst b/docs/guides/production/production.rst
deleted file mode 100644
index 0d2e6d139bae69d46084939bf8c28a61e0e51369..0000000000000000000000000000000000000000
--- a/docs/guides/production/production.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Production
-==========
-
-
-.. toctree::
-   :maxdepth: 2
-
-   initial_production/initial_production
-   proofs/proofs
-   online_publication/online_publication
diff --git a/docs/roles/production/production_officers.rst b/docs/roles/production/production_officers.rst
deleted file mode 100644
index b9b79da1740c33ef7a2ca3c382e9a29a512985d6..0000000000000000000000000000000000000000
--- a/docs/roles/production/production_officers.rst
+++ /dev/null
@@ -1,6 +0,0 @@
-Production Officers
-===================
-
-
-.. toctree::
-   :maxdepth: 2
diff --git a/docs/roles/roles.rst b/docs/roles/roles.rst
deleted file mode 100644
index 3df3c2c3eda344d4ddf876bb4e6072a053f6321e..0000000000000000000000000000000000000000
--- a/docs/roles/roles.rst
+++ /dev/null
@@ -1,10 +0,0 @@
-Roles: responsibilities and task lists
-======================================
-
-
-.. toctree::
-   :maxdepth: 2
-
-   editorial/editorial_administrators
-   editorial/editorial_fellows
-   production/production_officers
diff --git a/docs/users/Makefile b/docs/users/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..766d9a8bc3fc53a651b7c9618affa897bd2475c3
--- /dev/null
+++ b/docs/users/Makefile
@@ -0,0 +1,192 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# User-friendly check for sphinx-build
+ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
+$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
+endif
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest coverage gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  applehelp  to make an Apple Help Book"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  xml        to make Docutils-native XML files"
+	@echo "  pseudoxml  to make pseudoxml-XML files for display purposes"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+	@echo "  coverage   to run coverage check of the documentation (if enabled)"
+
+clean:
+	rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/SciPost.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/SciPost.qhc"
+
+applehelp:
+	$(SPHINXBUILD) -b applehelp $(ALLSPHINXOPTS) $(BUILDDIR)/applehelp
+	@echo
+	@echo "Build finished. The help book is in $(BUILDDIR)/applehelp."
+	@echo "N.B. You won't be able to view it unless you put it in" \
+	      "~/Library/Documentation/Help or install it in your application" \
+	      "bundle."
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/SciPost"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/SciPost"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+latexpdfja:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through platex and dvipdfmx..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."
+
+coverage:
+	$(SPHINXBUILD) -b coverage $(ALLSPHINXOPTS) $(BUILDDIR)/coverage
+	@echo "Testing of coverage in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/coverage/python.txt."
+
+xml:
+	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
+	@echo
+	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+
+pseudoxml:
+	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
+	@echo
+	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
diff --git a/docs/users/_build/doctrees/environment.pickle b/docs/users/_build/doctrees/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..9bc8483761f10f56655e27f1e56548580c0aff2b
Binary files /dev/null and b/docs/users/_build/doctrees/environment.pickle differ
diff --git a/docs/users/_build/doctrees/guides.doctree b/docs/users/_build/doctrees/guides.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..79cd27082c8a6b07635b66aa97da9b83a7f73ff6
Binary files /dev/null and b/docs/users/_build/doctrees/guides.doctree differ
diff --git a/docs/users/_build/doctrees/guides/authors.doctree b/docs/users/_build/doctrees/guides/authors.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..076ff27dd228f3095386555a1d487e1aa944f660
Binary files /dev/null and b/docs/users/_build/doctrees/guides/authors.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial.doctree b/docs/users/_build/doctrees/guides/editorial.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..2927d58886c19ffc8d7dc38a0aa4beffa3c4f2a7
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/maintenance.doctree b/docs/users/_build/doctrees/guides/editorial/maintenance.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..443c9234d35cccb0b10afa478b6a629dc7b68a13
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/maintenance.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production.doctree b/docs/users/_build/doctrees/guides/editorial/production.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..47967806e04e8fbb9659f73dd2bdae20867c569f
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/production.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree b/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..4e9e9a0814350ab28364197547bd82afc89cb1c2
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/production/initial_production.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree b/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..d738162e1d1458fa96710e7317c1f5d60a04490a
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/production/online_publication.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree b/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..5b1f7c3022e4c7c83900c39120cace83abd76c7d
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/production/proofs.doctree differ
diff --git a/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree b/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..6ade16a489b1c1ff55ef39afa860bb6e1e3ebf7a
Binary files /dev/null and b/docs/users/_build/doctrees/guides/editorial/submissions_processing.doctree differ
diff --git a/docs/users/_build/doctrees/guides/referees.doctree b/docs/users/_build/doctrees/guides/referees.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..58c3aaeb1152833a377ac61adc8dc8b5cfe3e942
Binary files /dev/null and b/docs/users/_build/doctrees/guides/referees.doctree differ
diff --git a/docs/users/_build/doctrees/index.doctree b/docs/users/_build/doctrees/index.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..fd075e681585e23734570086494233e225eac2fc
Binary files /dev/null and b/docs/users/_build/doctrees/index.doctree differ
diff --git a/docs/users/_build/doctrees/roles.doctree b/docs/users/_build/doctrees/roles.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..4cf8d9cc4c91b7d1a30da06e259bcc7cf3fd3735
Binary files /dev/null and b/docs/users/_build/doctrees/roles.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial.doctree b/docs/users/_build/doctrees/roles/editorial.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..0d3a391cfd805f5d8d0cd68b1c203c1c2c6642ba
Binary files /dev/null and b/docs/users/_build/doctrees/roles/editorial.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree b/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..c3e6d91b8b7fb9e5f98273874a1946b680df3a5b
Binary files /dev/null and b/docs/users/_build/doctrees/roles/editorial/editorial_administrators.doctree differ
diff --git a/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree b/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..feb966b8e201430fe045729a39f11342f5e62b58
Binary files /dev/null and b/docs/users/_build/doctrees/roles/editorial/editorial_fellows.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production.doctree b/docs/users/_build/doctrees/roles/production.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..1398836f443dbe829223b4125d08fa7fae1f49cb
Binary files /dev/null and b/docs/users/_build/doctrees/roles/production.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production/production_officers.doctree b/docs/users/_build/doctrees/roles/production/production_officers.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..d3ad7f53754fb69ac36d7ecbaabee81f91248fd5
Binary files /dev/null and b/docs/users/_build/doctrees/roles/production/production_officers.doctree differ
diff --git a/docs/users/_build/doctrees/roles/production/production_supervisors.doctree b/docs/users/_build/doctrees/roles/production/production_supervisors.doctree
new file mode 100644
index 0000000000000000000000000000000000000000..9753a40f67d56686555a73adac3015dcc2ad53c5
Binary files /dev/null and b/docs/users/_build/doctrees/roles/production/production_supervisors.doctree differ
diff --git a/docs/users/_build/json/environment.pickle b/docs/users/_build/json/environment.pickle
new file mode 100644
index 0000000000000000000000000000000000000000..9bc8483761f10f56655e27f1e56548580c0aff2b
Binary files /dev/null and b/docs/users/_build/json/environment.pickle differ
diff --git a/docs/users/_build/json/genindex.fjson b/docs/users/_build/json/genindex.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..04bcfd228b350d03c7b577afee556319cb80387b
--- /dev/null
+++ b/docs/users/_build/json/genindex.fjson
@@ -0,0 +1 @@
+{"genindexcounts": [], "genindexentries": [], "alabaster_version": "0.7.10", "current_page_name": "genindex", "sidebars": null, "split_index": false, "customsidebar": null}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides.fjson b/docs/users/_build/json/guides.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..b6ed3ec1f505f744b6119d69630e19901badab38
--- /dev/null
+++ b/docs/users/_build/json/guides.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "authors/", "title": "Authoring"}, "prev": {"link": "../roles/production/production_officers/", "title": "Production Officers"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Guides</a></li>\n</ul>\n", "sourcename": "guides.txt", "current_page_name": "guides", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"guides\">\n<h1>Guides<a class=\"headerlink\" href=\"#guides\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"authors/\">Authoring</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"authors/#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"referees/\">Refereeing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"referees/#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/submissions_processing/\">Submission processing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/production/\">Production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/maintenance/\">Maintenance of SciPost Publications</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/authors", "Authoring", "N", "next"], ["roles/production/production_officers", "Production Officers", "P", "previous"]], "title": "Guides"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/authors.fjson b/docs/users/_build/json/guides/authors.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..c123a28a96c83bdb1efbc5df3e9a0e3898f87df2
--- /dev/null
+++ b/docs/users/_build/json/guides/authors.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../referees/", "title": "Refereeing"}, "prev": {"link": "../", "title": "Guides"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Authoring</a><ul>\n<li><a class=\"reference internal\" href=\"#preparing-your-manuscript\">Preparing your manuscript</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/authors.txt", "current_page_name": "guides/authors", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"authoring\">\n<h1>Authoring<a class=\"headerlink\" href=\"#authoring\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>authors</strong> of submissions and publications.</p>\n<div class=\"section\" id=\"preparing-your-manuscript\">\n<h2>Preparing your manuscript<a class=\"headerlink\" href=\"#preparing-your-manuscript\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/referees", "Refereeing", "N", "next"], ["guides", "Guides", "P", "previous"]], "title": "Authoring"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial.fjson b/docs/users/_build/json/guides/editorial.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..3030515451f7299872a506015fc74d09167c4492
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "submissions_processing/", "title": "Submission processing"}, "prev": {"link": "../referees/", "title": "Refereeing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial</a></li>\n</ul>\n", "sourcename": "guides/editorial.txt", "current_page_name": "guides/editorial", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial\">\n<h1>Editorial<a class=\"headerlink\" href=\"#editorial\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"submissions_processing/\">Submission processing</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#reception-phase\">Reception phase</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#pre-screening\">Pre-screening</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"submissions_processing/#during-refereeing\">During refereeing</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/initial_production/\">Initial Production of SciPost Publications</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/proofs/\">Proofs</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/online_publication/\">Online Publication</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"maintenance/\">Maintenance of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"maintenance/#maintenance\">Maintenance</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/submissions_processing", "Submission processing", "N", "next"], ["guides/referees", "Refereeing", "P", "previous"]], "title": "Editorial"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/maintenance.fjson b/docs/users/_build/json/guides/editorial/maintenance.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..474dbbd9602912f257d68450f8a0dfb1ecdebd4b
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/maintenance.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": null, "prev": {"link": "../production/online_publication/", "title": "Online Publication"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Maintenance of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#maintenance\">Maintenance</a><ul>\n<li><a class=\"reference internal\" href=\"#cited-by-updates\">Cited-by updates</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/maintenance.txt", "current_page_name": "guides/editorial/maintenance", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"maintenance-of-scipost-publications\">\n<h1>Maintenance of SciPost Publications<a class=\"headerlink\" href=\"#maintenance-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>.\nIt describes the post-publication maintenance of the published material.</p>\n<div class=\"section\" id=\"maintenance\">\n<h2>Maintenance<a class=\"headerlink\" href=\"#maintenance\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"cited-by-updates\">\n<h3>Cited-by updates<a class=\"headerlink\" href=\"#cited-by-updates\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "P", "previous"]], "title": "Maintenance of SciPost Publications"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production.fjson b/docs/users/_build/json/guides/editorial/production.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..bbca9488c68a10c9aa5135f1d6413bfb2b5a6946
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/production.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "initial_production/", "title": "Initial Production of SciPost Publications"}, "prev": {"link": "../submissions_processing/", "title": "Submission processing"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production</a></li>\n</ul>\n", "sourcename": "guides/editorial/production.txt", "current_page_name": "guides/editorial/production", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production\">\n<h1>Production<a class=\"headerlink\" href=\"#production\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"initial_production/\">Initial Production of SciPost Publications</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#formatting-check\">Formatting check</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"initial_production/#latex-file-preparation\">LaTeX file preparation</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"proofs/\">Proofs</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"proofs/#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"online_publication/\">Online Publication</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#finalization-of-manuscript-production\">Finalization of manuscript production</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"online_publication/#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "N", "next"], ["guides/editorial/submissions_processing", "Submission processing", "P", "previous"]], "title": "Production"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/initial_production.fjson b/docs/users/_build/json/guides/editorial/production/initial_production.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..8a47dc5a06562dced66d9388df4eecb8cfa8b12e
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/production/initial_production.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../proofs/", "title": "Proofs"}, "prev": {"link": "../", "title": "Production"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Initial Production of SciPost Publications</a><ul>\n<li><a class=\"reference internal\" href=\"#formatting-check\">Formatting check</a></li>\n<li><a class=\"reference internal\" href=\"#source-retrieval-and-folder-preparation\">Source retrieval and folder preparation</a></li>\n<li><a class=\"reference internal\" href=\"#latex-file-preparation\">LaTeX file preparation</a><ul>\n<li><a class=\"reference internal\" href=\"#general-latex-tips\">General LaTeX tips</a></li>\n<li><a class=\"reference internal\" href=\"#step-by-step-procedure\">Step-by-step procedure</a></li>\n<li><a class=\"reference internal\" href=\"#simple-issues\">Simple issues</a></li>\n<li><a class=\"reference internal\" href=\"#problems\">Problems</a></li>\n<li><a class=\"reference internal\" href=\"#references-formatting\">References formatting</a></li>\n<li><a class=\"reference internal\" href=\"#layout-verification\">Layout verification</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/initial_production.txt", "current_page_name": "guides/editorial/production/initial_production", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"initial-production-of-scipost-publications\">\n<span id=\"initial-production\"></span><h1>Initial Production of SciPost Publications<a class=\"headerlink\" href=\"#initial-production-of-scipost-publications\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>, <strong>Production Supervisors</strong> and <strong>Production Officers</strong>. It describes the post-acceptance workflow from paper acceptance to publication.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"formatting-check\">\n<h2>Formatting check<a class=\"headerlink\" href=\"#formatting-check\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be emailed and asked to provide them,\nby sending in either an updated <code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file or <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> source.</p>\n<p>Any extra material provided by the authors which supplements\nthe arXiv source should be put in a folder <code class=\"docutils literal\"><span class=\"pre\">EXTRA_FROM_AUTH</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"source-retrieval-and-folder-preparation\">\n<h2>Source retrieval and folder preparation<a class=\"headerlink\" href=\"#source-retrieval-and-folder-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">On the SciPost server, navigate to folder\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/IN_PRODUCTION</span></code>.</p>\n</li>\n<li><p class=\"first\">Create a folder\n<code class=\"docutils literal\"><span class=\"pre\">[journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_[arxiv</span> <span class=\"pre\">identifier]_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name]</span></code>,\ne.g. <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1604.98141v3_Smart</span></code>.</p>\n</li>\n<li><p class=\"first\">Save the source from arXiv into this folder.</p>\n</li>\n<li><p class=\"first\">NOTE: the file will be named <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>, which is not recognized\nas a <code class=\"docutils literal\"><span class=\"pre\">.tar.gz</span></code> file on a UNIX system. Rename the file\n<code class=\"docutils literal\"><span class=\"pre\">####.####v#.tar.gz</span></code>. Unzip it to produce the folder <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code>.\nIf this produces another tar file, it is because the submission consists of\na single <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file; you should then rename this to <code class=\"docutils literal\"><span class=\"pre\">####.#####v#.tex</span></code>.</p>\n</li>\n<li><p class=\"first\">Copy the paper\u2019s sources one level down (so from <code class=\"docutils literal\"><span class=\"pre\">####.#####v#</span></code> to\nthe current directory). BE CAREFUL: if the authors have included any of\nthe SciPost style files (<code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code>, <code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code>), DO NOT\ncopy those down. You can skip this step if the previous step immediately led\nto a <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</p>\n</li>\n<li><p class=\"first\">Copy the files in\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">full</span> <span class=\"pre\">name]/v##_production/FILES_TO_COPY_IN_PAPER_DIR</span></code>\nto the current directory. There are 5 files:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li><code class=\"docutils literal\"><span class=\"pre\">by.eps</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">logo_scipost_with_bgd.pdf</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_bibstyle.bst</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code></li>\n<li><code class=\"docutils literal\"><span class=\"pre\">SciPost_[Phys,</span> <span class=\"pre\">or</span> <span class=\"pre\">other</span> <span class=\"pre\">as</span> <span class=\"pre\">appropriate]_Skeleton.tex</span></code></li>\n</ul>\n</div></blockquote>\n</li>\n<li><p class=\"first\">Copy the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source to a new file using the name convention\n<code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">abbrev.</span> <span class=\"pre\">name]_####_#####v#_[first</span> <span class=\"pre\">author</span> <span class=\"pre\">last</span> <span class=\"pre\">name].tex</span></code>\n(careful: use underscore instead of . between numbers).</p>\n</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"latex-file-preparation\">\n<h2>LaTeX file preparation<a class=\"headerlink\" href=\"#latex-file-preparation\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><p>The next step is to transfer the submission&#8217;s LaTeX contents into the final file.</p>\n<p>All steps involed appear in the skeleton <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> source in the form <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> opening marked, followed by a corresponding <code class=\"docutils literal\"><span class=\"pre\">%%%%%%%%%%</span> <span class=\"pre\">END</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">[TOKEN]</span></code> marker.</p>\n<p>The easiest way to proceed is to copy and paste material from the authors&#8217; <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code>\nsource directly into the (appropriately renamed as per the instructions above)\nskeleton file.</p>\n<p>During the file preparation, if there is anything worth noting about the\nproduction process, please include this in the:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n<span class=\"o\">%</span> <span class=\"n\">Production</span> <span class=\"n\">Notes</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">name</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%</span>\n<span class=\"o\">%</span> <span class=\"p\">[</span><span class=\"n\">your</span> <span class=\"n\">notes</span> <span class=\"n\">here</span><span class=\"p\">]</span>\n<span class=\"o\">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%</span>\n</pre></div>\n</div>\n<p>block at the beginning of the document, just before the <code class=\"docutils literal\"><span class=\"pre\">\\documentclass</span></code> declaration.</p>\n<p>As the person running the production, please identify yourself by writing\nyour initials and surname in this block.</p>\n</div></blockquote>\n<div class=\"section\" id=\"general-latex-tips\">\n<h3>General LaTeX tips<a class=\"headerlink\" href=\"#general-latex-tips\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">Prefer the <code class=\"docutils literal\"><span class=\"pre\">align</span></code> (from package <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code>) environment to <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code>.\nFor a technical discussion, see <em>e.g.</em> <a class=\"reference external\" href=\"http://tug.org/TUGboat/tb33-1/tb103madsen.pdf\">this link</a>.</p>\n<p>You do <strong>not</strong> have to systematically replace all <code class=\"docutils literal\"><span class=\"pre\">eqnarray</span></code> with <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.\nHowever, if you do reformat some equations, do shift to <code class=\"docutils literal\"><span class=\"pre\">align</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"step-by-step-procedure\">\n<h3>Step-by-step procedure<a class=\"headerlink\" href=\"#step-by-step-procedure\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic\">\n<li><p class=\"first\">TODO: PAPER CITATION</p>\n<p>In this place, fill the missing numbers in the citation header:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\rhead{\\small \\href{https://scipost.org/SciPostPhys.?.?.???}{SciPost Phys. ?, ??? (20??)}}\n</pre></div>\n</div>\n<p>The first argument of the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> is the simple permanent URL for the publication. This includes 3 numbers: the volume number, issue, and three-digit paper number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.1.2.011</span></code>. Verify the appropriate issue number (this will be verified later by an EdAdmin). At this stage, leave the paper number to <code class=\"docutils literal\"><span class=\"pre\">???</span></code>: this number will be assigned and filled in in the last stage of production.</p>\n<p>The second argument to the <code class=\"docutils literal\"><span class=\"pre\">href</span></code> uses the simple citation, dropping the issue number, for example <code class=\"docutils literal\"><span class=\"pre\">SciPostPhys.</span> <span class=\"pre\">1,</span> <span class=\"pre\">011</span> <span class=\"pre\">(2016)</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: PACKAGES</p>\n<p>The <code class=\"docutils literal\"><span class=\"pre\">SciPost.cls</span></code> (v1b) class definition requires the following packages:</p>\n<ul class=\"simple\">\n<li>amsmath [NOTE: amssymb is redundant and clashes with mathdesign]</li>\n<li>cite</li>\n<li>doi</li>\n<li>fancyhdr</li>\n<li>geometry</li>\n<li>graphicx</li>\n<li>hyperref</li>\n<li>inputenc</li>\n<li>lineno [for proofs only]</li>\n<li>titlesec</li>\n<li>tocloft, nottoc,notlot,notlof</li>\n<li>xcolor</li>\n</ul>\n<p>If the authors are using extra packages not already in the list above,\nyou should paste their list within this TODO block.</p>\n<p>Any package originally included by the authors which you do <strong>not</strong>\ninclude should be commented out with a  <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">REMOVED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PROD</span></code>\ncomments prepended.</p>\n<p>Any package which is added during production should be listed after\nthe <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">ADDED</span> <span class=\"pre\">IN</span> <span class=\"pre\">PRODUCTION</span></code> marker.</p>\n</li>\n<li><p class=\"first\">TODO: COMMANDS</p>\n<p>If the authors have redefined commands, paste the redefinitions in this block.</p>\n<p>Discard (namely: do not copy and paste) any length (and similar) redefinitions.</p>\n</li>\n<li><p class=\"first\">TODO: TITLE</p>\n<p>The title is enclosed in:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begin</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}{</span>\\<span class=\"n\">Large</span> \\<span class=\"n\">textbf</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span>\n<span class=\"p\">[</span><span class=\"n\">title</span><span class=\"p\">]</span>\n<span class=\"p\">}}}</span>\\<span class=\"n\">end</span><span class=\"p\">{</span><span class=\"n\">center</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>Paste the title in this block. End the title with <code class=\"docutils literal\"><span class=\"pre\">\\\\</span></code>\nin order to ensure proper uniform spacing between the lines.</p>\n</li>\n<li><p class=\"first\">TODO: AUTHORS</p>\n<p>Author names should be in format <code class=\"docutils literal\"><span class=\"pre\">firstname</span> <span class=\"pre\">lastname</span></code>, e.g. <code class=\"docutils literal\"><span class=\"pre\">John</span> <span class=\"pre\">Smith</span></code>,\nand should be in textbf. No <code class=\"docutils literal\"><span class=\"pre\">comma</span></code> but rather an <code class=\"docutils literal\"><span class=\"pre\">and</span></code> before\nthe last author. If multiple authors and affiliations, use <code class=\"docutils literal\"><span class=\"pre\">\\textsuperscript</span></code>\nand positive integer labels, with a <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> for the corresponding author.\nIf multiple email addresses are given, reference them with <code class=\"docutils literal\"><span class=\"pre\">$\\dagger$,</span> <span class=\"pre\">...</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: AFFILIATIONS</p>\n<p>If there are many affiliations, each is prepended by the appropriate\n<code class=\"docutils literal\"><span class=\"pre\">{\\bf</span> <span class=\"pre\">[nr]}</span></code>. Separate affiliations with double-backslash.</p>\n<p>Put a <code class=\"docutils literal\"><span class=\"pre\">\\\\[\\baselineskip]</span></code> after the affiliations.</p>\n</li>\n<li><p class=\"first\">TODO: EMAIL (OPTION)</p>\n<p>Optionally, provide the email of the corresponding author using:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>``\\href{mailto:[email]}{\\small \\sf [email]}``\n</pre></div>\n</div>\n<p>prepended with <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span></code> if corresponding author. If no email is to be given,\ncomment out the <code class=\"docutils literal\"><span class=\"pre\">$\\star$</span> <span class=\"pre\">\\href{mailto:[email]}{\\small</span> <span class=\"pre\">\\sf</span> <span class=\"pre\">[email]}</span></code> line.</p>\n<p>If a web link is offered, use the format <code class=\"docutils literal\"><span class=\"pre\">{\\small</span> <span class=\"pre\">\\url{[url]}}</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: ABSTRACT</p>\n<p>Paste the abstract in the provided block:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">section</span><span class=\"o\">*</span><span class=\"p\">{</span>\\<span class=\"n\">color</span><span class=\"p\">{</span><span class=\"n\">scipostdeepblue</span><span class=\"p\">}{</span><span class=\"n\">Abstract</span><span class=\"p\">}}</span>\n<span class=\"p\">{</span>\\<span class=\"n\">bf</span>\n<span class=\"p\">[</span><span class=\"n\">abstract</span><span class=\"p\">]</span>\n<span class=\"p\">}</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">TODO: TOC</p>\n<p>As a general guideline, the paper should contain a table of contents\nif it has more than 6 pages.</p>\n<p>If a TOC should be included, leave the skeleton as it is. If no TOC\nshould be there, simply comment out the 2nd and 3rd lines of:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>explicitly leaving:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n<span class=\"o\">%</span>\\<span class=\"n\">tableofcontents</span>\n\\<span class=\"n\">noindent</span>\\<span class=\"n\">rule</span><span class=\"p\">{</span>\\<span class=\"n\">textwidth</span><span class=\"p\">}{</span><span class=\"mi\">1</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n\\<span class=\"n\">vspace</span><span class=\"p\">{</span><span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}</span>\n</pre></div>\n</div>\n<p>If a single horizontal line is pushed to the next page, correct by\nplaying with negatime <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code>.</p>\n</li>\n<li><p class=\"first\">TODO: COPYRIGHT</p>\n<p>Include the first author&#8217;s initials and family name in the copyright\nstatement. If there are just two authors: give both authors&#8217; initials\nand last names. If there are more than two authors, use the format\n<code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee</span> <span class=\"pre\">{\\it</span> <span class=\"pre\">et</span> <span class=\"pre\">al.}</span></code>. Be respectful of any special (non-latin)\ncharacters in authors&#8217; names.</p>\n</li>\n<li><p class=\"first\">TODO: DATES</p>\n<p>Fill in the appropriate received and accepted dates in\nformat <code class=\"docutils literal\"><span class=\"pre\">DD-MM-YYYY</span></code>. Be careful to use the correct submission data,\nnamely that of the original submission.</p>\n<p>The accepted and published dates will be filled in later on.</p>\n</li>\n<li><p class=\"first\">TODO: DOI</p>\n<p>Provide the volume and issue numbers (two places) in the DOI specifier.\nThe paper number will be assigned in the final stage of production.</p>\n</li>\n<li><p class=\"first\">TODO: LINENO</p>\n<p>During proofs stage, make sure line numbers are activated (they should\nbe by default).</p>\n</li>\n<li><p class=\"first\">TODO: CONTENTS</p>\n<p>Paste the entire bulk of the paper in this block,\nincluding all sections and eventual appendices.\nCheck that there are no appendices after the references in the\noriginal tex file.</p>\n</li>\n<li><p class=\"first\">TODO: BIBNR</p>\n<p>If the bibliography contains more than 100 entries, use\n<code class=\"docutils literal\"><span class=\"pre\">999</span></code> instead of <code class=\"docutils literal\"><span class=\"pre\">99</span></code> in the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliotraphy}{[nr]}</span></code>\nstatement.</p>\n</li>\n<li><p class=\"first\">TODO: BBL</p>\n<p>The references are explicitly pasted into this block.</p>\n<p>If using BiBTeX, use a <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> command,\nand comment out the <code class=\"docutils literal\"><span class=\"pre\">\\begin{thebibliography}</span></code> and <code class=\"docutils literal\"><span class=\"pre\">\\end{thebibliography}</span></code>\ncommands. After running BiBTeX, the contents of the generated\n<code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> file should be pasted in the uncommented <code class=\"docutils literal\"><span class=\"pre\">\\begin,\\end{thebibliography}</span></code>\nblock, and the <code class=\"docutils literal\"><span class=\"pre\">\\bibliography{[bibfilename]}</span></code> should be commented out.</p>\n<p><em>Note: the reason to not use BiBTeX from now on is to easy in-file\ncorrection of improperly formatted references (instead of having to correct\nthe ``.bib`` file)</em>.</p>\n</li>\n</ol>\n<p><strong>You are now ready to typeset the ``.tex`` file</strong>. Simple issues are listed\nbelow. If you encounter further problems, see the <strong>Problems</strong> list below.</p>\n<p>If you need to run BiBTeX for the references, do so (remembering to do it\nat least twice so the references appear), and then paste the contents of the\n<code class=\"docutils literal\"><span class=\"pre\">.bbl</span></code> file in the <code class=\"docutils literal\"><span class=\"pre\">%</span> <span class=\"pre\">TODO:</span> <span class=\"pre\">REFERENCES</span></code> block. <strong>Make sure you use the\ncorrect</strong> <code class=\"docutils literal\"><span class=\"pre\">.bib</span></code> <strong>file</strong>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"simple-issues\">\n<h3>Simple issues<a class=\"headerlink\" href=\"#simple-issues\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\"><em>LaTeX Error: environment acknowledgements undefined</em> or\n<em>Undefined control sequence acknowledgements</em></p>\n<p>The users have used ReVTeX; simply change the <code class=\"docutils literal\"><span class=\"pre\">\\begin{acknowledgements}</span></code>\nor <code class=\"docutils literal\"><span class=\"pre\">\\acknowledgements</span></code>\nto <code class=\"docutils literal\"><span class=\"pre\">\\section*{Acknowledgements}</span></code> (of course also removing any eventual\n<code class=\"docutils literal\"><span class=\"pre\">\\end{acknowledgements}</span></code>).</p>\n</li>\n<li><p class=\"first\"><em>LaTeX Error: Environment widetext undefined.</em></p>\n<p>The authors have used ReVTeX; simply comment out all <code class=\"docutils literal\"><span class=\"pre\">\\begin{widetext}</span></code>\nand <code class=\"docutils literal\"><span class=\"pre\">\\end{widetext}</span></code> markers.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"problems\">\n<h3>Problems<a class=\"headerlink\" href=\"#problems\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ul>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">lineno</span></code> and <code class=\"docutils literal\"><span class=\"pre\">amsmath</span></code> are incompatible</p>\n<p>Problem: line numbers don&#8217;t appear when paragraph is followed by align etc.</p>\n<p>Solution: [from <a class=\"reference external\" href=\"http://phaseportrait.blogspot.nl/2007/08/lineno-and-amsmath-compatibility.html\">this link</a>]: paste this in the preamble:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span><span class=\"o\">%%</span> <span class=\"n\">Patch</span> <span class=\"n\">lineno</span> <span class=\"n\">when</span> <span class=\"n\">used</span> <span class=\"k\">with</span> <span class=\"n\">amsmath</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname #1\\endcsname</span>\n\\<span class=\"n\">expandafter</span>\\<span class=\"n\">let</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\expandafter\\endcsname\\csname end#1\\endcsname</span>\n\\<span class=\"n\">renewenvironment</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">linenomath</span>\\<span class=\"n\">csname</span> <span class=\"n\">old</span><span class=\"c1\">#1\\endcsname}%</span>\n<span class=\"p\">{</span>\\<span class=\"n\">csname</span> <span class=\"n\">oldend</span><span class=\"c1\">#1\\endcsname\\endlinenomath}}%</span>\n\\<span class=\"n\">newcommand</span><span class=\"o\">*</span>\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1}%</span>\n\\<span class=\"n\">patchAmsMathEnvironmentForLineno</span><span class=\"p\">{</span><span class=\"c1\">#1*}}%</span>\n\\<span class=\"n\">AtBeginDocument</span><span class=\"p\">{</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">equation</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">align</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">flalign</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">alignat</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">gather</span><span class=\"p\">}</span><span class=\"o\">%</span>\n\\<span class=\"n\">patchBothAmsMathEnvironmentsForLineno</span><span class=\"p\">{</span><span class=\"n\">multline</span><span class=\"p\">}</span><span class=\"o\">%</span>\n<span class=\"p\">}</span>\n<span class=\"o\">%%</span> <span class=\"n\">End</span> <span class=\"n\">patch</span> <span class=\"n\">lineno</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Breaking of in-line math equations</p>\n<p>Simply prevent by forcing equations into a math atom by surrouding them with braces,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>Here is an equation that should not be broken: ${E=mc^2}$.\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">Equation/table or other text/maths element is just too wide.\nOption: locally change the fontsize by embedding the object in a <code class=\"docutils literal\"><span class=\"pre\">\\fontsize</span></code> block,:</p>\n<div class=\"highlight-default\"><div class=\"highlight\"><pre><span></span>\\<span class=\"n\">begingroup</span>\n\\<span class=\"n\">fontsize</span><span class=\"p\">{</span><span class=\"n\">new</span> <span class=\"n\">font</span> <span class=\"n\">size</span><span class=\"p\">,</span> <span class=\"n\">e</span><span class=\"o\">.</span><span class=\"n\">g</span><span class=\"o\">.</span> <span class=\"mi\">10</span><span class=\"n\">pt</span><span class=\"p\">}{</span><span class=\"n\">skip</span><span class=\"p\">,</span> <span class=\"mi\">120</span><span class=\"o\">%</span> <span class=\"n\">of</span> <span class=\"n\">previous</span><span class=\"p\">}</span>\\<span class=\"n\">selectfont</span>\n<span class=\"p\">[</span> <span class=\"n\">element</span><span class=\"p\">]</span>\n\\<span class=\"n\">endgroup</span>\n</pre></div>\n</div>\n</li>\n<li><p class=\"first\">package <code class=\"docutils literal\"><span class=\"pre\">MnSymbol</span></code> is problematic and clashes with amsmath.</p>\n<p>One solution is to import individual symbols according to these\n<a class=\"reference external\" href=\"http://tex.stackexchange.com/questions/36006/importing-single-symbol-from-mnsymbol\">instructions</a>.</p>\n</li>\n<li><p class=\"first\">Equations spacing in <code class=\"docutils literal\"><span class=\"pre\">align</span></code> environment is too tight.</p>\n<p>The simple solution is to include a spacing specifier of the form <code class=\"docutils literal\"><span class=\"pre\">\\nonumber</span> <span class=\"pre\">\\\\[5pt]</span></code>,\nwhere <code class=\"docutils literal\"><span class=\"pre\">5pt</span></code> is a good compromise.</p>\n<p>This spacing can also be set globally by including <code class=\"docutils literal\"><span class=\"pre\">\\setlength{\\jot}{5pt}</span></code> before the\n<code class=\"docutils literal\"><span class=\"pre\">\\begin{document}</span></code>.</p>\n</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"references-formatting\">\n<h3>References formatting<a class=\"headerlink\" href=\"#references-formatting\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>References should be in the following format:</p>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Author names are in comma-separated list (except for the last author,\nwith no comma and an <em>and</em>) with format [initials] [last name].</li>\n<li>Titles are in italics, and capitalization is displayed (using <em>e.g.</em> {{ [title] }} in BiBTeX). For PRL: nouns capitalized.</li>\n<li>Journal names are abbreviated. A useful resource is this <a class=\"reference external\" href=\"http://www.efm.leeds.ac.uk/~mark/ISIabbr/A_abrvjt.html\">list of journal abbreviations</a>.</li>\n<li>Volume number is in bold.</li>\n<li>Issue number can be left out; if included, in parentheses after volume nr.</li>\n<li>Year is in parentheses.</li>\n<li>Commas separate all elements.</li>\n<li>All doi are present and displayed in format doi:[doi]. Note that the doi does\n<em>not</em> include any <code class=\"docutils literal\"><span class=\"pre\">http://doi.org</span></code> or similar URL prefix. Instead, it should\nbe of the form <code class=\"docutils literal\"><span class=\"pre\">10.###[...]/[...]</span></code>.</li>\n<li>The reference is closed by a <code class=\"docutils literal\"><span class=\"pre\">.</span></code></li>\n</ul>\n<p>For arXiv entries, verify if the paper has been published in the meantime.\nIf so, replace this reference with its proper citation.\nIf not, use the format <code class=\"docutils literal\"><span class=\"pre\">\\href{https://arxiv.org/abs/####.#####}{arXiv:####.#####}</span></code>,\nand remove any <code class=\"docutils literal\"><span class=\"pre\">(YEAR)</span></code>.</p>\n<p>J. Stat. Mech. and JHEP are annoying (because the volume number is the year).\nManually remove volume nr for these, so the format becomes <code class=\"docutils literal\"><span class=\"pre\">A.</span> <span class=\"pre\">Bee,</span> <span class=\"pre\">\\emp{Bee's</span> <span class=\"pre\">nice</span> <span class=\"pre\">paper},</span> <span class=\"pre\">J.</span> <span class=\"pre\">Stat.</span> <span class=\"pre\">Mech.:</span> <span class=\"pre\">Th.</span> <span class=\"pre\">Exp.</span> <span class=\"pre\">[P,L]#####</span> <span class=\"pre\">(20##),</span> <span class=\"pre\">\\doi{10...}.</span></code></p>\n<p>J. Phys. A is also annoying. Up to and including volume 39 (2006), it&#8217;s\nJ. Phys. A: Math. Gen. Afterwards, volume 40 (2007) onwards, it&#8217;s\nJ. Phys. A: Math. Theor.</p>\n<p>Entries in the bibliography which are not references but footnotes,\nshould be formatted as such in the main text (using <code class=\"docutils literal\"><span class=\"pre\">\\footnote{}</span></code>).</p>\n<p>Check that all DOIs work. Remove the <code class=\"docutils literal\"><span class=\"pre\">\\meta</span></code> at the end of the bibitem\nif it is present.</p>\n</div></blockquote>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"layout-verification\">\n<h3>Layout verification<a class=\"headerlink\" href=\"#layout-verification\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>The whole paper should be scanned through, and the layout of equations\nand figures should be checked and corrected if necessary.</p>\n<p>In particular, the punctuation of equations should be checked and corrected\nif necessary.</p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/proofs", "Proofs", "N", "next"], ["guides/editorial/production", "Production", "P", "previous"]], "title": "Initial Production of SciPost Publications"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/online_publication.fjson b/docs/users/_build/json/guides/editorial/production/online_publication.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..ebe467454f71af1a57ab7bcbec5fe299a29e0797
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/production/online_publication.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../../maintenance/", "title": "Maintenance of SciPost Publications"}, "prev": {"link": "../proofs/", "title": "Proofs"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Online Publication</a><ul>\n<li><a class=\"reference internal\" href=\"#finalization-of-manuscript-production\">Finalization of manuscript production</a><ul>\n<li><a class=\"reference internal\" href=\"#preparation-of-final-version-of-record\">Preparation of final version of record</a></li>\n<li><a class=\"reference internal\" href=\"#uploading-to-scipost-org\">Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code></a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#metadata-preparation-and-doi-registration-with-crossref\">Metadata preparation and DOI registration with Crossref</a><ul>\n<li><a class=\"reference internal\" href=\"#author-listing\">Author listing</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-citations-list\">Preparation of the citations list</a></li>\n<li><a class=\"reference internal\" href=\"#funding-info\">Funding info</a></li>\n<li><a class=\"reference internal\" href=\"#preparation-of-the-metadata-xml\">Preparation of the metadata XML</a></li>\n<li><a class=\"reference internal\" href=\"#metadata-testing-and-deposit\">Metadata testing and deposit</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/online_publication.txt", "current_page_name": "guides/editorial/production/online_publication", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"online-publication\">\n<h1>Online Publication<a class=\"headerlink\" href=\"#online-publication\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Editorial Administrators</strong>. It describes the final publication of manuscripts, after final author proofs approval.</p>\n<p>Version: 2017-05-11.</p>\n<div class=\"section\" id=\"finalization-of-manuscript-production\">\n<h2>Finalization of manuscript production<a class=\"headerlink\" href=\"#finalization-of-manuscript-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<p>The steps described here follow up on the <a class=\"reference internal\" href=\"../initial_production/\"><span class=\"doc\">Initial Production of SciPost Publications</span></a> instructions used by production officers.</p>\n<div class=\"section\" id=\"preparation-of-final-version-of-record\">\n<h3>Preparation of final version of record<a class=\"headerlink\" href=\"#preparation-of-final-version-of-record\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>Copy the whole paper folder from folder [journal name]/IN_PRODUCTION \\to [journal name]/Volume_[volume nr].</li>\n<li>Check online to see which paper number is next available.</li>\n<li>Rename this folder using the convention [journal name]_[volume number]([issue number])_[paper nr].</li>\n<li>Within this folder, take the author-accepted version tex file and rename it using the convention [journal name abbrev]_[volume nr]_[issue nr]_[paper nr].tex.</li>\n<li>In this tex source, replace the ??? with the 3-digit paper number (3 places: 2 in preamble, 1 in copyright statement).</li>\n<li>Ensure that the author names are in format Abe Bee, Cee Dee and Elle Fine.</li>\n<li>Insert the correct Received, Accepted and Published dates in copyright statement.</li>\n<li>Make sure linenumbers are deactivated.</li>\n<li>Does the table of contents (if present) look OK? (Beware of hanging closing\nline pushed to top of second page). If needed, adjust the <code class=\"docutils literal\"><span class=\"pre\">\\vspace</span></code> spacings\ndefined around the table of contents, and/or insert an additional <code class=\"docutils literal\"><span class=\"pre\">vspace</span></code>\nwith negative spacing before the abstract.</li>\n<li>If the author-accepted proofs version used BiBTeX, copy the contents of the bbl\nfile into the .tex file, so that BiBTeX is not needed anymore.</li>\n<li>Verify each reference: authors, title, journal reference, doi link.\nManually correct any incorrect references.</li>\n<li>Recompile the LaTeX, and CAREFULLY CHECK EVERYTHING.</li>\n</ol>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"uploading-to-scipost-org\">\n<h3>Uploading to <code class=\"docutils literal\"><span class=\"pre\">scipost.org</span></code><a class=\"headerlink\" href=\"#uploading-to-scipost-org\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><ol class=\"arabic simple\">\n<li>From the Submissions Pool, click on the link to initiate the publication process.</li>\n<li>Fill in the initiate publication form (using the dates in format YYYY-MM-DD). Submit. You are now on the validate publication page.</li>\n<li>Check that the paper number is correct. If not, modify the final tex source to account for this (see previous subsection).</li>\n<li>Select who the first author is (if registered as a Contributor; if not, inform the EdAdmin, and choose another author who is registered).</li>\n<li>Select the final version&#8217;s pdf file.</li>\n<li>Submit. The paper is now published online.</li>\n</ol>\n</div></blockquote>\n</div>\n</div>\n<div class=\"section\" id=\"metadata-preparation-and-doi-registration-with-crossref\">\n<h2>Metadata preparation and DOI registration with Crossref<a class=\"headerlink\" href=\"#metadata-preparation-and-doi-registration-with-crossref\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div>These tasks must be performed by <strong>Editorial Administrators</strong>,\nwho have access to the Publication&#8217;s editorial tools\nby navigating to the Publication&#8217;s page.</div></blockquote>\n<div class=\"section\" id=\"author-listing\">\n<h3>Author listing<a class=\"headerlink\" href=\"#author-listing\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>If not all authors appear in the list presented at the top of the EdAdmin tools,\nthese should be added by following the <code class=\"docutils literal\"><span class=\"pre\">Add</span> <span class=\"pre\">a</span> <span class=\"pre\">missing</span> <span class=\"pre\">author</span></code> link.</p>\n<p>The search form can be used to find missing authors who might be\nRegistered Contributors. If found, a one-click process adds them.</p>\n<p>You can otherwise create an UnregisteredAuthor object instance and link\nit to the publication, by simply filling in the first and last name fields\nand clicking on <code class=\"docutils literal\"><span class=\"pre\">Add</span></code>.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-citations-list\">\n<h3>Preparation of the citations list<a class=\"headerlink\" href=\"#preparation-of-the-citations-list\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Follow the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">citation</span> <span class=\"pre\">list</span> <span class=\"pre\">metadata</span></code> link.</p>\n<p>In the text area, paste the entire list of bibitems from the paper&#8217;s\nfinal <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file. Upon clicking on <code class=\"docutils literal\"><span class=\"pre\">Submit</span></code>, all DOI entires\nare extracted and formatted into XML metadata which is saved in the\ndatabase.</p>\n<p>Citations with no valid DOI (<em>e.g.</em> arXiv preprints, books, etc)\ndo not appear in the metadata.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"funding-info\">\n<h3>Funding info<a class=\"headerlink\" href=\"#funding-info\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">funding</span> <span class=\"pre\">info</span> <span class=\"pre\">metadata</span></code> link leads to a\npage where the funding statement of the Publication&#8217;s <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file\n(found either as a separate subsection or in the Acknowledgements)\ncan be pasted.</div></blockquote>\n</div>\n<div class=\"section\" id=\"preparation-of-the-metadata-xml\">\n<h3>Preparation of the metadata XML<a class=\"headerlink\" href=\"#preparation-of-the-metadata-xml\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>Following the <code class=\"docutils literal\"><span class=\"pre\">Create/update</span> <span class=\"pre\">metadata</span> <span class=\"pre\">XML</span></code> link auto-generates a\nfull XML text field containing all the provided information,\nproperly formatted for the upcoming submission to Crossref.</p>\n<p>Verify that the first author is indeed enclosed in a\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='first'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tag,\nand that subsequent authors (enclosed in\n<code class=\"docutils literal\"><span class=\"pre\">&lt;person_name</span> <span class=\"pre\">sequence='additional'</span> <span class=\"pre\">contributor_role='author'&gt;</span></code> tags)\nappear in the order of the Publication&#8217;s author list.</p>\n<p>Once the metadata is set, clicking on <code class=\"docutils literal\"><span class=\"pre\">Accept</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span></code>\nsaves the metadata to the database and returns one to the Publication&#8217;s\npage.</p>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"metadata-testing-and-deposit\">\n<h3>Metadata testing and deposit<a class=\"headerlink\" href=\"#metadata-testing-and-deposit\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<blockquote>\n<div><p>At this stage, the metadata is ready for uploading to Crossref.\nThis occurs via a POST query to either the test or live Crossref server.</p>\n<p>Clicking on <code class=\"docutils literal\"><span class=\"pre\">Test</span> <span class=\"pre\">metadata</span> <span class=\"pre\">deposit</span></code> immediately posts the metadata\nto the test server, and takes you to a page where the server&#8217;s\nresponse headers are displayed. The server also sends a more detailed\nresponse via email\n(to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>; if you do not have access to this mailbox,\nask SciPost Administration) with the success status.</p>\n<p>Similarly, the actual deposit is immediately performed upon clicking on the\n<code class=\"docutils literal\"><span class=\"pre\">Deposit</span> <span class=\"pre\">the</span> <span class=\"pre\">metadata</span> <span class=\"pre\">to</span> <span class=\"pre\">Crossref</span></code>. The response headers are displayed,\nand a detailed email response is sent by Crossref to <code class=\"docutils literal\"><span class=\"pre\">admin&#64;scipost.org</span></code>.</p>\n<p><strong>This completes the publication process.</strong></p>\n</div></blockquote>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/maintenance", "Maintenance of SciPost Publications", "N", "next"], ["guides/editorial/production/proofs", "Proofs", "P", "previous"]], "title": "Online Publication"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/production/proofs.fjson b/docs/users/_build/json/guides/editorial/production/proofs.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..94976b4ac230667952c6c2ba521824800e647626
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/production/proofs.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../online_publication/", "title": "Online Publication"}, "prev": {"link": "../initial_production/", "title": "Initial Production of SciPost Publications"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Proofs</a><ul>\n<li><a class=\"reference internal\" href=\"#proofs-version-production\">Proofs version production</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/production/proofs.txt", "current_page_name": "guides/editorial/production/proofs", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../../", "title": "Guides"}, {"link": "../../", "title": "Editorial"}, {"link": "../", "title": "Production"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"proofs\">\n<h1>Proofs<a class=\"headerlink\" href=\"#proofs\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>Production supervisors</strong>. It describes the proofs cycle between production team and manuscript authors.</p>\n<div class=\"section\" id=\"proofs-version-production\">\n<h2>Proofs version production<a class=\"headerlink\" href=\"#proofs-version-production\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Once the paper has been properly formatted, the <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> and <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> files\nshould be copied into new files carrying the <code class=\"docutils literal\"><span class=\"pre\">_proofs_v[nr]</span></code> suffix,\nfor example <code class=\"docutils literal\"><span class=\"pre\">SciPost_Phys_1699_9999v9_Bee_proofs_v1.tex</span></code>.</li>\n<li>The <code class=\"docutils literal\"><span class=\"pre\">.pdf</span></code> proofs should be emailed to the authors for verification.\nAuthors should return either an annotated pdf or a list of corrections\nby plain text email.</li>\n<li>Any modifications should be implemented directly in the main <code class=\"docutils literal\"><span class=\"pre\">.tex</span></code> file.</li>\n<li>If any further check by the authors are required, start this proofs\ntodo-list again, increasing the proofs version number.</li>\n<li>Once the authors have approved the proofs, the paper can be put forward\nto online publication.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production/online_publication", "Online Publication", "N", "next"], ["guides/editorial/production/initial_production", "Initial Production of SciPost Publications", "P", "previous"]], "title": "Proofs"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/editorial/submissions_processing.fjson b/docs/users/_build/json/guides/editorial/submissions_processing.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..26f85396466cabae3eb0870851877657b1898d5a
--- /dev/null
+++ b/docs/users/_build/json/guides/editorial/submissions_processing.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../production/", "title": "Production"}, "prev": {"link": "../", "title": "Editorial"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Submission processing</a><ul>\n<li><a class=\"reference internal\" href=\"#reception-phase\">Reception phase</a><ul>\n<li><a class=\"reference internal\" href=\"#plagiarism-check\">Plagiarism check</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#pre-screening\">Pre-screening</a><ul>\n<li><a class=\"reference internal\" href=\"#assignments\">Assignments</a></li>\n</ul>\n</li>\n<li><a class=\"reference internal\" href=\"#during-refereeing\">During refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#compliance-with-crossref-doi-requirements\">Compliance with Crossref DOI requirements</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/editorial/submissions_processing.txt", "current_page_name": "guides/editorial/submissions_processing", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Guides"}, {"link": "../", "title": "Editorial"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"submission-processing\">\n<h1>Submission processing<a class=\"headerlink\" href=\"#submission-processing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the workflow starting at the moment of submission, and leading up to the final decision by the Editorial College. Editorial Administrators should use these instructions to correctly shepherd submissions through the whole refereeing process.</p>\n<div class=\"section\" id=\"reception-phase\">\n<h2>Reception phase<a class=\"headerlink\" href=\"#reception-phase\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"plagiarism-check\">\n<h3>Plagiarism check<a class=\"headerlink\" href=\"#plagiarism-check\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>Upon reception of a submission, the first action is to perform the plagiarism check. This is performed using Crossref Similarity Check (hereunder CSC), which makes use of the iThenticate application. EdAdmin should navigate to the <a class=\"reference external\" href=\"https://crosscheck.ithenticate.com/en_us/login\">crosscheck page</a> and login using the credentials (ask SciPost Admin if you don&#8217;t have any).</p>\n<p>The .pdf of the submission should be obtained from arXiv, renamed <code class=\"docutils literal\"><span class=\"pre\">####_#####v#_[lastname].pdf</span></code>, and saved in the shared folder <code class=\"docutils literal\"><span class=\"pre\">SURFDRIVE/SCIPOST_SUBMISSIONS/[journal_name]/YYYY_MM</span></code>. This file should then be uploaded to CSC, in a folder <code class=\"docutils literal\"><span class=\"pre\">[Journal</span> <span class=\"pre\">name]_submissions/YYYY-MM</span></code> (this folder should be created if this is that month&#8217;s first submission; if creating the folder, select the option <code class=\"docutils literal\"><span class=\"pre\">Exclude</span> <span class=\"pre\">bibliography</span></code>). To upload, click on <code class=\"docutils literal\"><span class=\"pre\">Submit</span> <span class=\"pre\">a</span> <span class=\"pre\">document</span></code>. You will be prompted for the (first) author first and last names, together with the document title (namely: the title of the paper). Clicking <code class=\"docutils literal\"><span class=\"pre\">upload</span></code> starts the plagiarism check (status becomes: processing).</p>\n<p>After a few minutes, the plagiarism check document becomes available (under Report). This should be examined thoroughly, downloaded and saved to the SURFDRIVE folder above. A percentage above about 15% is cause for concern.</p>\n</div>\n</div>\n<div class=\"section\" id=\"pre-screening\">\n<h2>Pre-screening<a class=\"headerlink\" href=\"#pre-screening\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"assignments\">\n<h3>Assignments<a class=\"headerlink\" href=\"#assignments\" title=\"Permalink to this headline\">\u00b6</a></h3>\n</div>\n</div>\n<div class=\"section\" id=\"during-refereeing\">\n<h2>During refereeing<a class=\"headerlink\" href=\"#during-refereeing\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<div class=\"section\" id=\"compliance-with-crossref-doi-requirements\">\n<h3>Compliance with Crossref DOI requirements<a class=\"headerlink\" href=\"#compliance-with-crossref-doi-requirements\" title=\"Permalink to this headline\">\u00b6</a></h3>\n<p>If the Submission&#8217;s references are not properly formatted,\nand/or if these do not include the required DOIs,\nthe authors should be asked to do so in their eventual\nresubmission.</p>\n</div>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial/production", "Production", "N", "next"], ["guides/editorial", "Editorial", "P", "previous"]], "title": "Submission processing"}
\ No newline at end of file
diff --git a/docs/users/_build/json/guides/referees.fjson b/docs/users/_build/json/guides/referees.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..302966abf11173239cb5525a12ed061eeeb2d9f0
--- /dev/null
+++ b/docs/users/_build/json/guides/referees.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../editorial/", "title": "Editorial"}, "prev": {"link": "../authors/", "title": "Authoring"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Refereeing</a><ul>\n<li><a class=\"reference internal\" href=\"#good-citizenship-as-a-referee\">Good citizenship as a referee</a></li>\n<li><a class=\"reference internal\" href=\"#the-characteristics-of-a-high-quality-report\">The characteristics of a high-quality report</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "guides/referees.txt", "current_page_name": "guides/referees", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../", "title": "Guides"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"refereeing\">\n<h1>Refereeing<a class=\"headerlink\" href=\"#refereeing\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This guide is meant for <strong>referees</strong>. It describes how to do an optimal job when writing reports on SciPost submissions.</p>\n<div class=\"section\" id=\"good-citizenship-as-a-referee\">\n<h2>Good citizenship as a referee<a class=\"headerlink\" href=\"#good-citizenship-as-a-referee\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Promptly responding to a refereeing invitation.</li>\n<li>Submitting your report by the deadline.</li>\n<li>Writing a high-quality report</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"the-characteristics-of-a-high-quality-report\">\n<h2>The characteristics of a high-quality report<a class=\"headerlink\" href=\"#the-characteristics-of-a-high-quality-report\" title=\"Permalink to this headline\">\u00b6</a></h2>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides/editorial", "Editorial", "N", "next"], ["guides/authors", "Authoring", "P", "previous"]], "title": "Refereeing"}
\ No newline at end of file
diff --git a/docs/users/_build/json/index.fjson b/docs/users/_build/json/index.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..5cb8e8b14d98ef9cc402b8edbc054fa1c44ab357
--- /dev/null
+++ b/docs/users/_build/json/index.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "roles/", "title": "Roles: responsibilities and task lists"}, "prev": null, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Welcome to SciPost&#8217;s documentation</a></li>\n<li><a class=\"reference internal\" href=\"#indices-and-tables\">Indices and tables</a></li>\n</ul>\n", "sourcename": "index.txt", "current_page_name": "index", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"welcome-to-scipost-s-documentation\">\n<h1>Welcome to SciPost&#8217;s documentation<a class=\"headerlink\" href=\"#welcome-to-scipost-s-documentation\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>Contents:</p>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"roles/\">Roles: responsibilities and task lists</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/editorial/\">Editorial roles</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"roles/production/\">Production roles</a></li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"guides/\">Guides</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/authors/\">Authoring</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/referees/\">Refereeing</a></li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"guides/editorial/\">Editorial</a></li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n<div class=\"section\" id=\"indices-and-tables\">\n<h1>Indices and tables<a class=\"headerlink\" href=\"#indices-and-tables\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<ul class=\"simple\">\n<li><a class=\"reference internal\" href=\"genindex/\"><span class=\"std std-ref\">Index</span></a></li>\n<li><a class=\"reference internal\" href=\"py-modindex/\"><span class=\"std std-ref\">Module Index</span></a></li>\n<li><a class=\"reference internal\" href=\"search/\"><span class=\"std std-ref\">Search Page</span></a></li>\n</ul>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles", "Roles: responsibilities and task lists", "N", "next"]], "title": "Welcome to SciPost&#8217;s documentation"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles.fjson b/docs/users/_build/json/roles.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..26d341433accf9fe11b02a038e619c8af4e8281d
--- /dev/null
+++ b/docs/users/_build/json/roles.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "editorial/", "title": "Editorial roles"}, "prev": {"link": "../", "title": "Welcome to SciPost&#8217;s documentation"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Roles: responsibilities and task lists</a></li>\n</ul>\n", "sourcename": "roles.txt", "current_page_name": "roles", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"roles-responsibilities-and-task-lists\">\n<h1>Roles: responsibilities and task lists<a class=\"headerlink\" href=\"#roles-responsibilities-and-task-lists\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial/\">Editorial roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"editorial/editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production/\">Production roles</a><ul>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_supervisors/\">Production Supervisors</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#responsibilities\">Responsibilities</a></li>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_supervisors/#tasks\">Tasks</a></li>\n</ul>\n</li>\n<li class=\"toctree-l2\"><a class=\"reference internal\" href=\"production/production_officers/\">Production Officers</a><ul>\n<li class=\"toctree-l3\"><a class=\"reference internal\" href=\"production/production_officers/#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial", "Editorial roles", "N", "next"], ["index", "Welcome to SciPost&#8217;s documentation", "P", "previous"]], "title": "Roles: responsibilities and task lists"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial.fjson b/docs/users/_build/json/roles/editorial.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..d47aeab3aa41b3a4dc549f8b1c1217e99662dbdd
--- /dev/null
+++ b/docs/users/_build/json/roles/editorial.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "editorial_administrators/", "title": "Editorial Administrators"}, "prev": {"link": "../", "title": "Roles: responsibilities and task lists"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial roles</a></li>\n</ul>\n", "sourcename": "roles/editorial.txt", "current_page_name": "roles/editorial", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-roles\">\n<h1>Editorial roles<a class=\"headerlink\" href=\"#editorial-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_administrators/\">Editorial Administrators</a><ul class=\"simple\">\n</ul>\n</li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"editorial_fellows/\">Editorial Fellows</a><ul class=\"simple\">\n</ul>\n</li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "N", "next"], ["roles", "Roles: responsibilities and task lists", "P", "previous"]], "title": "Editorial roles"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial/editorial_administrators.fjson b/docs/users/_build/json/roles/editorial/editorial_administrators.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..a74d79f728d77be6c8c15ca07e92a01ba7da2c39
--- /dev/null
+++ b/docs/users/_build/json/roles/editorial/editorial_administrators.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../editorial_fellows/", "title": "Editorial Fellows"}, "prev": {"link": "../", "title": "Editorial roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Administrators</a></li>\n</ul>\n", "sourcename": "roles/editorial/editorial_administrators.txt", "current_page_name": "roles/editorial/editorial_administrators", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-administrators\">\n<h1>Editorial Administrators<a class=\"headerlink\" href=\"#editorial-administrators\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "N", "next"], ["roles/editorial", "Editorial roles", "P", "previous"]], "title": "Editorial Administrators"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/editorial/editorial_fellows.fjson b/docs/users/_build/json/roles/editorial/editorial_fellows.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..9b2da1cbb6f02046abedea9d92eb74de8e2a3b4e
--- /dev/null
+++ b/docs/users/_build/json/roles/editorial/editorial_fellows.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../../production/", "title": "Production roles"}, "prev": {"link": "../editorial_administrators/", "title": "Editorial Administrators"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Editorial Fellows</a></li>\n</ul>\n", "sourcename": "roles/editorial/editorial_fellows.txt", "current_page_name": "roles/editorial/editorial_fellows", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Editorial roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"editorial-fellows\">\n<h1>Editorial Fellows<a class=\"headerlink\" href=\"#editorial-fellows\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production", "Production roles", "N", "next"], ["roles/editorial/editorial_administrators", "Editorial Administrators", "P", "previous"]], "title": "Editorial Fellows"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production.fjson b/docs/users/_build/json/roles/production.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..163bb326fb3e4e97c479ff07815de91aebfc218d
--- /dev/null
+++ b/docs/users/_build/json/roles/production.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "production_supervisors/", "title": "Production Supervisors"}, "prev": {"link": "../editorial/editorial_fellows/", "title": "Editorial Fellows"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production roles</a></li>\n</ul>\n", "sourcename": "roles/production.txt", "current_page_name": "roles/production", "metatags": "", "sidebars": null, "display_toc": false, "customsidebar": null, "parents": [{"link": "../", "title": "Roles: responsibilities and task lists"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-roles\">\n<h1>Production roles<a class=\"headerlink\" href=\"#production-roles\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<div class=\"toctree-wrapper compound\">\n<ul>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_supervisors/\">Production Supervisors</a></li>\n<li class=\"toctree-l1\"><a class=\"reference internal\" href=\"production_officers/\">Production Officers</a></li>\n</ul>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_supervisors", "Production Supervisors", "N", "next"], ["roles/editorial/editorial_fellows", "Editorial Fellows", "P", "previous"]], "title": "Production roles"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production/production_officers.fjson b/docs/users/_build/json/roles/production/production_officers.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..53e6aa9a4591a120fc521dc4c39e1607aae38721
--- /dev/null
+++ b/docs/users/_build/json/roles/production/production_officers.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../../../guides/", "title": "Guides"}, "prev": {"link": "../production_supervisors/", "title": "Production Supervisors"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Officers</a><ul>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "roles/production/production_officers.txt", "current_page_name": "roles/production/production_officers", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-officers\">\n<h1>Production Officers<a class=\"headerlink\" href=\"#production-officers\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Officers</strong>.</p>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Upon being assigned a production stream, produce the first version of the proofs following the <a class=\"reference internal\" href=\"../../../guides/editorial/production/initial_production/#initial-production\"><span class=\"std std-ref\">initial production instructions</span></a>.</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["guides", "Guides", "N", "next"], ["roles/production/production_supervisors", "Production Supervisors", "P", "previous"]], "title": "Production Officers"}
\ No newline at end of file
diff --git a/docs/users/_build/json/roles/production/production_supervisors.fjson b/docs/users/_build/json/roles/production/production_supervisors.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..ac2c69c597c0cbc00663d5c89fdd2b0be6c94857
--- /dev/null
+++ b/docs/users/_build/json/roles/production/production_supervisors.fjson
@@ -0,0 +1 @@
+{"page_source_suffix": ".rst", "next": {"link": "../production_officers/", "title": "Production Officers"}, "prev": {"link": "../", "title": "Production roles"}, "toc": "<ul>\n<li><a class=\"reference internal\" href=\"#\">Production Supervisors</a><ul>\n<li><a class=\"reference internal\" href=\"#responsibilities\">Responsibilities</a></li>\n<li><a class=\"reference internal\" href=\"#tasks\">Tasks</a></li>\n</ul>\n</li>\n</ul>\n", "sourcename": "roles/production/production_supervisors.txt", "current_page_name": "roles/production/production_supervisors", "metatags": "", "sidebars": null, "display_toc": true, "customsidebar": null, "parents": [{"link": "../../", "title": "Roles: responsibilities and task lists"}, {"link": "../", "title": "Production roles"}], "alabaster_version": "0.7.10", "body": "<div class=\"section\" id=\"production-supervisors\">\n<h1>Production Supervisors<a class=\"headerlink\" href=\"#production-supervisors\" title=\"Permalink to this headline\">\u00b6</a></h1>\n<p>This document describes the roles of <strong>Production Supervisors</strong>.</p>\n<div class=\"section\" id=\"responsibilities\">\n<h2>Responsibilities<a class=\"headerlink\" href=\"#responsibilities\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Ensuring the efficiency of the production workflow</li>\n<li>Supervising the work of the production team</li>\n<li>Training new Production Officers</li>\n</ul>\n</div></blockquote>\n</div>\n<div class=\"section\" id=\"tasks\">\n<h2>Tasks<a class=\"headerlink\" href=\"#tasks\" title=\"Permalink to this headline\">\u00b6</a></h2>\n<blockquote>\n<div><ul class=\"simple\">\n<li>Assign new production streams to Production Officers</li>\n<li>Check proofs produced by Production Officers</li>\n<li>Monitor the workflow of Production Officers</li>\n<li>Report back to EdAdmin on any problems with the workflow</li>\n</ul>\n</div></blockquote>\n</div>\n</div>\n", "meta": {}, "rellinks": [["genindex", "General Index", "I", "index"], ["roles/production/production_officers", "Production Officers", "N", "next"], ["roles/production", "Production roles", "P", "previous"]], "title": "Production Supervisors"}
\ No newline at end of file
diff --git a/docs/users/_build/json/search.fjson b/docs/users/_build/json/search.fjson
new file mode 100644
index 0000000000000000000000000000000000000000..6693b05003ebad248eed6ee1b3de379d6c408249
--- /dev/null
+++ b/docs/users/_build/json/search.fjson
@@ -0,0 +1 @@
+{"current_page_name": "search", "alabaster_version": "0.7.10", "sidebars": null, "customsidebar": null}
\ No newline at end of file
diff --git a/docs/users/conf.py b/docs/users/conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..fae7b4af58bf57362a6b30fee930640d3448a086
--- /dev/null
+++ b/docs/users/conf.py
@@ -0,0 +1,302 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+#
+# SciPost documentation build configuration file, created by
+# sphinx-quickstart on Fri Nov 25 11:01:13 2016.
+#
+# This file is execfile()d with the current directory set to its
+# containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+import shlex
+import django
+from django.conf import settings
+
+sys.path.insert(0, os.path.abspath('../..'))
+
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "SciPost_v1.settings")
+
+#settings.configure()
+django.setup()
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- General configuration ------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+    'sphinx.ext.autodoc',
+    'sphinx.ext.todo',
+    'sphinx.ext.coverage',
+    'sphinx.ext.mathjax',
+    'sphinx.ext.viewcode',
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = 'SciPost'
+copyright = '2016, Jean-Sébastien Caux'
+author = 'Jean-Sébastien Caux'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '1.0'
+# The full version, including alpha/beta/rc tags.
+release = '1.0'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all
+# documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+# If true, keep warnings as "system message" paragraphs in the built documents.
+#keep_warnings = False
+
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = True
+
+
+# -- Options for HTML output ----------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+# html_theme = 'alabaster'
+html_theme = 'sphinx_rtd_theme'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['../_static']
+
+# Add any extra paths that contain custom files (such as robots.txt or
+# .htaccess) here, relative to this directory. These files are copied
+# directly to the root of the documentation.
+#html_extra_path = []
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Language to be used for generating the HTML full-text search index.
+# Sphinx supports the following languages:
+#   'da', 'de', 'en', 'es', 'fi', 'fr', 'h', 'it', 'ja'
+#   'nl', 'no', 'pt', 'ro', 'r', 'sv', 'tr'
+#html_search_language = 'en'
+
+# A dictionary with options for the search language support, empty by default.
+# Now only 'ja' uses this config value
+#html_search_options = {'type': 'default'}
+
+# The name of a javascript file (relative to the configuration directory) that
+# implements a search results scorer. If empty, the default will be used.
+#html_search_scorer = 'scorer.js'
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'SciPostUsersdoc'
+
+# -- Options for LaTeX output ---------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+
+# Latex figure (float) alignment
+#'figure_align': 'htbp',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
+latex_documents = [
+  (master_doc, 'SciPost_Users.tex', 'SciPost Users Documentation',
+   'Jean-Sébastien Caux', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output ---------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    (master_doc, 'scipost users', 'SciPost Users Documentation',
+     [author], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output -------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  (master_doc, 'SciPost users', 'SciPost Users Documentation',
+   author, 'SciPost', 'One line description of project.',
+   'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'
+
+# If true, do not generate a @detailmenu in the "Top" node's menu.
+#texinfo_no_detailmenu = False
diff --git a/docs/users/guides.rst b/docs/users/guides.rst
new file mode 100644
index 0000000000000000000000000000000000000000..0d82f081b2cff1acacfb9cdea8584bf963b5e322
--- /dev/null
+++ b/docs/users/guides.rst
@@ -0,0 +1,10 @@
+Guides
+======
+
+
+.. toctree::
+   :maxdepth: 2
+
+   guides/authors
+   guides/referees
+   guides/editorial
diff --git a/docs/users/guides/authors.rst b/docs/users/guides/authors.rst
new file mode 100644
index 0000000000000000000000000000000000000000..ee3d6110c650ec8107b14eaf630807ad85830802
--- /dev/null
+++ b/docs/users/guides/authors.rst
@@ -0,0 +1,8 @@
+Authoring
+=========
+
+This guide is meant for **authors** of submissions and publications.
+
+
+Preparing your manuscript
+-------------------------
diff --git a/docs/users/guides/editorial.rst b/docs/users/guides/editorial.rst
new file mode 100644
index 0000000000000000000000000000000000000000..da3ee23fff6e4adbbfedf1915a0e21c71e49b05f
--- /dev/null
+++ b/docs/users/guides/editorial.rst
@@ -0,0 +1,10 @@
+Editorial
+=========
+
+
+.. toctree::
+   :maxdepth: 2
+
+   editorial/submissions_processing
+   editorial/production
+   editorial/maintenance
diff --git a/docs/guides/maintenance/maintenance/maintenance.rst b/docs/users/guides/editorial/maintenance.rst
similarity index 100%
rename from docs/guides/maintenance/maintenance/maintenance.rst
rename to docs/users/guides/editorial/maintenance.rst
diff --git a/docs/users/guides/editorial/production.rst b/docs/users/guides/editorial/production.rst
new file mode 100644
index 0000000000000000000000000000000000000000..752ff9c0e75ae59ff83e1abc94a584bb8069ac72
--- /dev/null
+++ b/docs/users/guides/editorial/production.rst
@@ -0,0 +1,10 @@
+Production
+==========
+
+
+.. toctree::
+   :maxdepth: 2
+
+   production/initial_production
+   production/proofs
+   production/online_publication
diff --git a/docs/guides/production/initial_production/initial_production.rst b/docs/users/guides/editorial/production/initial_production.rst
similarity index 98%
rename from docs/guides/production/initial_production/initial_production.rst
rename to docs/users/guides/editorial/production/initial_production.rst
index 937068f30fb0171264f45ed703b16aaca525c3b9..db4e7ddaee2de96a0b748d88ca6069ac5750c8f7 100644
--- a/docs/guides/production/initial_production/initial_production.rst
+++ b/docs/users/guides/editorial/production/initial_production.rst
@@ -1,7 +1,9 @@
 .. Howto for publication production
 
-Production of SciPost Publications
-==================================
+.. _initial_production:
+
+Initial Production of SciPost Publications
+==========================================
 
 This guide is meant for **Editorial Administrators**, **Production Supervisors** and **Production Officers**. It describes the post-acceptance workflow from paper acceptance to publication.
 
@@ -159,6 +161,8 @@ Step-by-step procedure
       and should be in textbf. No ``comma`` but rather an ``and`` before
       the last author. If multiple authors and affiliations, use ``\textsuperscript``
       and positive integer labels, with a ``$\star$`` for the corresponding author.
+      If all authors are from the same institution, there is no need for superscripts
+      (except to mark the corresponding author if desired).
       If multiple email addresses are given, reference them with ``$\dagger$, ...``.
 
 
diff --git a/docs/guides/production/online_publication/online_publication.rst b/docs/users/guides/editorial/production/online_publication.rst
similarity index 97%
rename from docs/guides/production/online_publication/online_publication.rst
rename to docs/users/guides/editorial/production/online_publication.rst
index 92c29b6ef4609e75843f1ed61bd4ddfa9ae5be91..b190db227756fa26f3e93fb0fd0f0885a7f1fcbc 100644
--- a/docs/guides/production/online_publication/online_publication.rst
+++ b/docs/users/guides/editorial/production/online_publication.rst
@@ -11,7 +11,7 @@ Version: 2017-05-11.
 Finalization of manuscript production
 -------------------------------------
 
-The steps described here follow up on the :doc:`production` instructions used by production officers.
+The steps described here follow up on the :doc:`../production/initial_production` instructions used by production officers.
 
 
 Preparation of final version of record
diff --git a/docs/guides/production/proofs/proofs.rst b/docs/users/guides/editorial/production/proofs.rst
similarity index 100%
rename from docs/guides/production/proofs/proofs.rst
rename to docs/users/guides/editorial/production/proofs.rst
diff --git a/docs/guides/submissions_processing/submissions_processing.rst b/docs/users/guides/editorial/submissions_processing.rst
similarity index 100%
rename from docs/guides/submissions_processing/submissions_processing.rst
rename to docs/users/guides/editorial/submissions_processing.rst
diff --git a/docs/users/guides/referees.rst b/docs/users/guides/referees.rst
new file mode 100644
index 0000000000000000000000000000000000000000..3c2f4012678982d4b07ac555e51e6364b9363f50
--- /dev/null
+++ b/docs/users/guides/referees.rst
@@ -0,0 +1,19 @@
+Refereeing
+==========
+
+This guide is meant for **referees**. It describes how to do an optimal job when writing reports on SciPost submissions.
+
+
+Good citizenship as a referee
+-----------------------------
+
+   * Promptly responding to a refereeing invitation.
+
+   * Submitting your report by the deadline.
+
+   * Writing a high-quality report
+
+
+
+The characteristics of a high-quality report
+--------------------------------------------
diff --git a/docs/index.rst b/docs/users/index.rst
similarity index 73%
rename from docs/index.rst
rename to docs/users/index.rst
index a7922f3d586c4b8d1aa354b6ea660c1f1564ae5c..3053a37cb65c6e0ddb0bbc501def50f7f58a0f90 100644
--- a/docs/index.rst
+++ b/docs/users/index.rst
@@ -3,17 +3,16 @@
    You can adapt this file completely to your liking, but it should at least
    contain the root `toctree` directive.
 
-Welcome to SciPost's documentation!
-===================================
+Welcome to SciPost's documentation
+==================================
 
 Contents:
 
 .. toctree::
    :maxdepth: 2
 
-   roles/roles
-   guides/guides
-   developers/developers
+   roles
+   guides
 
 
 Indices and tables
diff --git a/docs/users/roles.rst b/docs/users/roles.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9ee3d9b776d5a3c6962ce9b45958f8c90459ac60
--- /dev/null
+++ b/docs/users/roles.rst
@@ -0,0 +1,9 @@
+Roles: responsibilities and task lists
+======================================
+
+
+.. toctree::
+   :maxdepth: 3
+
+   roles/editorial
+   roles/production
diff --git a/docs/users/roles/editorial.rst b/docs/users/roles/editorial.rst
new file mode 100644
index 0000000000000000000000000000000000000000..cfa655219fd7ad2e6fbb5c071998ccf46e409de5
--- /dev/null
+++ b/docs/users/roles/editorial.rst
@@ -0,0 +1,9 @@
+Editorial roles
+===============
+
+
+.. toctree::
+   :maxdepth: 3
+
+   editorial/editorial_administrators
+   editorial/editorial_fellows
diff --git a/docs/roles/editorial/editorial_administrators.rst b/docs/users/roles/editorial/editorial_administrators.rst
similarity index 100%
rename from docs/roles/editorial/editorial_administrators.rst
rename to docs/users/roles/editorial/editorial_administrators.rst
diff --git a/docs/roles/editorial/editorial_fellows.rst b/docs/users/roles/editorial/editorial_fellows.rst
similarity index 100%
rename from docs/roles/editorial/editorial_fellows.rst
rename to docs/users/roles/editorial/editorial_fellows.rst
diff --git a/docs/users/roles/production.rst b/docs/users/roles/production.rst
new file mode 100644
index 0000000000000000000000000000000000000000..e935976df5a41428183f2d63a8f12fe11817db4c
--- /dev/null
+++ b/docs/users/roles/production.rst
@@ -0,0 +1,9 @@
+Production roles
+================
+
+
+.. toctree::
+   :maxdepth: 1
+
+   production/production_supervisors
+   production/production_officers
diff --git a/docs/users/roles/production/production_officers.rst b/docs/users/roles/production/production_officers.rst
new file mode 100644
index 0000000000000000000000000000000000000000..95a69c37640d688cbbd36c6bc6a840878677eb31
--- /dev/null
+++ b/docs/users/roles/production/production_officers.rst
@@ -0,0 +1,12 @@
+Production Officers
+===================
+
+
+This document describes the roles of **Production Officers**.
+
+
+
+Tasks
+-----
+
+   * Upon being assigned a production stream, produce the first version of the proofs following the :ref:`initial production instructions <initial_production>`.
diff --git a/docs/users/roles/production/production_supervisors.rst b/docs/users/roles/production/production_supervisors.rst
new file mode 100644
index 0000000000000000000000000000000000000000..8fb467e09935d058a266f1ea03efba6c763ce25e
--- /dev/null
+++ b/docs/users/roles/production/production_supervisors.rst
@@ -0,0 +1,22 @@
+Production Supervisors
+======================
+
+
+This document describes the roles of **Production Supervisors**.
+
+
+Responsibilities
+----------------
+
+   * Ensuring the efficiency of the production workflow
+   * Supervising the work of the production team
+   * Training new Production Officers
+
+
+Tasks
+-----
+
+   * Assign new production streams to Production Officers
+   * Check proofs produced by Production Officers
+   * Monitor the workflow of Production Officers
+   * Report back to EdAdmin on any problems with the workflow
diff --git a/finances/admin.py b/finances/admin.py
index d8d4d52c35c2131bf14a5313cff84015f49881a7..effd61f1080b9a1c58cf789ad3aa77ad9c07f87a 100644
--- a/finances/admin.py
+++ b/finances/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import WorkLog
diff --git a/finances/apps.py b/finances/apps.py
index 4a1db0117b5f1f8dca3c5ba77a8b9c55a9201f34..7f45c1d72f49a6d86062c10c06e732eabaebc561 100644
--- a/finances/apps.py
+++ b/finances/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/finances/forms.py b/finances/forms.py
index e22deb07cd4ef89aac3635138a0f14791dcd690e..395298a1a813c722f9ee7efea7b5f5805d248449 100644
--- a/finances/forms.py
+++ b/finances/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.contrib.auth import get_user_model
 from django.utils.dates import MONTHS
diff --git a/finances/models.py b/finances/models.py
index 3982eb14a3e5b0536d504ba4ef13ffa4103d95a6..1343616c535be0cc03bd555f255164864a72a15b 100644
--- a/finances/models.py
+++ b/finances/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.fields import GenericForeignKey
diff --git a/finances/tests.py b/finances/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/finances/tests.py
+++ b/finances/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/finances/urls.py b/finances/urls.py
index 80346704ba12068b5150c4005395c29c3111effd..7299cbd1ee55d9619e8a4abd7df0b93cf70769bb 100644
--- a/finances/urls.py
+++ b/finances/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/finances/utils.py b/finances/utils.py
index b7edcfab36651b6f6948eb299393963c27473d2e..b44359cb9f3992823efcbd015a19acd385add759 100644
--- a/finances/utils.py
+++ b/finances/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 
 def id_to_slug(id):
     return max(0, int(id) + 821)
diff --git a/finances/views.py b/finances/views.py
index 649259a247f5feddb003dabfff9fae60aa02486f..34123e7e256a0244aea236a9657143e46fc6f965 100644
--- a/finances/views.py
+++ b/finances/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
 from django.contrib.auth.mixins import LoginRequiredMixin
diff --git a/funders/admin.py b/funders/admin.py
index d049c6c0f9c56085ce4857538938ef681b322d2a..bdcadfdad35b2734063fefe7eff536afb213e68c 100644
--- a/funders/admin.py
+++ b/funders/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Funder, Grant
diff --git a/funders/apps.py b/funders/apps.py
index 413a2e31ce19ca0141ad1185bba7b99059676c38..97a8fa2d2e0867bd5067419e2e80a346ab6e92db 100644
--- a/funders/apps.py
+++ b/funders/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/funders/forms.py b/funders/forms.py
index b7db43fcb0ecb60b2ed0e9e8ebb0e3afacc2b6fb..ce80aab174168c89c6421f527c6f787f4e4104f9 100644
--- a/funders/forms.py
+++ b/funders/forms.py
@@ -1,7 +1,12 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 
 from .models import Funder, Grant
 
+from scipost.forms import HttpRefererFormMixin
 from scipost.models import Contributor
 
 
@@ -12,24 +17,24 @@ class FunderRegistrySearchForm(forms.Form):
 class FunderForm(forms.ModelForm):
     class Meta:
         model = Funder
-        fields = ['name', 'acronym', 'identifier',]
+        fields = ['name', 'acronym', 'identifier']
 
 
 class FunderSelectForm(forms.Form):
     funder = forms.ModelChoiceField(queryset=Funder.objects.all())
 
 
-class GrantForm(forms.ModelForm):
+class GrantForm(HttpRefererFormMixin, forms.ModelForm):
     class Meta:
         model = Grant
         fields = ['funder', 'number', 'recipient_name', 'recipient', 'further_details']
 
     def __init__(self, *args, **kwargs):
-        super(GrantForm, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self.fields['recipient'] = forms.ModelChoiceField(
-            queryset=Contributor.objects.all().order_by('user__last_name'),
+            queryset=Contributor.objects.select_related('user').order_by('user__last_name'),
             required=False)
 
 
 class GrantSelectForm(forms.Form):
-    grant = forms.ModelChoiceField(queryset=Grant.objects.all())
+    grant = forms.ModelChoiceField(queryset=Grant.objects.all().select_related('funder'))
diff --git a/funders/models.py b/funders/models.py
index 828d275f9751206067c9ac07bd80f9472f9d970b..93410a0fe07f5e281309e0bcb32e8c84cfe761b6 100644
--- a/funders/models.py
+++ b/funders/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.db.models import Q
 from django.urls import reverse
diff --git a/funders/templates/funders/funders.html b/funders/templates/funders/funders.html
index e3a3d70d3a27733024f34670ef93f192efdf83b7..0ab70cf7f9e3769407ee16b5fbf14ef0765ac7d9 100644
--- a/funders/templates/funders/funders.html
+++ b/funders/templates/funders/funders.html
@@ -19,10 +19,10 @@
             <div class="tab-nav-inner">
                 <!-- Nav tabs -->
                 <ul class="nav btn-group personal-page-nav" role="tablist">
-                  <li class="nav-item btn btn-secondary">
+                  <li class="nav-item btn btn-outline-secondary">
                     <a href="#funders" class="nav-link active" data-toggle="tab">Funders</a>
                   </li>
-                  <li class="nav-item btn btn-secondary">
+                  <li class="nav-item btn btn-outline-secondary">
                     <a href="#grants" class="nav-link" data-toggle="tab">Grants</a>
                   </li>
                 </ul>
@@ -49,7 +49,7 @@
         <form action="{% url 'funders:query_crossref_for_funder' %}" method="post">
           {% csrf_token %}
           {{form|bootstrap}}
-          <input class="btn btn-secondary" type="submit" value="Search">
+          <input class="btn btn-outline-secondary" type="submit" value="Search">
         </form>
 	<br/>
 	<h2>Funders in the SciPost database</h2>
@@ -96,7 +96,7 @@
         <form action="{% url 'funders:add_grant' %}" method="post">
           {% csrf_token %}
           {{grant_form|bootstrap}}
-          <input class="btn btn-secondary" type="submit" value="Add">
+          <input class="btn btn-outline-secondary" type="submit" value="Add">
         </form>
 	<br/>
 	<h2>Grants in the SciPost database</h2>
diff --git a/funders/templates/funders/grant_form.html b/funders/templates/funders/grant_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..65f59883b8a8e2577796626395becace74bba7b2
--- /dev/null
+++ b/funders/templates/funders/grant_form.html
@@ -0,0 +1,25 @@
+{% extends 'scipost/base.html' %}
+
+{% block pagetitle %}: Create new Grant{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block content %}
+
+<div class="row">
+  <div class="col-12">
+        <h1 class="highlight">Create new Grant</h1>
+  </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <form method="post">
+          {% csrf_token %}
+          {{ form|bootstrap }}
+          <input class="btn btn-primary" type="submit" value="Submit">
+        </form>
+	</div>
+</div>
+
+{% endblock content %}
diff --git a/funders/templates/funders/query_crossref_for_funder.html b/funders/templates/funders/query_crossref_for_funder.html
index 35c1b9a7ee15dbe05d6c0dabdcad77b83ce9e30e..7387f76ae0055a13ab2e0109c31f78e7dca402c7 100644
--- a/funders/templates/funders/query_crossref_for_funder.html
+++ b/funders/templates/funders/query_crossref_for_funder.html
@@ -12,7 +12,7 @@
         <form action="{% url 'funders:query_crossref_for_funder' %}" method="post">
           {% csrf_token %}
           {{form|bootstrap}}
-          <input class="btn btn-secondary" type="submit" value="Search">
+          <input class="btn btn-outline-secondary" type="submit" value="Search">
         </form>
 	{% if response_headers %}
 	<p>{{ response_headers }}</p>
@@ -31,7 +31,7 @@
 	      <input name='name' style="width: 64%" value='{{ item.name }}'>
 	      <input name='acronym' style="width: 64%" placeholder='acronym (if known)'>
 	      <input name='identifier' style="width: 64%" value='{{ item.uri }}'>
-              <input class="btn btn-secondary" type="submit" value="Add this funder">
+              <input class="btn btn-outline-secondary" type="submit" value="Add this funder">
 	    </form>
 	  </li>
 	  {% endfor %}
@@ -39,7 +39,7 @@
 	<form action="{% url 'funders:add_funder' %}" method="post">
           {% csrf_token %}
           {{funder_form|bootstrap}}
-          <input class="btn btn-secondary" type="submit" value="Submit">
+          <input class="btn btn-outline-secondary" type="submit" value="Submit">
         </form>
 	{% endif %}
   </div>
diff --git a/funders/tests.py b/funders/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/funders/tests.py
+++ b/funders/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/funders/urls.py b/funders/urls.py
index 6766a095b6aead907943bc6f501317e76d1ce5ff..8ec6892cddbbc9a46582790535020b16c2f04190 100644
--- a/funders/urls.py
+++ b/funders/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
@@ -9,5 +13,5 @@ urlpatterns = [
     url(r'^add$', views.add_funder, name='add_funder'),
     url(r'^(?P<funder_id>[0-9]+)/$', views.funder_publications,
         name='funder_publications'),
-    url(r'^grants/add$', views.add_grant, name='add_grant'),
+    url(r'^grants/add$', views.CreateGrantView.as_view(), name='add_grant'),
 ]
diff --git a/funders/views.py b/funders/views.py
index b11b7a15baf0991b61bb864575f8d9e4a34a510f..5e04d384fe374d608c3fe868ce0255d17307527d 100644
--- a/funders/views.py
+++ b/funders/views.py
@@ -1,21 +1,30 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import requests
 import json
 
 from django.contrib import messages
 from django.contrib.auth.decorators import permission_required
-from django.core.urlresolvers import reverse
+from django.core.urlresolvers import reverse, reverse_lazy
+from django.db import transaction
+from django.utils.decorators import method_decorator
+from django.views.generic.edit import CreateView
 from django.shortcuts import get_object_or_404, render, redirect
 
 from .models import Funder, Grant
 from .forms import FunderRegistrySearchForm, FunderForm, GrantForm
 
+from scipost.mixins import PermissionsMixin
+
 
 @permission_required('scipost.can_view_all_funding_info', raise_exception=True)
 def funders(request):
     funders = Funder.objects.all()
     form = FunderRegistrySearchForm()
     grants = Grant.objects.all()
-    grant_form = GrantForm()
+    grant_form = GrantForm(request=request)
     context = {'form': form, 'funders': funders,
                'grants': grants, 'grant_form': grant_form}
     return render(request, 'funders/funders.html', context)
@@ -53,7 +62,6 @@ def add_funder(request):
     return redirect(reverse('funders:funders'))
 
 
-# @permission_required('scipost.can_view_all_funding_info', raise_exception=True)
 def funder_publications(request, funder_id):
     """
     See details of specific Funder (publicly accessible).
@@ -63,13 +71,24 @@ def funder_publications(request, funder_id):
     return render(request, 'funders/funder_details.html', context)
 
 
-@permission_required('scipost.can_view_all_funding_info', raise_exception=True)
-def add_grant(request):
-    grant_form = GrantForm(request.POST or None)
-    if grant_form.is_valid():
-        grant = grant_form.save()
-        messages.success(request, ('<h3>Grant %s successfully added</h3>') %
-                         str(grant))
-    elif grant_form.has_changed():
-        messages.warning(request, 'The form was invalidly filled (grant already exists?).')
-    return redirect(reverse('funders:funders'))
+class HttpRefererMixin:
+    def get_form_kwargs(self):
+        kwargs = super().get_form_kwargs()
+        kwargs['request'] = self.request
+        return kwargs
+
+    def form_valid(self, form):
+        if form.cleaned_data.get('http_referer'):
+            self.success_url = form.cleaned_data['http_referer']
+        return super().form_valid(form)
+
+
+@method_decorator(transaction.atomic, name='dispatch')
+class CreateGrantView(PermissionsMixin, HttpRefererMixin, CreateView):
+    """
+    Create a Grant in a separate window which may also be used by Production Supervisors.
+    """
+    permission_required = 'scipost.can_create_grants'
+    model = Grant
+    form_class = GrantForm
+    success_url = reverse_lazy('funders:funders')
diff --git a/invitations/__init__.py b/invitations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/invitations/admin.py b/invitations/admin.py
new file mode 100644
index 0000000000000000000000000000000000000000..068ed5f3598d9def5645964aa8ae308ec7d23f64
--- /dev/null
+++ b/invitations/admin.py
@@ -0,0 +1,28 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib import admin
+
+from .models import RegistrationInvitation, CitationNotification
+
+
+class RegistrationInvitationAdmin(admin.ModelAdmin):
+    date_hierarchy = 'date_sent_first'
+    search_fields = ['first_name', 'last_name', 'email', 'invitation_key']
+    list_display = ['__str__', 'invitation_type', 'invited_by', 'status']
+    list_filter = ['invitation_type', 'message_style', 'status']
+
+
+admin.site.register(RegistrationInvitation, RegistrationInvitationAdmin)
+
+
+class CitationNotificationAdmin(admin.ModelAdmin):
+    date_hierarchy = 'date_sent'
+    search_fields = ['invitation__first_name', 'invitation__last_name',
+                     'contributor__user__first_name', 'contributor__user__last_name']
+    list_display = ['__str__', 'created_by', 'date_sent', 'processed']
+    list_filter = ['processed']
+
+
+admin.site.register(CitationNotification, CitationNotificationAdmin)
diff --git a/invitations/apps.py b/invitations/apps.py
new file mode 100644
index 0000000000000000000000000000000000000000..84c57f234cb62b2ce9d2260e49f125eeb3883652
--- /dev/null
+++ b/invitations/apps.py
@@ -0,0 +1,9 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.apps import AppConfig
+
+
+class InvitationsConfig(AppConfig):
+    name = 'invitations'
diff --git a/invitations/constants.py b/invitations/constants.py
new file mode 100644
index 0000000000000000000000000000000000000000..6ab60c59d3e33d05723f2bc4778d9392ab736f7e
--- /dev/null
+++ b/invitations/constants.py
@@ -0,0 +1,28 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+STATUS_DRAFT, STATUS_SENT, STATUS_SENT_AND_EDITED = ('draft', 'sent', 'edited')
+STATUS_DECLINED, STATUS_REGISTERED = ('declined', 'register')
+REGISTATION_INVITATION_STATUSES = (
+    (STATUS_DRAFT, 'Draft'),
+    (STATUS_SENT, 'Sent'),
+    (STATUS_SENT_AND_EDITED, 'Sent and edited'),
+    (STATUS_DECLINED, 'Declined'),
+    (STATUS_REGISTERED, 'Registered'),
+)
+
+
+INVITATION_FORMAL, INVITATION_PERSONAL = ('F', 'P')
+INVITATION_STYLE = (
+    (INVITATION_FORMAL, 'Formal'),
+    (INVITATION_PERSONAL, 'Personal'),
+)
+
+
+INVITATION_EDITORIAL_FELLOW, INVITATION_CONTRIBUTOR, INVITATION_REFEREEING = ('F', 'C', 'R')
+INVITATION_TYPE = (
+    (INVITATION_EDITORIAL_FELLOW, 'Editorial Fellow'),
+    (INVITATION_CONTRIBUTOR, 'Contributor'),
+    (INVITATION_REFEREEING, 'Refereeing'),
+)
diff --git a/invitations/forms.py b/invitations/forms.py
new file mode 100644
index 0000000000000000000000000000000000000000..d3e299992bed5d5fbc0147f778647042e8389e41
--- /dev/null
+++ b/invitations/forms.py
@@ -0,0 +1,307 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django import forms
+from django.contrib import messages
+from django.db.models import Q
+
+from journals.models import Publication
+from scipost.models import Contributor
+from submissions.models import Submission
+
+from . import constants
+from .models import RegistrationInvitation, CitationNotification
+
+from ajax_select.fields import AutoCompleteSelectField, AutoCompleteSelectMultipleField
+
+
+class AcceptRequestMixin:
+    def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop('request')
+        super().__init__(*args, **kwargs)
+
+
+class RegistrationInvitationFilterForm(forms.Form):
+    term = forms.CharField(help_text="You may search on arXiv identifier, DOI or last name.")
+
+    def search(self, qs):
+        term = self.cleaned_data.get('term')
+        return qs.filter(
+            Q(last_name__icontains=term) |
+            Q(citation_notifications__submission__arxiv_identifier_w_vn_nr__icontains=term) |
+            Q(citation_notifications__publication__doi_label__icontains=term))
+
+
+class SuggestionSearchForm(forms.Form):
+    last_name = forms.CharField()
+
+    def search(self):
+        last_name = self.cleaned_data.get('last_name')
+
+        if last_name:
+            contributors = Contributor.objects.filter(user__last_name__icontains=last_name)
+            invitations = RegistrationInvitation.objects.filter(last_name__icontains=last_name)
+            declines = RegistrationInvitation.objects.declined().filter(
+                last_name__icontains=last_name)
+            return contributors, invitations, declines
+        return Contributor.objects.none(), RegistrationInvitation.objects.none()
+
+
+class CitationNotificationForm(AcceptRequestMixin, forms.ModelForm):
+    submission = AutoCompleteSelectField('submissions_lookup', required=False)
+    publication = AutoCompleteSelectField('publication_lookup', required=False)
+
+    class Meta:
+        model = CitationNotification
+        fields = (
+            'contributor',
+            'submission',
+            'publication')
+
+    def __init__(self, *args, **kwargs):
+        contributors = kwargs.pop('contributors')
+        super().__init__(*args, **kwargs)
+        if contributors:
+            self.fields['contributor'].queryset = contributors
+            self.fields['contributor'].empty_label = None
+        else:
+            self.fields['contributor'].queryset = Contributor.objects.none()
+
+    def clean(self, *args, **kwargs):
+        data = super().clean(*args, **kwargs)
+        if not data.get('submission') and not data.get('publication'):
+            self.add_error('submission', 'Either a Submission or Publication has to be filled out')
+            self.add_error('publication', 'Either a Submission or Publication has to be filled out')
+
+    def save(self, *args, **kwargs):
+        if not hasattr(self.instance, 'created_by'):
+            self.instance.created_by = self.request.user
+        return super().save(*args, **kwargs)
+
+
+class CitationNotificationProcessForm(AcceptRequestMixin, forms.ModelForm):
+    class Meta:
+        model = CitationNotification
+        fields = ()
+
+    def get_all_notifications(self):
+        return self.instance.related_notifications().unprocessed()
+
+
+class RegistrationInvitationAddCitationForm(AcceptRequestMixin, forms.ModelForm):
+    cited_in_submissions = AutoCompleteSelectMultipleField('submissions_lookup', required=False)
+    cited_in_publications = AutoCompleteSelectMultipleField('publication_lookup', required=False)
+
+    class Meta:
+        model = RegistrationInvitation
+        fields = ()
+
+    def save(self, *args, **kwargs):
+        if kwargs.get('commit', True):
+            updated = 0
+            # Save the Submission notifications
+            submissions = Submission.objects.filter(
+                id__in=self.cleaned_data['cited_in_submissions'])
+            for submission in submissions:
+                __, _updated = CitationNotification.objects.get_or_create(
+                    invitation=self.instance,
+                    submission=submission,
+                    defaults={'created_by': self.request.user})
+                updated += 1 if _updated else 0
+
+            # Save the Publication notifications
+            publications = Publication.objects.filter(
+                id__in=self.cleaned_data['cited_in_publications'])
+            for publication in publications:
+                __, _updated = CitationNotification.objects.get_or_create(
+                    invitation=self.instance,
+                    publication=publication,
+                    defaults={'created_by': self.request.user})
+                updated += 1 if _updated else 0
+            if updated > 0:
+                self.instance.status = constants.STATUS_SENT_AND_EDITED
+                self.instance.save()
+            messages.success(self.request, '{} Citation Notification(s) added.'.format(updated))
+        return self.instance
+
+
+class RegistrationInvitationMergeForm(AcceptRequestMixin, forms.ModelForm):
+    """Merge RegistrationInvitations.
+
+    This form will merge the instance with any other RegistrationInvitation selected
+    into a single RegistrationInvitation.
+    """
+
+    invitation = forms.ModelChoiceField(queryset=RegistrationInvitation.objects.none(),
+                                        label="Invitation to merge with")
+
+    class Meta:
+        model = RegistrationInvitation
+        fields = ()
+
+    def __init__(self, *args, **kwargs):
+        """Update queryset according to the passed instance."""
+        super().__init__(*args, **kwargs)
+        self.fields['invitation'].queryset = RegistrationInvitation.objects.no_response().filter(
+            last_name__icontains=self.instance.last_name).exclude(id=self.instance.id)
+
+    def save(self, *args, **kwargs):
+        """Merge the two RegistationInvitations into one."""
+        if kwargs.get('commit', True):
+            # Pick the right Invitation, with the most up-to-date invitation_key
+            selected_invitation = self.cleaned_data['invitation']
+            if not selected_invitation.date_sent_last:
+                # Selected Invitation has never been sent yet.
+                leading_invitation = self.instance
+                deprecated_invitation = selected_invitation
+            elif not self.instance.date_sent_last:
+                # Instance has never been sent yet.
+                leading_invitation = selected_invitation
+                deprecated_invitation = self.instance
+            elif selected_invitation.date_sent_last > self.instance.date_sent_last:
+                # Lastest reminder: selected Invitation
+                leading_invitation = selected_invitation
+                deprecated_invitation = self.instance
+            else:
+                # Lastest reminder: instance
+                leading_invitation = self.instance
+                deprecated_invitation = selected_invitation
+
+            # Move CitationNotification to the new leading Invitation
+            deprecated_invitation.citation_notifications.update(invitation=leading_invitation)
+            leading_invitation.times_sent += deprecated_invitation.times_sent   # Update counts
+            leading_invitation.save()
+
+            qs_contributor = deprecated_invitation.citation_notifications.filter(
+                contributor__isnull=False).values_list('contributor', flat=True)
+            if qs_contributor:
+                if not leading_invitation.citation_notifications.filter(contributor__isnull=False):
+                    # Contributor is already assigned in "old" RegistrationInvitation, copy it.
+                    leading_invitation.citation_notifications.filter(contributor=qs_contributor[0])
+
+            # Magic.
+            deprecated_invitation.delete()
+        return self.instance
+
+
+
+class RegistrationInvitationForm(AcceptRequestMixin, forms.ModelForm):
+    cited_in_submissions = AutoCompleteSelectMultipleField('submissions_lookup', required=False)
+    cited_in_publications = AutoCompleteSelectMultipleField('publication_lookup', required=False)
+
+    class Meta:
+        model = RegistrationInvitation
+        fields = (
+            'title',
+            'first_name',
+            'last_name',
+            'email',
+            'message_style',
+            'invitation_type',
+            'personal_message')
+
+    def __init__(self, *args, **kwargs):
+        # Find Submissions/Publications related to the invitation and fill the autocomplete fields
+        initial = kwargs.get('initial', {})
+        invitation = kwargs.get('instance', None)
+        if invitation:
+            submission_ids = invitation.citation_notifications.for_submissions().values_list(
+                'submission_id', flat=True)
+            publication_ids = invitation.citation_notifications.for_publications().values_list(
+                'publication_id', flat=True)
+            initial['cited_in_submissions'] = Submission.objects.filter(id__in=submission_ids)
+            initial['cited_in_publications'] = Publication.objects.filter(id__in=publication_ids)
+        kwargs['initial'] = initial
+        super().__init__(*args, **kwargs)
+        if not self.request.user.has_perm('scipost.can_manage_registration_invitations'):
+            del self.fields['message_style']
+            del self.fields['personal_message']
+        if not self.request.user.has_perm('scipost.can_invite_fellows'):
+            del self.fields['invitation_type']  # Only admins can invite fellows
+
+    def clean_email(self):
+        email = self.cleaned_data['email']
+        if Contributor.objects.filter(user__email=email).exists():
+            self.add_error('email', 'This email address is already associated to a Contributor')
+        elif RegistrationInvitation.objects.declined().filter(email=email).exists():
+            self.add_error('email', 'This person has already declined an earlier invitation')
+
+        return email
+
+    def save(self, *args, **kwargs):
+        if not hasattr(self.instance, 'created_by'):
+            self.instance.created_by = self.request.user
+        invitation = super().save(*args, **kwargs)
+        if kwargs.get('commit', True):
+            # Save the Submission notifications
+            submissions = Submission.objects.filter(
+                id__in=self.cleaned_data['cited_in_submissions'])
+            for submission in submissions:
+                CitationNotification.objects.get_or_create(
+                    invitation=self.instance,
+                    submission=submission,
+                    defaults={
+                        'created_by': self.instance.created_by
+                    })
+
+            # Save the Publication notifications
+            publications = Publication.objects.filter(
+                id__in=self.cleaned_data['cited_in_publications'])
+            for publication in publications:
+                CitationNotification.objects.get_or_create(
+                    invitation=self.instance,
+                    publication=publication,
+                    defaults={
+                        'created_by': self.instance.created_by
+                    })
+        return invitation
+
+
+class RegistrationInvitationReminderForm(AcceptRequestMixin, forms.ModelForm):
+    class Meta:
+        model = RegistrationInvitation
+        fields = ()
+
+    def save(self, *args, **kwargs):
+        if kwargs.get('commit', True):
+            self.instance.mail_sent()
+        return super().save(*args, **kwargs)
+
+
+class RegistrationInvitationMapToContributorForm(AcceptRequestMixin, forms.ModelForm):
+    contributor = None
+
+    class Meta:
+        model = RegistrationInvitation
+        fields = ()
+
+    def clean(self, *args, **kwargs):
+        try:
+            self.contributor = Contributor.objects.get(
+                id=self.request.resolver_match.kwargs['contributor_id'])
+        except Contributor.DoesNotExist:
+            self.add_error(None, 'Contributor does not exist.')
+        return {}
+
+    def get_contributor(self):
+        if not self.contributor:
+            self.clean()
+        return self.contributor
+
+    def save(self, *args, **kwargs):
+        if kwargs.get('commit', True):
+            self.instance.citation_notifications.update(contributor=self.contributor)
+            self.instance.delete()
+        return self.instance
+
+
+class RegistrationInvitationMarkForm(AcceptRequestMixin, forms.ModelForm):
+    class Meta:
+        model = RegistrationInvitation
+        fields = ()
+
+    def save(self, *args, **kwargs):
+        if kwargs.get('commit', True):
+            self.instance.mail_sent()
+        return self.instance
diff --git a/invitations/managers.py b/invitations/managers.py
new file mode 100644
index 0000000000000000000000000000000000000000..b388032a7933f2e560c3316c5c66afb679082592
--- /dev/null
+++ b/invitations/managers.py
@@ -0,0 +1,55 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.db import models
+
+from . import constants
+
+
+class RegistrationInvitationQuerySet(models.QuerySet):
+    def for_fellows(self):
+        return self.filter(invitation_type=constants.INVITATION_EDITORIAL_FELLOW)
+
+    def not_for_fellows(self):
+        return self.exclude(invitation_type=constants.INVITATION_EDITORIAL_FELLOW)
+
+    def declined(self):
+        return self.filter(status=constants.STATUS_DECLINED)
+
+    def drafts(self):
+        return self.filter(status=constants.STATUS_DRAFT)
+
+    def declined_or_without_response(self):
+        return self.filter(status__in=[constants.STATUS_DECLINED,
+                                       constants.STATUS_SENT,
+                                       constants.STATUS_DRAFT,
+                                       constants.STATUS_SENT_AND_EDITED])
+
+    def sent(self):
+        return self.filter(status__in=[constants.STATUS_SENT, constants.STATUS_SENT_AND_EDITED])
+
+    def no_response(self):
+        return self.filter(status__in=[constants.STATUS_SENT,
+                                       constants.STATUS_DRAFT,
+                                       constants.STATUS_SENT_AND_EDITED])
+
+    def invited_by(self, user):
+        return self.filter(invited_by=user)
+
+    def created_by(self, user):
+        return self.filter(created_by=user)
+
+
+class CitationNotificationQuerySet(models.QuerySet):
+    def for_submissions(self):
+        return self.filter(submission__isnull=False)
+
+    def for_publications(self):
+        return self.filter(publication__isnull=False)
+
+    def unprocessed(self):
+        return self.filter(processed=False)
+
+    def processed(self):
+        return self.filter(processed=False)
diff --git a/invitations/migrations/0001_initial.py b/invitations/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..4904ed6f19f62413c0dea8974ba27888b3cd1bb4
--- /dev/null
+++ b/invitations/migrations/0001_initial.py
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 12:48
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('submissions', '0008_auto_20180127_2208'),
+        ('journals', '0013_auto_20180216_0850'),
+        ('scipost', '0004_auto_20180212_1932'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='RegistrationInvitation',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('title', models.CharField(choices=[('PR', 'Prof.'), ('DR', 'Dr'), ('MR', 'Mr'), ('MRS', 'Mrs'), ('MS', 'Ms')], max_length=4)),
+                ('first_name', models.CharField(max_length=30)),
+                ('last_name', models.CharField(max_length=150)),
+                ('email', models.EmailField(max_length=254)),
+                ('status', models.CharField(choices=[('draft', 'Draft'), ('sent', 'Sent'), ('declined', 'Declined'), ('register', 'Registered')], default='draft', max_length=8)),
+                ('message_style', models.CharField(choices=[('F', 'Formal'), ('P', 'Personal')], default='F', max_length=1)),
+                ('personal_message', models.TextField(blank=True)),
+                ('invitation_type', models.CharField(choices=[('F', 'Editorial Fellow'), ('C', 'Contributor'), ('R', 'Refereeing')], default='C', max_length=2)),
+                ('invitation_key', models.CharField(max_length=40, unique=True)),
+                ('key_expires', models.DateTimeField(default=django.utils.timezone.now)),
+                ('date_sent_first', models.DateTimeField(default=django.utils.timezone.now)),
+                ('date_sent_last', models.DateTimeField(default=django.utils.timezone.now)),
+                ('number_of_reminders', models.PositiveSmallIntegerField(default=0)),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('modified', models.DateTimeField(auto_now=True)),
+                ('cited_in_publication', models.ManyToManyField(blank=True, related_name='_registrationinvitation_cited_in_publication_+', to='journals.Publication')),
+                ('cited_in_submission', models.ManyToManyField(blank=True, related_name='_registrationinvitation_cited_in_submission_+', to='submissions.Submission')),
+                ('invited_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='invitations_sent', to='scipost.Contributor')),
+            ],
+            options={
+                'ordering': ['last_name'],
+            },
+        ),
+    ]
diff --git a/invitations/migrations/0002_auto_20180217_1449.py b/invitations/migrations/0002_auto_20180217_1449.py
new file mode 100644
index 0000000000000000000000000000000000000000..1232fd833f8c4fb86ef6d42796f821e29c7a2d93
--- /dev/null
+++ b/invitations/migrations/0002_auto_20180217_1449.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 13:49
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='date_sent_first',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='date_sent_last',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+    ]
diff --git a/invitations/migrations/0003_auto_20180217_1510.py b/invitations/migrations/0003_auto_20180217_1510.py
new file mode 100644
index 0000000000000000000000000000000000000000..f637c0d2a5421fd839f1ca9becc7c8ec983f27f6
--- /dev/null
+++ b/invitations/migrations/0003_auto_20180217_1510.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 14:10
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0002_auto_20180217_1449'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='invited_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invitations_sent', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/invitations/migrations/0004_registrationinvitation_created_by.py b/invitations/migrations/0004_registrationinvitation_created_by.py
new file mode 100644
index 0000000000000000000000000000000000000000..637bb72f4d55bcd33d650874707945fe48019a5e
--- /dev/null
+++ b/invitations/migrations/0004_registrationinvitation_created_by.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 14:51
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('invitations', '0003_auto_20180217_1510'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='created_by',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invitations_created', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/invitations/migrations/0005_auto_20180217_1554.py b/invitations/migrations/0005_auto_20180217_1554.py
new file mode 100644
index 0000000000000000000000000000000000000000..e88a5f2347f686379859f89835eea73bf2636d6b
--- /dev/null
+++ b/invitations/migrations/0005_auto_20180217_1554.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 14:54
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0004_registrationinvitation_created_by'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='created_by',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='invitations_created', to=settings.AUTH_USER_MODEL),
+        ),
+    ]
diff --git a/invitations/migrations/0006_auto_20180217_1600.py b/invitations/migrations/0006_auto_20180217_1600.py
new file mode 100644
index 0000000000000000000000000000000000000000..d987c7dbe6de259709ae09005ebac2a38e390851
--- /dev/null
+++ b/invitations/migrations/0006_auto_20180217_1600.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-17 15:00
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0005_auto_20180217_1554'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='registrationinvitation',
+            old_name='number_of_reminders',
+            new_name='times_sent',
+        ),
+    ]
diff --git a/invitations/migrations/0007_auto_20180218_1200.py b/invitations/migrations/0007_auto_20180218_1200.py
new file mode 100644
index 0000000000000000000000000000000000000000..223d8fbb57806086568323a1fe6e2f72f653ddce
--- /dev/null
+++ b/invitations/migrations/0007_auto_20180218_1200.py
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-18 11:00
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0013_auto_20180216_0850'),
+        ('submissions', '0008_auto_20180127_2208'),
+        ('invitations', '0006_auto_20180217_1600'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='registrationinvitation',
+            name='cited_in_publication',
+        ),
+        migrations.RemoveField(
+            model_name='registrationinvitation',
+            name='cited_in_submission',
+        ),
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='cited_in_publications',
+            field=models.ManyToManyField(blank=True, related_name='_registrationinvitation_cited_in_publications_+', to='journals.Publication'),
+        ),
+        migrations.AddField(
+            model_name='registrationinvitation',
+            name='cited_in_submissions',
+            field=models.ManyToManyField(blank=True, related_name='_registrationinvitation_cited_in_submissions_+', to='submissions.Submission'),
+        ),
+    ]
diff --git a/invitations/migrations/0008_auto_20180218_1305.py b/invitations/migrations/0008_auto_20180218_1305.py
new file mode 100644
index 0000000000000000000000000000000000000000..d74f26c02b7c9411230ea18f421b156c4bfb4104
--- /dev/null
+++ b/invitations/migrations/0008_auto_20180218_1305.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-18 12:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0008_auto_20180127_2208'),
+        ('journals', '0013_auto_20180216_0850'),
+        ('scipost', '0004_auto_20180212_1932'),
+        ('invitations', '0007_auto_20180218_1200'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='CitationNotification',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('processed', models.BooleanField(default=False)),
+                ('cited_in_publication', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='journals.Publication')),
+                ('cited_in_submission', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='submissions.Submission')),
+                ('contributor', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='scipost.Contributor')),
+            ],
+            options={
+                'default_related_name': 'citation_notifications',
+            },
+        ),
+        migrations.RemoveField(
+            model_name='registrationinvitation',
+            name='cited_in_publications',
+        ),
+        migrations.RemoveField(
+            model_name='registrationinvitation',
+            name='cited_in_submissions',
+        ),
+        migrations.AddField(
+            model_name='citationnotification',
+            name='invitation',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='citation_notifications', to='invitations.RegistrationInvitation'),
+        ),
+    ]
diff --git a/invitations/migrations/0009_auto_20180218_1556.py b/invitations/migrations/0009_auto_20180218_1556.py
new file mode 100644
index 0000000000000000000000000000000000000000..a755f03d264593dc8191ba51b3293aa5c196dc3d
--- /dev/null
+++ b/invitations/migrations/0009_auto_20180218_1556.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-18 14:56
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0005_auto_20180218_1556'),
+        ('submissions', '0008_auto_20180127_2208'),
+        ('journals', '0013_auto_20180216_0850'),
+        ('invitations', '0008_auto_20180218_1305'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='citationnotification',
+            old_name='cited_in_publication',
+            new_name='publication',
+        ),
+        migrations.RenameField(
+            model_name='citationnotification',
+            old_name='cited_in_submission',
+            new_name='submission',
+        ),
+        migrations.AlterUniqueTogether(
+            name='citationnotification',
+            unique_together=set([('contributor', 'publication'), ('invitation', 'publication'), ('invitation', 'submission'), ('contributor', 'submission')]),
+        ),
+    ]
diff --git a/invitations/migrations/0010_auto_20180218_1613.py b/invitations/migrations/0010_auto_20180218_1613.py
new file mode 100644
index 0000000000000000000000000000000000000000..b002ed903b52c1e9422bbb2f04404376c1c2a665
--- /dev/null
+++ b/invitations/migrations/0010_auto_20180218_1613.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-18 15:13
+from __future__ import unicode_literals
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+import django.utils.timezone
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+        ('invitations', '0009_auto_20180218_1556'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='citationnotification',
+            name='created',
+            field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='citationnotification',
+            name='created_by',
+            field=models.ForeignKey(default=2, on_delete=django.db.models.deletion.CASCADE, related_name='notifications_created', to=settings.AUTH_USER_MODEL),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='citationnotification',
+            name='date_sent',
+            field=models.DateTimeField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='citationnotification',
+            name='modified',
+            field=models.DateTimeField(auto_now=True),
+        ),
+        migrations.AlterField(
+            model_name='citationnotification',
+            name='invitation',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='citation_notifications', to='invitations.RegistrationInvitation'),
+        ),
+    ]
diff --git a/invitations/migrations/0011_auto_20180220_1139.py b/invitations/migrations/0011_auto_20180220_1139.py
new file mode 100644
index 0000000000000000000000000000000000000000..3c09869ae12640b8729f6e7df0fab8399c976601
--- /dev/null
+++ b/invitations/migrations/0011_auto_20180220_1139.py
@@ -0,0 +1,151 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-20 10:39
+from __future__ import unicode_literals
+import datetime
+import hashlib
+import random
+import string
+
+from django.utils import timezone
+from django.db import migrations
+
+# Hack
+from django.contrib.auth import get_user_model
+
+
+def transfer_old_invitations_to_new_tables(apps, schema_editor):
+    OldDraftInvitation = apps.get_model('scipost', 'DraftInvitation')
+    OldRegistrationInvitation = apps.get_model('scipost', 'RegistrationInvitation')
+    OldCitationNotification = apps.get_model('scipost', 'CitationNotification')
+    NewRegistrationInvitation = apps.get_model('invitations', 'RegistrationInvitation')
+    NewCitationNotification = apps.get_model('invitations', 'CitationNotification')
+
+    random_user = get_user_model().objects.filter(is_superuser=True).first()
+    if not random_user:
+        random_user = get_user_model().objects.first()
+
+    # Registration Invitations first
+    for invitation in OldRegistrationInvitation.objects.all():
+        new_inv = NewRegistrationInvitation(
+            title=invitation.title,
+            first_name=invitation.first_name,
+            last_name=invitation.last_name,
+            email=invitation.email,
+            invitation_type=invitation.invitation_type,
+            created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+            invited_by_id=invitation.invited_by.user.id if invitation.invited_by else None,
+            message_style=invitation.message_style,
+            personal_message=invitation.personal_message,
+            times_sent=invitation.nr_reminders + 1,
+            date_sent_first=invitation.date_sent,
+            date_sent_last=invitation.date_last_reminded,
+            created=invitation.date_sent,
+            modified=invitation.date_sent,
+            key_expires=invitation.key_expires,
+            invitation_key=invitation.invitation_key,
+        )
+        if new_inv.invitation_type in ['ci', 'cp']:
+            new_inv.invitation_type = 'C'
+
+        if not invitation.responded:
+            new_inv.status = 'sent'
+        elif invitation.declined:
+            new_inv.status = 'declined'
+        elif invitation.responded and not invitation.declined:
+            new_inv.status = 'register'
+        else:
+            new_inv.status = 'draft'
+        new_inv.save()
+
+        if invitation.cited_in_submission:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                submission_id=invitation.cited_in_submission.id,
+                date_sent=invitation.date_last_reminded,
+                processed=(new_inv.status in ['declined', 'register', 'sent']),
+            )
+        if invitation.cited_in_publication:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.invited_by.user.id if invitation.invited_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                publication_id=invitation.cited_in_publication.id,
+                date_sent=invitation.date_last_reminded,
+                processed=(new_inv.status in ['declined', 'register', 'sent']),
+            )
+
+    # Draft Invitations
+    for invitation in OldDraftInvitation.objects.filter(processed=False):
+        new_inv = NewRegistrationInvitation(
+            title=invitation.title,
+            first_name=invitation.first_name,
+            last_name=invitation.last_name,
+            email=invitation.email,
+            invitation_type=invitation.invitation_type,
+            created_by_id=invitation.drafted_by.user.id if invitation.drafted_by else random_user.id,
+            invited_by_id=None,
+            times_sent=0,
+            date_sent_first=None,
+            date_sent_last=None,
+            created=invitation.date_drafted,
+            modified=invitation.date_drafted,
+            status='draft',
+        )
+        if new_inv.invitation_type in ['ci', 'cp']:
+            new_inv.invitation_type = 'C'
+
+        # Generate keys, custom methods are not loaded here
+        salt = ''
+        for i in range(5):
+            salt += random.choice(string.ascii_letters)
+        salt = salt.encode('utf8')
+        invitationsalt = new_inv.last_name.encode('utf8')
+        new_inv.invitation_key = hashlib.sha1(salt + invitationsalt).hexdigest()
+        new_inv.key_expires = timezone.now() + datetime.timedelta(days=365)
+        new_inv.save()
+
+        if invitation.cited_in_submission:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.drafted_by.user.id if invitation.drafted_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                submission_id=invitation.cited_in_submission.id,
+                date_sent=None,
+                processed=False,
+            )
+        if invitation.cited_in_publication:
+            NewCitationNotification.objects.create(
+                invitation_id=new_inv.id,
+                created_by_id=invitation.drafted_by.user.id if invitation.drafted_by else random_user.id,
+                created=new_inv.created,
+                modified=new_inv.modified,
+                publication_id=invitation.cited_in_publication.id,
+                date_sent=None,
+                processed=False,
+            )
+
+    # Old CitationNotifications
+    for notification in OldCitationNotification.objects.all():
+        NewCitationNotification.objects.create(
+            contributor_id=notification.contributor.id if notification.contributor else None,
+            created_by_id=random_user.id,
+            submission_id=notification.cited_in_submission.id if notification.cited_in_submission else None,
+            publication_id=notification.cited_in_publication.id if notification.cited_in_publication else None,
+            processed=notification.processed,
+        )
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0010_auto_20180218_1613'),
+    ]
+
+    operations = [
+        migrations.RunPython(transfer_old_invitations_to_new_tables),
+    ]
diff --git a/invitations/migrations/0012_auto_20180220_2120.py b/invitations/migrations/0012_auto_20180220_2120.py
new file mode 100644
index 0000000000000000000000000000000000000000..ccf37aed136b8da52854b8950c965eab71b053c7
--- /dev/null
+++ b/invitations/migrations/0012_auto_20180220_2120.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-20 20:20
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0011_auto_20180220_1139'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='status',
+            field=models.CharField(choices=[('draft', 'Draft'), ('sent', 'Sent'), ('edited', 'Sent and edited'), ('declined', 'Declined'), ('register', 'Registered')], default='draft', max_length=8),
+        ),
+    ]
diff --git a/invitations/migrations/0013_auto_20180414_2053.py b/invitations/migrations/0013_auto_20180414_2053.py
new file mode 100644
index 0000000000000000000000000000000000000000..8537b33a834a5aba7e52c4f69a5f36901b36828d
--- /dev/null
+++ b/invitations/migrations/0013_auto_20180414_2053.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 18:53
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('invitations', '0012_auto_20180220_2120'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='citationnotification',
+            name='invitation',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='citation_notifications', to='invitations.RegistrationInvitation'),
+        ),
+    ]
diff --git a/invitations/migrations/__init__.py b/invitations/migrations/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/invitations/mixins.py b/invitations/mixins.py
new file mode 100644
index 0000000000000000000000000000000000000000..2fda1789eee9074f3617ec60d2268cab271b2da6
--- /dev/null
+++ b/invitations/mixins.py
@@ -0,0 +1,78 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.db import transaction
+from django.contrib import messages
+
+from .constants import INVITATION_EDITORIAL_FELLOW
+from .models import RegistrationInvitation
+
+
+class RequestArgumentMixin:
+    """
+    Use the WSGIRequest as an argument in the form.
+    """
+    def get_form_kwargs(self):
+        kwargs = super().get_form_kwargs()
+        kwargs['request'] = self.request
+        return kwargs
+
+
+class BaseFormViewMixin:
+    send_mail = None
+
+    @transaction.atomic
+    def form_valid(self, form):
+        # Communication with the user.
+        model_name = self.object._meta.verbose_name
+        model_name = model_name[:1].upper() + model_name[1:]  # Hack it to capitalize the name
+
+        if self.send_mail:
+            self.object.mail_sent(user=self.request.user)
+            messages.success(self.request, '{} updated and sent'.format(model_name))
+        else:
+            messages.success(self.request, '{} updated'.format(model_name))
+        return super().form_valid(form)
+
+
+class SendMailFormMixin(BaseFormViewMixin):
+    """
+    Send mail out if form is valid.
+    """
+    def post(self, request, *args, **kwargs):
+        # Intercept the specific submit value before validation the form so `MailEditorMixin`
+        # can use this data.
+        if self.send_mail is None:
+            # Communicate with the `MailEditorMixin` whether the mails should go out or not.
+            self.send_mail = request.user.has_perm('scipost.can_manage_registration_invitations')
+            self.has_permission_to_send_mail = self.send_mail
+
+        if isinstance(self.object, RegistrationInvitation):
+            if self.object.invitation_type == INVITATION_EDITORIAL_FELLOW:
+                self.alternative_from_address = ('J-S Caux', 'jscaux@scipost.org')
+        return super().post(request, *args, **kwargs)
+
+
+class SaveAndSendFormMixin(BaseFormViewMixin):
+    """
+    Use the Save or Save and Send option to send the mail out after form is valid.
+    """
+    def post(self, request, *args, **kwargs):
+        # Intercept the specific submit value before validation the form so `MailEditorMixin`
+        # can use this data.
+        if self.send_mail is None:
+            self.send_mail = request.POST.get('save', '') in ['save_and_send', 'send_from_editor']
+            if self.send_mail:
+                self.send_mail = request.user.has_perm('scipost.can_manage_registration_invitations')
+
+        # Communicate with the `MailEditorMixin` whether the mails should go out or not.
+        self.has_permission_to_send_mail = self.send_mail
+        instance = self.get_object()
+        if isinstance(instance, RegistrationInvitation):
+            if instance.invitation_type == INVITATION_EDITORIAL_FELLOW:
+                self.alternative_from_address = ('J-S Caux', 'jscaux@scipost.org')
+            if not instance.invited_by and self.has_permission_to_send_mail:
+                instance.invited_by = self.request.user
+                instance.save()
+        return super().post(request, *args, **kwargs)
diff --git a/invitations/models.py b/invitations/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..9d1a8b8b5f687cab32aef07255f54f3bec428db1
--- /dev/null
+++ b/invitations/models.py
@@ -0,0 +1,191 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import datetime
+import hashlib
+import random
+import string
+
+from django.db import models, IntegrityError
+from django.conf import settings
+from django.utils import timezone
+
+from . import constants
+from .managers import RegistrationInvitationQuerySet, CitationNotificationQuerySet
+
+from scipost.constants import TITLE_CHOICES
+
+
+class RegistrationInvitation(models.Model):
+    """
+    Invitation to particular persons for registration
+    """
+    title = models.CharField(max_length=4, choices=TITLE_CHOICES)
+    first_name = models.CharField(max_length=30)
+    last_name = models.CharField(max_length=150)
+    email = models.EmailField()
+    status = models.CharField(max_length=8, choices=constants.REGISTATION_INVITATION_STATUSES,
+                              default=constants.STATUS_DRAFT)
+
+    # Text content
+    message_style = models.CharField(max_length=1, choices=constants.INVITATION_STYLE,
+                                     default=constants.INVITATION_FORMAL)
+    personal_message = models.TextField(blank=True)
+    invited_by = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.SET_NULL,
+                                   blank=True, null=True, related_name='invitations_sent')
+    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='invitations_created')
+
+    # Related to objects
+    invitation_type = models.CharField(max_length=2, choices=constants.INVITATION_TYPE,
+                                       default=constants.INVITATION_CONTRIBUTOR)
+
+    # Response keys
+    invitation_key = models.CharField(max_length=40, unique=True)
+    key_expires = models.DateTimeField(default=timezone.now)
+
+    # Timestamps
+    date_sent_first = models.DateTimeField(null=True, blank=True)
+    date_sent_last = models.DateTimeField(null=True, blank=True)
+    times_sent = models.PositiveSmallIntegerField(default=0)
+    created = models.DateTimeField(auto_now_add=True)
+    modified = models.DateTimeField(auto_now=True)
+
+    objects = RegistrationInvitationQuerySet.as_manager()
+
+    class Meta:
+        ordering = ['last_name']
+
+    def __init__(self, *args, **kwargs):
+        response = super().__init__(*args, **kwargs)
+        self.refresh_keys()
+        return response
+
+    def __str__(self):
+        return '{} {} on {}'.format(self.first_name, self.last_name,
+                                    self.created.strftime("%Y-%m-%d"))
+
+    def refresh_keys(self, force_new_key=False):
+        # Generate email activation key and link
+        if not self.invitation_key or force_new_key:
+            # TODO: Replace this all by the `secrets` package available from python 3.6(!)
+            salt = ''
+            for i in range(5):
+                salt += random.choice(string.ascii_letters)
+            salt = salt.encode('utf8')
+            invitationsalt = self.last_name.encode('utf8')
+            self.invitation_key = hashlib.sha1(salt + invitationsalt).hexdigest()
+            self.key_expires = timezone.now() + datetime.timedelta(days=365)
+
+    def mail_sent(self, user=None):
+        """
+        Update instance fields as if a new invitation mail has been sent out.
+        """
+        if self.status == constants.STATUS_DRAFT:
+            self.status = constants.STATUS_SENT
+        if not self.date_sent_first:
+            self.date_sent_first = timezone.now()
+        self.date_sent_last = timezone.now()
+        self.invited_by = user or self.created_by
+        self.times_sent += 1
+        self.citation_notifications.update(processed=True)
+        self.save()
+
+    @property
+    def has_responded(self):
+        return self.status in [constants.STATUS_DECLINED, constants.STATUS_REGISTERED]
+
+
+class CitationNotification(models.Model):
+    invitation = models.ForeignKey('invitations.RegistrationInvitation',
+                                   on_delete=models.CASCADE,
+                                   null=True, blank=True)
+    contributor = models.ForeignKey('scipost.Contributor',
+                                    on_delete=models.CASCADE,
+                                    null=True, blank=True,
+                                    related_name='+')
+
+    # Content
+    submission = models.ForeignKey('submissions.Submission', null=True, blank=True,
+                                   related_name='+')
+    publication = models.ForeignKey('journals.Publication', null=True, blank=True,
+                                    related_name='+')
+    processed = models.BooleanField(default=False)
+
+    # Meta info
+    created_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='notifications_created')
+    date_sent = models.DateTimeField(null=True, blank=True)
+    created = models.DateTimeField(auto_now_add=True)
+    modified = models.DateTimeField(auto_now=True)
+
+    objects = CitationNotificationQuerySet.as_manager()
+
+    class Meta:
+        default_related_name = 'citation_notifications'
+        unique_together = (
+            ('invitation', 'submission'),
+            ('invitation', 'publication'),
+            ('contributor', 'submission'),
+            ('contributor', 'publication'),
+        )
+
+    def __str__(self):
+        _str = 'Citation for '
+        if self.invitation:
+            _str += ' Invitation ({} {})'.format(
+                self.invitation.first_name,
+                self.invitation.last_name,
+            )
+        elif self.contributor:
+            _str += ' Contributor ({})'.format(self.contributor)
+
+        _str += ' on '
+        if self.submission:
+            _str += 'Submission ({})'.format(self.submission.arxiv_identifier_w_vn_nr)
+        elif self.publication:
+            _str += 'Publication ({})'.format(self.publication.doi_label)
+        return _str
+
+    def save(self, *args, **kwargs):
+        if not self.submission and not self.publication:
+            raise IntegrityError(('CitationNotification needs to be related to either a '
+                                  'Submission or Publication object.'))
+        return super().save(*args, **kwargs)
+
+    def mail_sent(self):
+        """
+        Update instance fields as if a new citation notification mail has been sent out.
+        """
+        self.processed = True
+        if not self.date_sent:
+            # Don't overwrite by accident...
+            self.date_sent = timezone.now()
+        self.save()
+
+    def related_notifications(self):
+        return CitationNotification.objects.unprocessed().filter(
+            models.Q(contributor=self.contributor) | models.Q(invitation=self.invitation))
+
+    def get_first_related_contributor(self):
+        return self.related_notifications().filter(contributor__isnull=False).first()
+
+    @property
+    def email(self):
+        if self.invitation:
+            return self.invitation.email
+        elif self.contributor:
+            return self.contributor.user.email
+
+    @property
+    def last_name(self):
+        if self.invitation:
+            return self.invitation.last_name
+        elif self.contributor:
+            return self.contributor.user.last_name
+
+    @property
+    def get_title(self):
+        if self.invitation:
+            return self.invitation.get_title_display()
+        elif self.contributor:
+            return self.contributor.get_title_display()
diff --git a/invitations/templates/invitations/citationnotification_form.html b/invitations/templates/invitations/citationnotification_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..49d8c3eed57363ad33725729142db774d0a808fe
--- /dev/null
+++ b/invitations/templates/invitations/citationnotification_form.html
@@ -0,0 +1,39 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Process Citation Notification{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <a href="{% url 'invitations:citation_notification_list' %}" class="breadcrumb-item">Citation Notifications</a>
+    <span class="breadcrumb-item">Process</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Process Citation Notification</h1>
+
+        <h3>All related unprocessed Citation Notifications</h3>
+        {% for related_notification in form.get_all_notifications %}
+            {% include 'partials/invitations/citationnotification_summary.html' with notification=related_notification %}
+            <br>
+        {% endfor %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <input type="submit" class="btn btn-primary" name="save" value="Process all notifications">
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/citationnotification_list.html b/invitations/templates/invitations/citationnotification_list.html
new file mode 100644
index 0000000000000000000000000000000000000000..c24a4abb6a3851fd9883ff60f8592c481a1d8da6
--- /dev/null
+++ b/invitations/templates/invitations/citationnotification_list.html
@@ -0,0 +1,25 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Unprocessed Citation Notifications{% endblock pagetitle %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Unprocessed Citation Notifications</span>
+{% endblock %}
+
+{% block content %}
+
+<h1 class="highlight">Unprocessed Citation Notifications</h1>
+<a href="{% url 'invitations:list' %}">Back to Registration Invitations</a>
+
+<div class="row">
+    <div class="col-12">
+        <br>
+        {% include 'partials/invitations/citationnotification_table.html' with notifications=object_list %}
+    </div>
+</div>
+
+{% endblock %}
diff --git a/scipost/templates/scipost/registration_invitations_cleanup.html b/invitations/templates/invitations/registrationinvitation_cleanup.html
similarity index 57%
rename from scipost/templates/scipost/registration_invitations_cleanup.html
rename to invitations/templates/invitations/registrationinvitation_cleanup.html
index 539c00d807dae937ee87b2376f359458b5a9c72f..d4a9620d11b2da9a4a47b459c02150028362260c 100644
--- a/scipost/templates/scipost/registration_invitations_cleanup.html
+++ b/invitations/templates/invitations/registrationinvitation_cleanup.html
@@ -1,11 +1,11 @@
 {% extends 'scipost/_personal_page_base.html' %}
 
-{% block pagetitle %}: registration invitations cleanup{% endblock pagetitle %}
+{% block pagetitle %}: Registration Invitations cleanup{% endblock pagetitle %}
 
 
 {% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'scipost:registration_invitations' %}" class="breadcrumb-item">Registration invitations</a>
+    {{ block.super }}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
     <span class="breadcrumb-item">Cleanup</span>
 {% endblock %}
 
@@ -15,13 +15,13 @@
 <div class="row">
     <div class="col-12">
         <h1 class="highlight">Registration Invitations Cleanup</h1>
+        <h3>Email duplicates (a contributor exists with the email address in these invitations)</h3>
     </div>
 </div>
 
 
 <div class="row">
     <div class="col-12">
-        <h3>Email duplicates (a contributor exists with the email address in these invitations)</h3>
         <table class="table">
             <thead>
                 <tr>
@@ -34,29 +34,23 @@
                 </tr>
             </thead>
             <tbody>
-                {% for inv in invs_to_cleanup %}
+                {% for inv in invitations %}
                     <tr>
                         <td>{{ inv.last_name }}</td>
                         <td>{{ inv.first_name }}</td>
                         <td>{{ inv.email }}</td>
-                        <td>{{ inv.date_sent }} </td>
-                        <td>{{ inv.invitation_type }}</td>
-                        <td>{{ inv.invited_by.user.last_name }}</td>
-                        <td>
-                            <a href="{% url 'scipost:remove_registration_invitation' invitation_id=inv.id %}">Remove</a>
-                        </td>
+                        <td>{{ inv.date_sent_first }} </td>
+                        <td>{{ inv.get_invitation_type_display }}</td>
+                        <td>{{ inv.invited_by }}</td>
+                        <td><a href="{% url 'invitations:delete' inv.id %}">Remove</a></td>
                     </tr>
                 {% empty %}
                     <tr>
-                        <td colspan="7">
-                            There were no duplicate emails found in the sets of Contributors/Invitations.
-                        </td>
+                        <td colspan="7">There were no duplicate emails found in the sets of Contributors/Invitations.</td>
                     </tr>
                 {% endfor %}
             </tbody>
         </table>
-
-        <p>Return to the <a href="{% url 'scipost:registration_invitations' %}">Registration Invitations</a> page.</p>
     </div>
 </div>
 
diff --git a/invitations/templates/invitations/registrationinvitation_confirm_delete.html b/invitations/templates/invitations/registrationinvitation_confirm_delete.html
new file mode 100644
index 0000000000000000000000000000000000000000..c65958c8547340e2b5dc9f79d564c029eb5e5166
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_confirm_delete.html
@@ -0,0 +1,27 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Delete Registration Invitation{% endblock pagetitle %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Delete {{ object.id }}</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Delete Registration Invitation {{ object.id }}</h1>
+        <p>Are you sure you want to delete the Registration Invitation?</p>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+
+        <form method="post">
+            {% csrf_token %}
+            <input type="submit" class="btn btn-danger" value="Delete Registration Invitation">
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_form.html b/invitations/templates/invitations/registrationinvitation_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..f6a7fb35b49ae79d8e4007e3f17138d0f579b0c7
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form.html
@@ -0,0 +1,37 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Edit Registration Invitation{% endblock pagetitle %}
+
+{% load scipost_extras %}
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Edit</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Registration Invitation {{ object.id }}</h1>
+
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <button type="submit" class="btn btn-primary" name="save" value="save">Save</button>
+            <button type="submit" class="ml-2 btn btn-primary" name="save" value="save_and_create">Save and create new</button>
+            {% if perms.scipost.can_manage_registration_invitations %}
+                <button type="submit" class="ml-2 btn btn-outline-secondary" name="save" value="save_and_send">Save and send mail</button>
+            {% endif %}
+        </form>
+    </div>
+</div>
+
+{% endblock %}
+
+{% block footer_script %}
+    {{ block.super }}
+    {{ form.media }}
+{% endblock footer_script %}
diff --git a/invitations/templates/invitations/registrationinvitation_form_add_citation.html b/invitations/templates/invitations/registrationinvitation_form_add_citation.html
new file mode 100644
index 0000000000000000000000000000000000000000..af960d23a5b97ac8823e1b3d2b7b169d71296ccb
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form_add_citation.html
@@ -0,0 +1,43 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Add Citation Notification{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Add Citation Notification</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Add Citation Notification</h1>
+        <h3>Registration Invitation</h3>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+    </div>
+</div>
+
+<hr class="divider">
+
+<div class="row">
+    <div class="col-12">
+        <h3>Submission or Publication to add to the Registration Invitation</h3>
+        <br>
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <input type="submit" class="btn btn-primary" value="Add">
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
+
+{% block footer_script %}
+    {{ block.super }}
+    {{ form.media }}
+{% endblock footer_script %}
diff --git a/invitations/templates/invitations/registrationinvitation_form_add_new.html b/invitations/templates/invitations/registrationinvitation_form_add_new.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e011e4f28956358c018b636ac5b9c9c4a2dbfd4
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form_add_new.html
@@ -0,0 +1,97 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: New Registration Invitation{% endblock pagetitle %}
+
+{% load scipost_extras %}
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">New</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">New Registration Invitation</h1>
+        <p>
+            If you want to invite a new Contributor to SciPost, first try to use the following search form to see if this person already is available in the SciPost database.
+        </p>
+
+        {% if suggestion_search_form %}
+            <h3 class="mb-1">Search for existing Contributor</h3>
+            <form method="get">
+                {{ suggestion_search_form|bootstrap }}
+                <input type="submit" class="btn btn-primary" value="Search">
+                {% if suggestion_search_form.is_bound %}
+                    <a href="{% url 'invitations:new' %}" class="ml-2 btn btn-link">Cancel search</a>
+                {% endif %}
+            </form>
+
+            <hr class="divider">
+            {% if suggestion_search_form.is_bound %}
+                {% if suggested_invitations %}
+                    <h3>Registration Invitations found</h3>
+                    <p>
+                        If the person you are trying to invite is within this list of Registration Invitations, please use it by extending that particular invitation.
+                    </p>
+                    <ul class="mb-2">
+                        {% for inv in suggested_invitations %}
+                            <li><a href="{% url 'invitations:add_citation' inv.id %}">Use Registration Invitation for {{ inv.first_name }} {{ inv.last_name }}</a></li>
+                        {% endfor %}
+                    </ul>
+                {% endif %}
+                {% if declined_invitations %}
+                    <h3>Declined Registration Invitations</h3>
+                    <p>
+                        If the person you are trying to invite is within this list of Registration Invitations, do not invite them again. They have already declined an earlier invitation.
+                    </p>
+                    <ul class="mb-2">
+                        {% for inv in declined_invitations %}
+                            <li>{{ inv.first_name }} {{ inv.last_name }}: {{ inv.email }}</a></li>
+                        {% endfor %}
+                    </ul>
+                {% endif %}
+
+                <h3>Citation Notification</h3>
+                <p>
+                    If the person you are trying to invite is already a registered Contributor, it'll be listed in the following form. If not, you can <a href="{% url 'invitations:new' %}?prefill-last_name={{ suggestion_search_form.last_name.value|urlencode }}">write a new Registration Invitation</a>.
+                </p>
+            {% else %}
+                <h3 class="mb-1">...or write a new Registration Invitation</h3>
+            {% endif %}
+
+        {% endif %}
+
+        {% if suggestion_search_form.is_bound %}
+            <form method="post">
+                {% csrf_token %}
+                {{ citation_form|bootstrap }}
+                <button type="submit" class="btn btn-primary" name="save" value="save">Save</button>
+                <button type="submit" class="ml-2 btn btn-primary" name="save" value="save_and_create">Save and create new</button>
+                {% if perms.scipost.can_manage_registration_invitations %}
+                    <button type="submit" class="ml-2 btn btn-outline-secondary" name="save" value="save_and_send">Save and send mail</button>
+                {% endif %}
+            </form>
+
+            <br>
+            <a href="{% url 'invitations:new' %}">Cancel search here</a> to write a new Registration Invitation.
+        {% else %}
+            <form method="post">
+                {% csrf_token %}
+                {{ invitation_form|bootstrap }}
+                <button type="submit" class="btn btn-primary" name="save" value="save">Save</button>
+                <button type="submit" class="ml-2 btn btn-primary" name="save" value="save_and_create">Save and create new</button>
+            </form>
+        {% endif %}
+    </div>
+</div>
+
+{% endblock %}
+
+{% block footer_script %}
+    {{ block.super }}
+    {{ invitation_form.media }}
+{% endblock footer_script %}
diff --git a/invitations/templates/invitations/registrationinvitation_form_map_to_contributor.html b/invitations/templates/invitations/registrationinvitation_form_map_to_contributor.html
new file mode 100644
index 0000000000000000000000000000000000000000..46b8e5fa11019753e665d7c263a9d52b0ce52824
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form_map_to_contributor.html
@@ -0,0 +1,38 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Map Registration Invitation{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Map to Contributor</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Map Registration Invitation to Contributor</h1>
+        <h3>Registration Invitation</h3>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <h3>Map to Contributor</h3>
+            {{ form.get_contributor.get_title_display }} {{ form.get_contributor.user.first_name }} {{ form.get_contributor.user.last_name }}
+            <br>
+            <br>
+            <input type="submit" class="btn btn-primary" name="save" value="Map to Contributor">
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_form_mark_as.html b/invitations/templates/invitations/registrationinvitation_form_mark_as.html
new file mode 100644
index 0000000000000000000000000000000000000000..e288ceadd2fa9298764caa9efba8bf38a90421bf
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form_mark_as.html
@@ -0,0 +1,33 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Mark Registration Invitation {{ request.resolver_match.kwargs.label }}{% endblock pagetitle %}
+
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Mark {{ request.resolver_match.kwargs.label }}</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Mark Registration Invitation {{ request.resolver_match.kwargs.label }}</h1>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <button type="submit" class="btn btn-primary" name="save" value="save">Mark {{ request.resolver_match.kwargs.label }}</button>
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_form_merge.html b/invitations/templates/invitations/registrationinvitation_form_merge.html
new file mode 100644
index 0000000000000000000000000000000000000000..3c284b5102cc9c3a5a7c25e9feeba03adf52da0c
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_form_merge.html
@@ -0,0 +1,34 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Edit Registration Invitation{% endblock pagetitle %}
+
+{% load scipost_extras %}
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Edit</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Registration Invitation {{ object.id }}</h1>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <button type="submit" class="btn btn-primary" name="save" value="save">Merge</button>
+        </form>
+    </div>
+</div>
+
+{% endblock %}
+
+{% block footer_script %}
+    {{ block.super }}
+    {{ form.media }}
+{% endblock footer_script %}
diff --git a/invitations/templates/invitations/registrationinvitation_list.html b/invitations/templates/invitations/registrationinvitation_list.html
new file mode 100644
index 0000000000000000000000000000000000000000..87bafcf876763838ec0fc62a5e8aab0a4f9dd580
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_list.html
@@ -0,0 +1,76 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Registration Invitations{% endblock pagetitle %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <span class="breadcrumb-item">Registration Invitations</span>
+{% endblock %}
+
+{% block content %}
+
+<h1 class="highlight">Registration Invitations</h1>
+
+<div class="row">
+    <div class="col-md-6">
+        <h3>Actions</h3>
+        <ul class="mb-0">
+            {% if perms.scipost.can_create_registration_invitations %}
+                <li><a href="{% url 'invitations:new' %}">Create a new invitation</a></li>
+            {% endif %}
+            {% if perms.scipost.can_manage_registration_invitations %}
+                <li><a href="{% url 'invitations:cleanup' %}">Perform a cleanup</a></li>
+                <li><a href="{% url 'invitations:citation_notification_list' %}">List unprocessed Citation Notifications</a></li>
+            {% endif %}
+            {% if perms.scipost.can_invite_fellows %}
+                <li><a href="{% url 'invitations:list_fellows' %}">List Fellow Invitations</a></li>
+            {% endif %}
+
+            <li><a href="{% url 'invitations:list_sent' %}">Show all Invitations pending response</a></li>
+        </ul>
+    </div>
+    <div class="col-md-6 text-md-right">
+        <h3>Quick stats</h3>
+        Number in draft: {{ count_in_draft }}<br>
+        Number pending response: {{ count_pending }}
+
+        {% if perms.scipost.can_create_registration_invitations %}
+            <br><br>
+            <a href="{% url 'invitations:new' %}" class="btn btn-primary">Create a new invitation</a>
+        {% endif %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <h2 class="highlight">Registration Invitations</h2>
+    </div>
+    <div class="col-md-6">
+        <form method="get">
+            {{ search_form|bootstrap }}
+            <input class="btn btn-primary" type="submit" value="Filter">
+            <a href="{% url 'invitations:list' %}" class="btn btn-link">Reset filter</a>
+        </form>
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+    <div class="col-12">
+        <br>
+        {% include 'partials/invitations/registrationinvitation_table.html' with invitations=object_list %}
+        {% if search_form.is_bound %}
+            <a href="{% url 'invitations:list' %}" class="btn btn-link">Reset filter</a>
+        {% endif %}
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_list_fellows.html b/invitations/templates/invitations/registrationinvitation_list_fellows.html
new file mode 100644
index 0000000000000000000000000000000000000000..b2f4552e491c73a7385375529f1864d9007b6602
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_list_fellows.html
@@ -0,0 +1,39 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Registration Invitations{% endblock pagetitle %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Fellows</span>
+{% endblock %}
+
+{% block content %}
+
+<h1 class="highlight">Registration Invitations Fellows</h1>
+
+
+<div class="row">
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+    <div class="col-12">
+        <br>
+
+        {% include 'partials/invitations/registrationinvitation_table.html' with invitations=object_list %}
+        {% if search_form.is_bound %}
+            <a href="{% url 'invitations:list_sent' %}" class="btn btn-link">Reset filter</a>
+        {% endif %}
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_list_sent.html b/invitations/templates/invitations/registrationinvitation_list_sent.html
new file mode 100644
index 0000000000000000000000000000000000000000..40794bb8cf39a12b0376dbe5dffdbd3c83ab9a0d
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_list_sent.html
@@ -0,0 +1,46 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Registration Invitations{% endblock pagetitle %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Sent</span>
+{% endblock %}
+
+{% block content %}
+
+<h1 class="highlight">Sent Registration Invitations</h1>
+
+
+<div class="row">
+    <div class="col-12">
+        <form method="get">
+            {{ search_form|bootstrap }}
+            <input class="btn btn-primary" type="submit" value="Filter">
+            <a href="{% url 'invitations:list_sent' %}" class="btn btn-link">Reset filter</a>
+        </form>
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+    <div class="col-12">
+        <br>
+
+        {% include 'partials/invitations/registrationinvitation_table.html' with invitations=object_list %}
+        {% if search_form.is_bound %}
+            <a href="{% url 'invitations:list_sent' %}" class="btn btn-link">Reset filter</a>
+        {% endif %}
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/invitations/registrationinvitation_reminder_form.html b/invitations/templates/invitations/registrationinvitation_reminder_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..c328668dc3dc632039fbaa7ddca64a6cbb37920f
--- /dev/null
+++ b/invitations/templates/invitations/registrationinvitation_reminder_form.html
@@ -0,0 +1,34 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block pagetitle %}: Send reminder for Registration Invitation{% endblock pagetitle %}
+
+{% load scipost_extras %}
+{% load bootstrap %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <a href="{% url 'invitations:list' %}" class="breadcrumb-item">Registration Invitations</a>
+    <span class="breadcrumb-item">Send reminder</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <h1 class="highlight">Send reminder for Registration Invitation</h1>
+        {% include 'partials/invitations/registrationinvitation_summary.html' with invitation=object %}
+    </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <input type="submit" class="btn btn-primary" value="Send reminder">
+        </form>
+
+    </div>
+</div>
+
+{% endblock %}
diff --git a/invitations/templates/partials/invitations/citationnotification_summary.html b/invitations/templates/partials/invitations/citationnotification_summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..9bf9479b994638c448280a61a05ec630df415f37
--- /dev/null
+++ b/invitations/templates/partials/invitations/citationnotification_summary.html
@@ -0,0 +1,42 @@
+<table class="registration_invitation notification">
+    <tr>
+        <th>Name</th>
+        <td>
+            {% if notification.contributor %}
+                {{ notification.contributor.get_title_display }} {{ notification.contributor.user.first_name }} {{ notification.contributor.user.last_name }}
+            {% elif notification.invitation %}
+                {{ notification.invitation.first_name }} {{ notification.invitation.last_name }}
+            {% endif %}
+        </td>
+    </tr>
+    <tr>
+        <th>Email</th>
+        <td>
+            {% if notification.contributor %}
+                {{ notification.contributor.user.email }}
+            {% elif notification.invitation %}
+                {{ notification.invitation.email }}
+            {% endif %}
+        </td>
+    </tr>
+    <tr>
+        <th>Status</th>
+        <td>{{ notification.processed|yesno:'Processed,Not processed' }}</td>
+    </tr>
+    <tr>
+        <th>Submission</th>
+        <td>{{ notification.submission|default:'-' }}</td>
+    </tr>
+    <tr>
+        <th>Publication</th>
+        <td>{{ notification.publication|default:'-' }}</td>
+    </tr>
+    <tr>
+        <th>Created</th>
+        <td>{{ notification.created }} (by {{ notification.created_by.first_name }} {{ notification.created_by.last_name }})</td>
+    </tr>
+    <tr>
+        <th>Date Sent</th>
+        <td>{{ notification.date_sent|default:'<em>Not sent yet</em>' }}</td>
+    </tr>
+</table>
diff --git a/invitations/templates/partials/invitations/citationnotification_table.html b/invitations/templates/partials/invitations/citationnotification_table.html
new file mode 100644
index 0000000000000000000000000000000000000000..7ec0ed3b93c9dba68c585b86f630ccfc8b294c96
--- /dev/null
+++ b/invitations/templates/partials/invitations/citationnotification_table.html
@@ -0,0 +1,63 @@
+<table class="table">
+    <thead>
+        <tr>
+            <th>Name</th>
+            <th>Email</th>
+            <th>Type</th>
+            <th>Cited in</th>
+            <th>Created by</th>
+            <th>Date created</th>
+            <th>Actions</th>
+        </tr>
+    </thead>
+    <tbody>
+        {% for notification in notifications %}
+              <tr>
+                  <td>
+                      {% if notification.contributor %}
+                          {{ notification.contributor.user.first_name }} {{ notification.contributor.user.last_name }}
+                      {% elif notification.invitation %}
+                          {{ notification.invitation.first_name }} {{ notification.invitation.last_name }}
+                      {% endif %}
+                  </td>
+                  <td>
+                      {% if notification.contributor %}
+                          {{ notification.contributor.user.email }}
+                      {% elif notification.invitation %}
+                          {{ notification.invitation.email }}
+                      {% endif %}
+                  </td>
+                  <td>
+                      {% if notification.contributor %}For Contributor{% elif notification.invitation %}Registration Invitation{% else %}<span class="text-danger">Invalid</span>{% endif %}
+                  </td>
+                  <td>
+                      {% if notification.publication %}
+                        {{ notification.publication.citation }}
+                      {% endif %}
+                      {% if notification.submission %}
+                        {{ notification.submission.arxiv_identifier_w_vn_nr }}
+                      {% endif %}
+                  </td>
+                <td>{{ notification.created_by.first_name }} {{ notification.created_by.last_name }}</td>
+                <td>{{ notification.created }}</td>
+                <td>
+                    {% if notification.contributor %}
+                        <a href="{% url 'invitations:citation_notification_process' notification.id %}">Process citation</a>
+                    {% elif notification.invitation %}
+                        {% if notification.invitation.status == 'draft' %}
+                            <a href="{% url 'invitations:update' notification.invitation.id %}">Edit/send invitation</a>
+                        {% elif notification.invitation.status == 'send' or notification.invitation.status == 'edited' %}
+                            <a href="{% url 'invitations:send_reminder' notification.invitation.id %}">Send reminder</a>
+                        {% endif %}
+                    {% endif %}
+                </td>
+            </tr>
+        {% empty %}
+            <tr>
+                <td colspan="7">
+                    All Citation Notifications have been processed.
+                </td>
+            </tr>
+        {% endfor %}
+    </tbody>
+</table>
diff --git a/invitations/templates/partials/invitations/registrationinvitation_summary.html b/invitations/templates/partials/invitations/registrationinvitation_summary.html
new file mode 100644
index 0000000000000000000000000000000000000000..4ff47a7f113268c1816d49986cccc5bf33fe0ac6
--- /dev/null
+++ b/invitations/templates/partials/invitations/registrationinvitation_summary.html
@@ -0,0 +1,53 @@
+<table class="registration_invitation">
+    <tr>
+        <th>Name</th>
+        <td>{{ invitation.get_title_display }} {{ invitation.first_name }} {{ invitation.last_name }}</td>
+    </tr>
+    <tr>
+        <th>Email</th>
+        <td>{{ invitation.email }}</td>
+    </tr>
+    <tr>
+        <th>Status</th>
+        <td>{{ invitation.get_status_display }}</td>
+    </tr>
+
+    <tr>
+        <th>Submission(s)</th>
+        <td>
+            <ul class="pl-3 mb-0">
+                {% for citation in invitation.citation_notifications.for_submissions %}
+                    <li>{{ citation.submission }}</li>
+                {% empty %}
+                    <li><em>No submissions linked</em></li>
+                {% endfor %}
+            </ul>
+        </td>
+    </tr>
+    <tr>
+        <th>Publication(s)</th>
+        <td>
+            <ul class="pl-3 mb-0">
+                {% for citation in invitation.citation_notifications.for_publications %}
+                    <li>{{ citation.publication }}</li>
+                {% empty %}
+                    <li><em>No publications linked</em></li>
+                {% endfor %}
+            </ul>
+        </td>
+    </tr>
+    <tr>
+        <th>Created</th>
+        <td>{{ invitation.created }}</td>
+    </tr>
+    <tr>
+        <th>Times sent</th>
+        <td><strong>{{ invitation.times_sent }}</strong> time{{ invitation.times_sent|pluralize }}{% if invitation.times_sent %} (last time: {{ invitation.date_sent_last }}){% endif %}</td>
+    </tr>
+</table>
+
+{% if invitation.personal_message %}
+    <br>
+    <strong>Personal Message</strong>
+    <p>{{ invitation.personal_message|linebreaksbr }}</p>
+{% endif %}
diff --git a/invitations/templates/partials/invitations/registrationinvitation_table.html b/invitations/templates/partials/invitations/registrationinvitation_table.html
new file mode 100644
index 0000000000000000000000000000000000000000..86ac4b72bca1963997f2cb59f82c325da7eb702d
--- /dev/null
+++ b/invitations/templates/partials/invitations/registrationinvitation_table.html
@@ -0,0 +1,76 @@
+{% load scipost_extras %}
+
+<table class="table table-hover">
+    <thead>
+        <tr>
+            <th>Name</th>
+            <th>Email</th>
+            <th>Status</th>
+            <th>Type</th>
+            <th>Drafted by</th>
+            <th>Date created</th>
+            <th>Times sent</th>
+            <th colspan="2">Actions</th>
+        </tr>
+    </thead>
+    <tbody>
+        {% for invitation in invitations %}
+          <tr>
+            <td>
+                <small><i class="fa fa-paperclip" data-toggle="tooltip" data-html="true" data-title="<ul style='margin-bottom:0; padding: 0 10px 0 20px; min-height: 20px;'>{% for cit in invitation.citation_notifications.all %}<li>{% if cit.submission %}{{ cit.submission.arxiv_identifier_w_vn_nr }}{% endif %}{% if cit.publication %}{{ cit.publication.doi_label }}{% endif %}</li>{% endfor %}</ul>"></i></small>
+                {{ invitation.last_name }}, {{ invitation.first_name }}
+            </td>
+            <td>{{ invitation.email }}</td>
+            <td{% if invitation.status == 'draft' %} class="text-warning"{% endif %}>{{ invitation.get_status_display }}</td>
+            <td>{{ invitation.get_invitation_type_display }}</td>
+            <td>{{ invitation.created_by.first_name }} {{ invitation.created_by.last_name }}</td>
+            <td>{{ invitation.created }}</td>
+            <td>
+                {% if invitation.times_sent %}
+                    <strong>{{ invitation.times_sent }}</strong> time{{ invitation.times_sent|pluralize }}
+                    &middot; {{ invitation.date_sent_last|timesince }} ago
+                {% else %}
+                    -
+                {% endif %}
+            </td>
+            {% if perms.scipost.can_manage_registration_invitations %}
+                <td>
+                    <ul class="pl-3 mb-0">
+                        {% if invitation.status == 'draft' %}
+                            <li><a href="{% url 'invitations:update' invitation.id %}">Edit or send</a></li>
+                            <li><a href="{% url 'invitations:mark' invitation.id 'sent' %}">Mark as sent</a></li>
+                        {% elif invitation.status == 'sent' or invitation.status == 'edited' %}
+                            <li><a href="{% url 'invitations:send_reminder' invitation.id %}">Send reminder</a></li>
+                        {% endif %}
+                        <li><a class="text-danger" href="{% url 'invitations:delete' invitation.id %}">Delete</a></li>
+                    </ul>
+                </td>
+                <td>
+                    <ul class="mb-0">
+                        {% for ac in invitation|associated_contributors %}
+                            <li>
+                                <a href="{% url 'invitations:map_to_contributor' pk=invitation.id contributor_id=ac.id %}">Map to {{ ac.user.first_name }} {{ ac.user.last_name }}</a>
+                            </li>
+                        {% endfor %}
+                        <li><a href="{% url 'invitations:add_citation' invitation.id %}">Add new Citation to Invitation</a></li>
+                        <li><a href="{% url 'invitations:merge' invitation.id %}">Merge this Invitation</a></li>
+                    </ul>
+                </td>
+            {% else %}
+                <td colspan="2">
+                    <ul class="pl-3 mb-0">
+                        <li><a href="{% url 'invitations:add_citation' invitation.id %}">Add new Citation to Invitation</a></li>
+                        {% if invitation.status == 'draft' and invitation.created_by == request.user %}
+                            <li><a href="{% url 'invitations:update' invitation.id %}">Edit Invitation</a></li>
+                        {% endif %}
+                    </ul>
+                </td>
+            {% endif %}
+          </tr>
+        {% empty %}
+            <tr>
+                <td colspan="9">No Invitations found.</td>
+            </tr>
+        {% endfor %}
+    </tbody>
+</table>
diff --git a/invitations/tests.py b/invitations/tests.py
new file mode 100644
index 0000000000000000000000000000000000000000..9135c42ab26e15b71fd25dc25d9f92bcec7e676b
--- /dev/null
+++ b/invitations/tests.py
@@ -0,0 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/invitations/urls.py b/invitations/urls.py
new file mode 100644
index 0000000000000000000000000000000000000000..3761e3a75cde19c91c7fa17c2b9fdf5adf48a072
--- /dev/null
+++ b/invitations/urls.py
@@ -0,0 +1,34 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.conf.urls import url
+
+from . import views
+
+urlpatterns = [
+    url(r'^$', views.RegistrationInvitationsView.as_view(), name='list'),
+    url(r'^sent$', views.RegistrationInvitationsSendView.as_view(), name='list_sent'),
+    url(r'^fellows$', views.RegistrationInvitationsFellowView.as_view(), name='list_fellows'),
+    url(r'^new$', views.create_registration_invitation_or_citation, name='new'),
+    url(r'^(?P<pk>[0-9]+)/$', views.RegistrationInvitationsUpdateView.as_view(), name='update'),
+    url(r'^(?P<pk>[0-9]+)/add_citation$', views.RegistrationInvitationsAddCitationView.as_view(),
+        name='add_citation'),
+    url(r'^(?P<pk>[0-9]+)/delete$', views.RegistrationInvitationsDeleteView.as_view(),
+        name='delete'),
+    url(r'^(?P<pk>[0-9]+)/merge$', views.RegistrationInvitationsMergeView.as_view(),
+        name='merge'),
+    url(r'^(?P<pk>[0-9]+)/mark/(?P<label>sent)$', views.RegistrationInvitationsMarkView.as_view(),
+        name='mark'),
+    url(r'^(?P<pk>[0-9]+)/map_to_contributor/(?P<contributor_id>[0-9]+)/$',
+        views.RegistrationInvitationsMapToContributorView.as_view(),
+        name='map_to_contributor'),
+    url(r'^(?P<pk>[0-9]+)/send_reminder$', views.RegistrationInvitationsReminderView.as_view(),
+        name='send_reminder'),
+    url(r'^cleanup$', views.cleanup, name='cleanup'),
+
+    url(r'^citations$', views.CitationNotificationsView.as_view(),
+        name='citation_notification_list'),
+    url(r'^citations/(?P<pk>[0-9]+)$', views.CitationNotificationsProcessView.as_view(),
+        name='citation_notification_process'),
+]
diff --git a/invitations/utils.py b/invitations/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..e1012ff97a8aa2ed0ff29aa7323bbe7d42abbcb4
--- /dev/null
+++ b/invitations/utils.py
@@ -0,0 +1,35 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from common.utils import BaseMailUtil
+
+
+class Utils(BaseMailUtil):
+    mail_sender = 'invitations@scipost.org'
+    mail_sender_title = 'SciPost Invitation'
+
+    @classmethod
+    def invite_contributor_email(cls):
+        """
+        Send email to unregistered people inviting them to become a SciPost Contributor.
+        Requires context to contain 'registration_invitation' (RegistrationInvitation instance).
+        """
+        raise NotImplementedError('invite_contributor_email')
+
+    @classmethod
+    def invite_contributor_reminder_email(cls):
+        """
+        Send reminder(!) email to unregistered people inviting them to become a SciPost
+        Contributor.
+        Requires context to contain 'registration_invitation'(RegistrationInvitation instance).
+        """
+        raise NotImplementedError('invite_contributor_reminder_email')
+
+    @classmethod
+    def citation_notifications_email(cls):
+        """
+        Send email to a SciPost Contributor about a Citation Notification that's been created
+        for him/her. Requires context to contain 'notifications' (list of CitationNotifications).
+        """
+        raise NotImplementedError('citation_notifications_email')
diff --git a/invitations/views.py b/invitations/views.py
new file mode 100644
index 0000000000000000000000000000000000000000..36f2e40338e4c885ec5b57dda77a444819b028fa
--- /dev/null
+++ b/invitations/views.py
@@ -0,0 +1,227 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib import messages
+from django.contrib.auth.decorators import login_required, permission_required
+from django.db import transaction
+from django.shortcuts import render, redirect
+from django.urls import reverse_lazy, reverse
+from django.views.generic.list import ListView
+from django.views.generic.edit import UpdateView, DeleteView
+
+from .forms import RegistrationInvitationForm, RegistrationInvitationReminderForm,\
+    RegistrationInvitationMarkForm, RegistrationInvitationMapToContributorForm,\
+    CitationNotificationForm, SuggestionSearchForm, RegistrationInvitationFilterForm,\
+    CitationNotificationProcessForm, RegistrationInvitationAddCitationForm,\
+    RegistrationInvitationMergeForm
+from .mixins import RequestArgumentMixin, SaveAndSendFormMixin, SendMailFormMixin
+from .models import RegistrationInvitation, CitationNotification
+
+from scipost.models import Contributor
+from scipost.mixins import PaginationMixin, PermissionsMixin
+from mails.views import MailEditorMixin
+
+
+class RegistrationInvitationsView(PaginationMixin, PermissionsMixin, ListView):
+    permission_required = 'scipost.can_create_registration_invitations'
+    queryset = RegistrationInvitation.objects.drafts().not_for_fellows()
+    paginate_by = 10
+    ordering = ['date_sent_last', 'last_name']
+    search_form = None
+
+    def get_queryset(self):
+        self.search_form = RegistrationInvitationFilterForm(self.request.GET or None)
+        if self.search_form.is_valid():
+            self.queryset = self.search_form.search(self.queryset)
+        return super().get_queryset()
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['count_in_draft'] = RegistrationInvitation.objects.drafts().count()
+        context['count_pending'] = RegistrationInvitation.objects.sent().count()
+        context['search_form'] = self.search_form
+        return context
+
+
+class RegistrationInvitationsSendView(RegistrationInvitationsView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    queryset = RegistrationInvitation.objects.sent().not_for_fellows()
+    template_name = 'invitations/registrationinvitation_list_sent.html'
+
+
+class RegistrationInvitationsFellowView(RegistrationInvitationsView):
+    permission_required = 'scipost.can_invite_fellows'
+    queryset = RegistrationInvitation.objects.no_response().for_fellows()
+    template_name = 'invitations/registrationinvitation_list_fellows.html'
+
+
+class CitationNotificationsView(PermissionsMixin, ListView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    queryset = CitationNotification.objects.unprocessed().prefetch_related(
+        'invitation', 'contributor', 'contributor__user')
+
+
+class CitationNotificationsProcessView(PermissionsMixin, RequestArgumentMixin,
+                                       MailEditorMixin, UpdateView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    form_class = CitationNotificationProcessForm
+    queryset = CitationNotification.objects.unprocessed()
+    success_url = reverse_lazy('invitations:citation_notification_list')
+    mail_code = 'citation_notification'
+
+    @transaction.atomic
+    def form_valid(self, form):
+        """
+        Form is valid; use the MailEditorMixin to send out the mail if
+        (possible) Contributor didn't opt-out from mails.
+        """
+        citation = form.get_all_notifications().filter(contributor__isnull=False).first()
+        contributor = citation.contributor
+        form.get_all_notifications().update(processed=True)
+        self.send_mail = (contributor and contributor.accepts_SciPost_emails) or not contributor
+        return super().form_valid(form)
+
+
+@login_required
+@permission_required('scipost.can_create_registration_invitations', raise_exception=True)
+@transaction.atomic
+def create_registration_invitation_or_citation(request):
+    """
+    Create a new Registration Invitation or Citation Notification, depending whether
+    it is meant for an already existing Contributor or not.
+    """
+    contributors = []
+    suggested_invitations = []
+    declined_invitations = []
+
+    # Only take specific GET data to prevent for unexpected bound forms.
+    search_data = {}
+    initial_search_data = {}
+    if request.GET.get('last_name'):
+        search_data['last_name'] = request.GET['last_name']
+    if request.GET.get('prefill-last_name'):
+        initial_search_data['last_name'] = request.GET['prefill-last_name']
+    suggestion_search_form = SuggestionSearchForm(search_data or None,
+                                                  initial=initial_search_data)
+    if suggestion_search_form.is_valid():
+        contributors, suggested_invitations, declined_invitations = suggestion_search_form.search()
+    citation_form = CitationNotificationForm(request.POST or None, contributors=contributors,
+                                             prefix='notification', request=request)
+
+    # New citation is related to a Contributor: RegistationInvitation
+    invitation_form = RegistrationInvitationForm(request.POST or None, request=request,
+                                                 prefix='invitation',
+                                                 initial=initial_search_data)
+    if invitation_form.is_valid():
+        invitation_form.save()
+        messages.success(request, 'New Registration Invitation created')
+        if request.POST.get('save') == 'save_and_create':
+            return redirect('invitations:new')
+        return redirect('invitations:list')
+
+    # New citation is related to a Contributor: CitationNotification
+    if citation_form.is_valid():
+        citation_form.save()
+        messages.success(request, 'New Citation Notification created')
+        if request.POST.get('save') == 'save_and_create':
+            return redirect('invitations:new')
+        return redirect('invitations:list')
+
+    context = {
+        'suggestion_search_form': suggestion_search_form,
+        'citation_form': citation_form,
+        'suggested_invitations': suggested_invitations,
+        'declined_invitations': declined_invitations,
+        'invitation_form': invitation_form,
+    }
+    return render(request, 'invitations/registrationinvitation_form_add_new.html', context)
+
+
+class RegistrationInvitationsUpdateView(RequestArgumentMixin, PermissionsMixin,
+                                        SaveAndSendFormMixin, MailEditorMixin, UpdateView):
+    permission_required = 'scipost.can_create_registration_invitations'
+    form_class = RegistrationInvitationForm
+    mail_code = 'registration_invitation'
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['invitation_form'] = context['form']
+        return context
+
+    def get_success_url(self):
+        if self.request.POST.get('save') == 'save_and_create':
+            return reverse('invitations:new')
+        return reverse('invitations:list')
+
+    def get_queryset(self):
+        qs = RegistrationInvitation.objects.drafts()
+        if not self.request.user.has_perm('scipost.can_invite_fellows'):
+            qs = qs.not_for_fellows()
+        if not self.request.user.has_perm('scipost.can_manage_registration_invitations'):
+            qs = qs.created_by(self.request.user)
+        return qs
+
+
+class RegistrationInvitationsMergeView(RequestArgumentMixin, PermissionsMixin, UpdateView):
+    permission_required = 'scipost.can_invite_fellows'
+    queryset = RegistrationInvitation.objects.no_response()
+    form_class = RegistrationInvitationMergeForm
+    template_name = 'invitations/registrationinvitation_form_merge.html'
+    success_url = reverse_lazy('invitations:list')
+
+
+class RegistrationInvitationsAddCitationView(RequestArgumentMixin, PermissionsMixin, UpdateView):
+    permission_required = 'scipost.can_create_registration_invitations'
+    form_class = RegistrationInvitationAddCitationForm
+    template_name = 'invitations/registrationinvitation_form_add_citation.html'
+    success_url = reverse_lazy('invitations:list')
+    queryset = RegistrationInvitation.objects.no_response()
+
+
+class RegistrationInvitationsMarkView(RequestArgumentMixin, PermissionsMixin, UpdateView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    queryset = RegistrationInvitation.objects.drafts()
+    form_class = RegistrationInvitationMarkForm
+    template_name = 'invitations/registrationinvitation_form_mark_as.html'
+    success_url = reverse_lazy('invitations:list')
+
+
+class RegistrationInvitationsMapToContributorView(RequestArgumentMixin, PermissionsMixin,
+                                                  UpdateView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    model = RegistrationInvitation
+    form_class = RegistrationInvitationMapToContributorForm
+    template_name = 'invitations/registrationinvitation_form_map_to_contributor.html'
+    success_url = reverse_lazy('invitations:list')
+
+
+class RegistrationInvitationsReminderView(RequestArgumentMixin, PermissionsMixin,
+                                          SendMailFormMixin, MailEditorMixin, UpdateView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    queryset = RegistrationInvitation.objects.sent()
+    success_url = reverse_lazy('invitations:list')
+    form_class = RegistrationInvitationReminderForm
+    template_name = 'invitations/registrationinvitation_reminder_form.html'
+    mail_code = 'registration_invitation_reminder'
+
+
+class RegistrationInvitationsDeleteView(PermissionsMixin, DeleteView):
+    permission_required = 'scipost.can_manage_registration_invitations'
+    model = RegistrationInvitation
+    success_url = reverse_lazy('invitations:list')
+
+
+@login_required
+@permission_required('scipost.can_manage_registration_invitations', raise_exception=True)
+def cleanup(request):
+    """
+    Compares the email addresses of invitations with those in the
+    database of registered Contributors. Flags overlaps.
+    """
+    contributor_email_list = Contributor.objects.values_list('user__email', flat=True)
+    invitations = RegistrationInvitation.objects.sent().filter(email__in=contributor_email_list)
+    context = {
+        'invitations': invitations
+    }
+    return render(request, 'invitations/registrationinvitation_cleanup.html', context)
diff --git a/journals/admin.py b/journals/admin.py
index 18468831ac764f2d2ff54862f5052828fb56044f..ea49f2c9c71db3b7c16d11ee1a7c0e7605b32388 100644
--- a/journals/admin.py
+++ b/journals/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin, messages
 from django import forms
 
@@ -41,8 +45,6 @@ admin.site.register(Issue, IssueAdmin)
 class PublicationAdminForm(forms.ModelForm):
     accepted_submission = forms.ModelChoiceField(
         queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
-    authors = forms.ModelMultipleChoiceField(
-        queryset=Contributor.objects.order_by('user__last_name'))
     authors_claims = forms.ModelMultipleChoiceField(
         required=False,
         queryset=Contributor.objects.order_by('user__last_name'))
@@ -57,6 +59,7 @@ class PublicationAdminForm(forms.ModelForm):
 
 class ReferenceInline(admin.TabularInline):
     model = Reference
+    extra = 0
 
 
 class AuthorsInline(admin.TabularInline):
@@ -66,7 +69,7 @@ class AuthorsInline(admin.TabularInline):
 
 class PublicationAdmin(admin.ModelAdmin):
     search_fields = ['title', 'author_list']
-    list_display = ['title', 'author_list', 'in_issue', 'doi_string', 'publication_date']
+    list_display = ['title', 'author_list', 'in_issue', 'doi_string', 'publication_date', 'status']
     date_hierarchy = 'publication_date'
     list_filter = ['in_issue']
     inlines = [AuthorsInline, ReferenceInline]
diff --git a/journals/api.py b/journals/api.py
index d90bee3c499835038763a80b9193102736d86736..2cdb98c6995c5272abd2d48b9cc4d5a7a1d1b681 100644
--- a/journals/api.py
+++ b/journals/api.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from rest_framework.generics import ListAPIView
 
 from .models import Publication
diff --git a/journals/behaviors.py b/journals/behaviors.py
index eca874354c8a6458dd3fa6804c38f7770c65e2a7..dd9e5f253b3391d7c19672fbbe9b4978a2c7ae27 100644
--- a/journals/behaviors.py
+++ b/journals/behaviors.py
@@ -1,5 +1,12 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.validators import RegexValidator
 
+from .constants import PUBLICATION_DOI_VALIDATION_REGEX
+
+
 doi_journal_validator = RegexValidator(r'^[a-zA-Z]+$',
                                        'Only valid DOI expressions are allowed ([a-zA-Z]+).')
 doi_volume_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+$',
@@ -7,6 +14,7 @@ doi_volume_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+$',
 doi_issue_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+.[0-9]+$',
                                      ('Only valid DOI expressions are allowed '
                                       '([a-zA-Z]+.[0-9]+.[0-9]+).'))
-doi_publication_validator = RegexValidator(r'^[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,}$',
-                                           ('Only valid DOI expressions are allowed '
-                                            '([a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,}).'))
+doi_publication_validator = RegexValidator(
+    r'^{regex}$'.format(regex=PUBLICATION_DOI_VALIDATION_REGEX),
+    ('Only valid DOI expressions are allowed '
+     '(`[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,}` or `[a-zA-Z]+.[0-9]+`)'))
diff --git a/journals/constants.py b/journals/constants.py
index da5c678eae99d18964113ca71b204208c397769e..c98733fee0caad1c76a0ef162e7d9d498e92e375 100644
--- a/journals/constants.py
+++ b/journals/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # These are DOI's of the Journals, they are used as keys for the choicefield in `models.Journal`!
 SCIPOST_JOURNAL_PHYSICS = 'SciPostPhys'
 SCIPOST_JOURNAL_PHYSICS_SELECT = 'SciPostPhysSel'
@@ -26,6 +30,11 @@ REGEX_CHOICES = '|'.join([
     SCIPOST_JOURNAL_PHYSICS
 ])
 
+# Regex used for URLs of specific Publications and for
+# doi validation during the publication process.
+PUBLICATION_DOI_REGEX = '({})'.format(REGEX_CHOICES)
+PUBLICATION_DOI_REGEX += '.[0-9]+(.[0-9]+.[0-9]{3,})?'
+PUBLICATION_DOI_VALIDATION_REGEX = PUBLICATION_DOI_REGEX
 
 SCIPOST_JOURNALS_DOMAINS = (
     ('E', 'Experimental'),
@@ -57,6 +66,13 @@ ISSUE_STATUSES = (
     (STATUS_PUBLISHED, 'Published'),
 )
 
+PUBLICATION_PREPUBLISHED, PUBLICATION_PUBLISHED = ('prepub', 'pub')
+PUBLICATION_STATUSES = (
+    (STATUS_DRAFT, 'Draft'),
+    (PUBLICATION_PREPUBLISHED, 'Pre-published'),
+    (PUBLICATION_PUBLISHED, 'Published'),
+)
+
 CCBY4 = 'CC BY 4.0'
 CCBYSA4 = 'CC BY-SA 4.0'
 CCBYNC4 = 'CC BY-NC 4.0'
@@ -71,3 +87,13 @@ CC_LICENSES_URI = (
     (CCBYSA4, 'https://creativecommons.org/licenses/by-sa/4.0'),
     (CCBYNC4, 'https://creativecommons.org/licenses/by-nc/4.0'),
     )
+
+
+ISSUES_AND_VOLUMES = 'IV'
+ISSUES_ONLY = 'IO'
+INDIVIDUAL_PUBLCATIONS = 'IP'
+JOURNAL_STRUCTURE = (
+    (ISSUES_AND_VOLUMES, 'Issues and Volumes'),
+    # (ISSUES_ONLY, 'Issues only'),  # This option complies with Crossref's rules, but is not implemented (yet).
+    (INDIVIDUAL_PUBLCATIONS, 'Individual Publications'),
+)
diff --git a/journals/exceptions.py b/journals/exceptions.py
index 16248c28c53995ed8286a46b91accb78138023e1..202f40aca57188a04f558297094c390266900b1c 100644
--- a/journals/exceptions.py
+++ b/journals/exceptions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 class JournalNameError(Exception):
     def __init__(self, name):
         self.name = name
diff --git a/journals/factories.py b/journals/factories.py
index 8d8de8ee154b5922fe4f728ca37ef39f8e3accee..3bb8bc26fca3c41ecdab65b873c95bea583b9b44 100644
--- a/journals/factories.py
+++ b/journals/factories.py
@@ -1,18 +1,41 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 import datetime
 import pytz
+import random
 
-from django.utils import timezone
-
-from common.helpers import random_digits
-from journals.constants import SCIPOST_JOURNALS
+from common.helpers import random_digits, random_external_doi, random_external_journal_abbrev
+from journals.constants import SCIPOST_JOURNALS, SCIPOST_JOURNAL_PHYSICS_LECTURE_NOTES,\
+    ISSUES_AND_VOLUMES, INDIVIDUAL_PUBLCATIONS, PUBLICATION_PUBLISHED
 from submissions.factories import PublishedSubmissionFactory
 
-from .models import Journal, Volume, Issue, Publication
+from .models import Journal, Volume, Issue, Publication, Reference
 
 from faker import Faker
 
 
+class ReferenceFactory(factory.django.DjangoModelFactory):
+    reference_number = factory.LazyAttribute(lambda o: o.publication.references.count() + 1)
+    identifier = factory.lazy_attribute(lambda n: random_external_doi())
+    link = factory.Faker('uri')
+
+    class Meta:
+        model = Reference
+
+    @factory.lazy_attribute
+    def citation(self):
+        faker = Faker()
+        return '<em>{}</em> {} <b>{}</b>, {} ({})'.format(
+            faker.sentence(),
+            random_external_journal_abbrev(),
+            random.randint(1, 100),
+            random.randint(1, 100),
+            faker.year())
+
+
 class JournalFactory(factory.django.DjangoModelFactory):
     name = factory.Iterator(SCIPOST_JOURNALS, getter=lambda c: c[0])
     doi_label = factory.Iterator(SCIPOST_JOURNALS, getter=lambda c: c[0])
@@ -20,25 +43,21 @@ class JournalFactory(factory.django.DjangoModelFactory):
 
     class Meta:
         model = Journal
-        django_get_or_create = ('name', 'doi_label',)
+        django_get_or_create = ('name',)
+
+    @factory.lazy_attribute
+    def structure(self):
+        if self.name == SCIPOST_JOURNAL_PHYSICS_LECTURE_NOTES:
+            return INDIVIDUAL_PUBLCATIONS
+        return ISSUES_AND_VOLUMES
 
 
 class VolumeFactory(factory.django.DjangoModelFactory):
     in_journal = factory.SubFactory(JournalFactory)
-    number = 9999
-    doi_label = factory.Faker('md5')
-
-    @factory.post_generation
-    def doi(self, create, extracted, **kwargs):
-        self.number = self.in_journal.volume_set.count()
-        self.doi_label = self.in_journal.doi_label + '.' + str(self.number)
-
-    @factory.post_generation
-    def dates(self, create, extracted, **kwargs):
-        timezone.now()
-        self.start_date = Faker().date_time_between(start_date="-3y", end_date="now",
-                                                    tzinfo=pytz.UTC)
-        self.until_date = self.start_date + datetime.timedelta(weeks=26)
+    doi_label = factory.lazy_attribute(lambda o: '%s.%i' % (o.in_journal.doi_label, o.number))
+    number = factory.lazy_attribute(lambda o: o.in_journal.volumes.count() + 1)
+    start_date = factory.Faker('date_time_this_decade')
+    until_date = factory.lazy_attribute(lambda o: o.start_date + datetime.timedelta(weeks=26))
 
     class Meta:
         model = Volume
@@ -47,21 +66,12 @@ class VolumeFactory(factory.django.DjangoModelFactory):
 
 class IssueFactory(factory.django.DjangoModelFactory):
     in_volume = factory.Iterator(Volume.objects.all())
-    number = 9999
-    doi_label = factory.Faker('md5')
+    number = factory.LazyAttribute(lambda o: o.in_volume.issues.count() + 1)
+    doi_label = factory.LazyAttribute(lambda o: '%s.%i' % (o.in_volume.doi_label, o.number))
 
-    @factory.post_generation
-    def doi(self, create, extracted, **kwargs):
-        self.number = self.in_volume.issue_set.count()
-        self.doi_label = self.in_volume.doi_label + '.' + str(self.number)
-
-    @factory.post_generation
-    def dates(self, create, extracted, **kwargs):
-        timezone.now()
-        self.start_date = Faker().date_time_between(start_date=self.in_volume.start_date,
-                                                    end_date=self.in_volume.until_date,
-                                                    tzinfo=pytz.UTC)
-        self.until_date = self.start_date + datetime.timedelta(weeks=4)
+    start_date = factory.LazyAttribute(lambda o: Faker().date_time_between(
+        start_date=o.in_volume.start_date, end_date=o.in_volume.until_date, tzinfo=pytz.UTC))
+    until_date = factory.LazyAttribute(lambda o: o.start_date + datetime.timedelta(weeks=4))
 
     class Meta:
         model = Issue
@@ -69,43 +79,99 @@ class IssueFactory(factory.django.DjangoModelFactory):
 
 
 class PublicationFactory(factory.django.DjangoModelFactory):
-    accepted_submission = factory.SubFactory(PublishedSubmissionFactory)
+    accepted_submission = factory.SubFactory(
+        PublishedSubmissionFactory, generate_publication=False)
     paper_nr = 9999
-    pdf_file = Faker().file_name(extension='pdf')
-    in_issue = factory.Iterator(Issue.objects.all())
-    submission_date = factory.Faker('date')
-    acceptance_date = factory.Faker('date')
-    publication_date = factory.Faker('date')
-    doi_label = factory.Faker('md5')
+    pdf_file = factory.Faker('file_name', extension='pdf')
+    status = PUBLICATION_PUBLISHED
+    submission_date = factory.Faker('date_this_year')
+    acceptance_date = factory.Faker('date_this_year')
+    publication_date = factory.Faker('date_this_year')
+
+    discipline = factory.LazyAttribute(lambda o: o.accepted_submission.discipline)
+    domain = factory.LazyAttribute(lambda o: o.accepted_submission.domain)
+    subject_area = factory.LazyAttribute(lambda o: o.accepted_submission.subject_area)
+    title = factory.LazyAttribute(lambda o: o.accepted_submission.title)
+    abstract = factory.LazyAttribute(lambda o: o.accepted_submission.abstract)
+
+    # Dates
+    submission_date = factory.LazyAttribute(lambda o: o.accepted_submission.submission_date)
+    acceptance_date = factory.LazyAttribute(lambda o: o.accepted_submission.latest_activity)
+    publication_date = factory.LazyAttribute(lambda o: o.accepted_submission.latest_activity)
+    latest_activity = factory.LazyAttribute(lambda o: o.accepted_submission.latest_activity)
+
+    # Authors
+    author_list = factory.LazyAttribute(lambda o: o.accepted_submission.author_list)
+
+    class Meta:
+        model = Publication
+        django_get_or_create = ('accepted_submission', )
+
+    class Params:
+        journal = None
+
+    @factory.lazy_attribute
+    def in_issue(self):
+        # Make sure Issues, Journals and doi are correct.
+        if self.journal:
+            journal = Journal.objects.get(name=self.journal)
+        else:
+            journal = Journal.objects.order_by('?').first()
+
+        if journal.has_issues:
+            return Issue.objects.for_journal(journal.name).order_by('?').first()
+        return None
+
+    @factory.lazy_attribute
+    def in_journal(self):
+        # Make sure Issues, Journals and doi are correct.
+        if self.journal:
+            journal = Journal.objects.get(name=self.journal)
+        elif not self.in_issue:
+            journal = Journal.objects.has_individual_publications().order_by('?').first()
+        else:
+            return None
+
+        if not journal.has_issues:
+            # Keep this logic in case self.journal is set.
+            return journal
+        return None
+
+    @factory.lazy_attribute
+    def paper_nr(self):
+        if self.in_issue:
+            return self.in_issue.publications.count() + 1
+        elif self.in_journal:
+            return self.in_journal.publications.count() + 1
+
+    @factory.lazy_attribute
+    def doi_label(self):
+        if self.in_issue:
+            return self.in_issue.doi_label + '.' + str(self.paper_nr).rjust(3, '0')
+        elif self.in_journal:
+            return '%s.%i' % (self.in_journal.doi_label, self.paper_nr)
 
     @factory.post_generation
-    def doi(self, create, extracted, **kwargs):
-        paper_nr = self.in_issue.publication_set.count()
-        self.paper_nr = paper_nr
-        self.doi_label = self.in_issue.doi_label + '.' + str(paper_nr).rjust(3, '0')
+    def generate_publication(self, create, extracted, **kwargs):
+        if create and extracted is not False:
+            return
+
+        from journals.factories import PublicationFactory
+        factory.RelatedFactory(
+            PublicationFactory, 'accepted_submission',
+            title=self.title, author_list=self.author_list)
 
     @factory.post_generation
-    def submission_data(self, create, extracted, **kwargs):
-        # Content
-        self.discipline = self.accepted_submission.discipline
-        self.domain = self.accepted_submission.domain
-        self.subject_area = self.accepted_submission.subject_area
-        self.title = self.accepted_submission.title
-        self.abstract = self.accepted_submission.abstract
-
-        # Authors
-        self.author_list = self.accepted_submission.author_list
-        self.authors.add(*self.accepted_submission.authors.all())
-        self.first_author = self.accepted_submission.authors.first()
-        self.authors_claims.add(*self.accepted_submission.authors_claims.all())
-        self.authors_false_claims.add(*self.accepted_submission.authors_false_claims.all())
+    def author_relations(self, create, extracted, **kwargs):
+        if not create:
+            return
 
-        # Dates
-        self.submission_date = self.accepted_submission.latest_activity
-        self.acceptance_date = self.accepted_submission.latest_activity
-        self.publication_date = self.accepted_submission.latest_activity
-        self.latest_activity = self.accepted_submission.latest_activity
+        # Append references
+        for i in range(5):
+            ReferenceFactory(publication=self)
 
-    class Meta:
-        model = Publication
-        django_get_or_create = ('accepted_submission', )
+        # Copy author data from Submission
+        for author in self.accepted_submission.authors.all():
+            self.authors.create(publication=self, contributor=author)
+        self.authors_claims.add(*self.accepted_submission.authors_claims.all())
+        self.authors_false_claims.add(*self.accepted_submission.authors_false_claims.all())
diff --git a/journals/forms.py b/journals/forms.py
index 44462b752ef726690395007f2765d454a0e597fa..3bda2b4d1a31926f423b4cbdc89a037547cf1128 100644
--- a/journals/forms.py
+++ b/journals/forms.py
@@ -1,73 +1,105 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import hashlib
+import os
+import random
 import re
+import string
 
 from datetime import datetime
 
 from django import forms
+from django.conf import settings
 from django.forms import BaseModelFormSet, modelformset_factory
+from django.template import loader
 from django.utils import timezone
 
-from .models import Issue, Publication, Reference, UnregisteredAuthor
+from .constants import STATUS_DRAFT, PUBLICATION_PREPUBLISHED, PUBLICATION_PUBLISHED
+from .exceptions import PaperNumberingError
+from .models import Issue, Publication, Reference, UnregisteredAuthor, PublicationAuthorsTable
+from .utils import JournalUtils
+from .signals import notify_manuscript_published
 
+
+from funders.models import Grant, Funder
+from journals.models import Journal
+from mails.utils import DirectMailUtil
+from production.constants import PROOFS_PUBLISHED
+from production.models import ProductionEvent
+from production.signals import notify_stream_status_change
+from scipost.forms import RequestFormMixin
 from scipost.services import DOICaller
 from submissions.models import Submission
 
 
-class InitiatePublicationForm(forms.Form):
-    accepted_submission = forms.ModelChoiceField(queryset=Submission.objects.accepted())
-    to_be_issued_in = forms.ModelChoiceField(
-        queryset=Issue.objects.filter(until_date__gte=timezone.now()))
-
-    def __init__(self, *args, **kwargs):
-        super(InitiatePublicationForm, self).__init__(*args, **kwargs)
-
-
-class ValidatePublicationForm(forms.ModelForm):
-    class Meta:
-        model = Publication
-        exclude = ['authors', 'authors_claims', 'authors_false_claims',
-                   'metadata', 'metadata_xml',
-                   'latest_activity']
-
-
 class UnregisteredAuthorForm(forms.ModelForm):
     class Meta:
         model = UnregisteredAuthor
         fields = ('first_name', 'last_name')
 
 
-class CitationListBibitemsForm(forms.Form):
+class CitationListBibitemsForm(forms.ModelForm):
     latex_bibitems = forms.CharField(widget=forms.Textarea())
 
+    class Meta:
+        model = Publication
+        fields = ()
+
     def __init__(self, *args, **kwargs):
-        super(CitationListBibitemsForm, self).__init__(*args, **kwargs)
+        super().__init__(*args, **kwargs)
         self.fields['latex_bibitems'].widget.attrs.update(
-            {'rows': 30, 'cols': 50, 'placeholder': 'Paste the .tex bibitems here'})
+            {'placeholder': 'Paste the .tex bibitems here'})
 
     def extract_dois(self):
         entries_list = self.cleaned_data['latex_bibitems']
         entries_list = re.sub(r'(?m)^\%.*\n?', '', entries_list)
         entries_list = entries_list.split('\doi{')
         dois = []
-        nentries = 1
+        n_entry = 1
         for entry in entries_list[1:]:  # drop first bit before first \doi{
             dois.append(
-                {'key': 'ref' + str(nentries),
+                {'key': 'ref' + str(n_entry),
                  'doi': entry.partition('}')[0], }
             )
-            nentries += 1
+            n_entry += 1
         return dois
 
+    def save(self, *args, **kwargs):
+        self.instance.metadata['citation_list'] = self.extract_dois()
+        return super().save(*args, **kwargs)
+
+
+class FundingInfoForm(forms.ModelForm):
+    funding_statement = forms.CharField(widget=forms.Textarea({
+        'placeholder': 'Paste the funding info statement here'}))
 
-class FundingInfoForm(forms.Form):
-    funding_statement = forms.CharField(widget=forms.Textarea())
+    class Meta:
+        model = Publication
+        fields = ()
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        self.fields['funding_statement'].widget.attrs.update({
-            'rows': 10,
-            'cols': 50,
-            'placeholder': 'Paste the funding info statement here'
-        })
+        self.fields['funding_statement'].initial = self.instance.metadata.get('funding_statement')
+
+    def save(self, *args, **kwargs):
+        self.instance.metadata['funding_statement'] = self.cleaned_data['funding_statement']
+        return super().save(*args, **kwargs)
+
+
+class BasePublicationAuthorsTableFormSet(BaseModelFormSet):
+    def save(self, *args, **kwargs):
+        objects = super().save(*args, **kwargs)
+        for form in self.ordered_forms:
+            form.instance.order = form.cleaned_data['ORDER']
+            form.instance.save()
+        return objects
+
+
+PublicationAuthorOrderingFormSet = modelformset_factory(
+    PublicationAuthorsTable, fields=(), can_order=True, extra=0,
+    formset=BasePublicationAuthorsTableFormSet)
 
 
 class CreateMetadataXMLForm(forms.ModelForm):
@@ -76,11 +108,126 @@ class CreateMetadataXMLForm(forms.ModelForm):
         fields = ['metadata_xml']
 
     def __init__(self, *args, **kwargs):
+        kwargs['initial'] = {
+            'metadata_xml': self.new_xml(kwargs.get('instance'))
+        }
+        super().__init__(*args, **kwargs)
+
+    def save(self, *args, **kwargs):
+        self.instance.latest_metadata_update = timezone.now()
+        return super().save(*args, **kwargs)
+
+    def new_xml(self, publication):
+        """
+        Create new XML structure, return as a string
+        """
+        # Create a doi_batch_id
+        salt = ""
+        for i in range(5):
+            salt = salt + random.choice(string.ascii_letters)
+        salt = salt.encode('utf8')
+        idsalt = publication.title[:10]
+        idsalt = idsalt.encode('utf8')
+        doi_batch_id = hashlib.sha1(salt+idsalt).hexdigest()
+
+        funders = (Funder.objects.filter(grant__in=publication.grants.all())
+                   | publication.funders_generic.all()).distinct()
+
+        # Render from template
+        template = loader.get_template('xml/publication_crossref.html')
+        context = {
+            'publication': publication,
+            'doi_batch_id': doi_batch_id,
+            'deposit_email': settings.CROSSREF_DEPOSIT_EMAIL,
+            'funders': funders,
+        }
+        return template.render(context)
+
+
+class CreateMetadataDOAJForm(forms.ModelForm):
+    class Meta:
+        model = Publication
+        fields = ['metadata_DOAJ']
+
+    def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop('request')
+        kwargs['initial'] = {
+            'metadata_DOAJ': self.generate(kwargs.get('instance'))
+        }
         super().__init__(*args, **kwargs)
-        self.fields['metadata_xml'].widget.attrs.update({
-            'rows': 50,
-            'cols': 50
-        })
+
+    def generate(self, publication):
+        if publication.in_issue:
+            issn = str(publication.in_issue.in_volume.in_journal.issn)
+        else:
+            issn = str(publication.in_journal.issn)
+        md = {
+            'bibjson': {
+                'author': [{'name': publication.author_list}],
+                'title': publication.title,
+                'abstract': publication.abstract,
+                'year': publication.publication_date.strftime('%Y'),
+                'month': publication.publication_date.strftime('%m'),
+                'start_page': publication.get_paper_nr(),
+                'identifier': [
+                    {
+                        'type': 'eissn',
+                        'id': issn
+                    },
+                    {
+                        'type': 'doi',
+                        'id': publication.doi_string
+                    }
+                ],
+                'link': [
+                    {
+                        'url': self.request.build_absolute_uri(publication.get_absolute_url()),
+                        'type': 'fulltext',
+                    }
+                ],
+            }
+        }
+        if publication.in_issue:
+            md['journal'] = {
+                'publisher': 'SciPost',
+                'volume': str(publication.in_issue.in_volume.number),
+                'number': str(publication.in_issue.number),
+                'identifier': [{
+                    'type': 'eissn',
+                    'id': issn
+                }],
+                'license': [
+                    {
+                        'url': self.request.build_absolute_uri(
+                            publication.in_issue.in_volume.in_journal.get_absolute_url()),
+                        'open_access': 'true',
+                        'type': publication.get_cc_license_display(),
+                        'title': publication.get_cc_license_display(),
+                    }
+                ],
+                'language': ['EN'],
+                'title': publication.in_issue.in_volume.in_journal.get_name_display(),
+            }
+        else:
+            md['journal'] = {
+                'publisher': 'SciPost',
+                'identifier': [{
+                    'type': 'eissn',
+                    'id': issn
+                }],
+                'license': [
+                    {
+                        'url': self.request.build_absolute_uri(
+                            publication.in_journal.get_absolute_url()),
+                        'open_access': 'true',
+                        'type': publication.get_cc_license_display(),
+                        'title': publication.get_cc_license_display(),
+                    }
+                ],
+                'language': ['EN'],
+                'title': publication.in_journal.get_name_display(),
+            }
+        return md
 
 
 class BaseReferenceFormSet(BaseModelFormSet):
@@ -171,3 +318,345 @@ class ReferenceForm(forms.ModelForm):
 
 ReferenceFormSet = modelformset_factory(Reference, formset=BaseReferenceFormSet,
                                         form=ReferenceForm, can_delete=True)
+
+
+class DraftPublicationForm(forms.ModelForm):
+    """
+    This Form is used by the Production Supervisors to create a new Publication object
+    and prefill all data. It is only able to create a `draft` version of a Publication object.
+    """
+    class Meta:
+        model = Publication
+        fields = [
+            'doi_label',
+            'pdf_file',
+            'in_issue',
+            'paper_nr',
+            'title',
+            'author_list',
+            'abstract',
+            'discipline',
+            'domain',
+            'subject_area',
+            'secondary_areas',
+            'cc_license',
+            'BiBTeX_entry',
+            'submission_date',
+            'acceptance_date',
+            'publication_date']
+
+    def __init__(self, data=None, arxiv_identifier_w_vn_nr=None, issue_id=None, *args, **kwargs):
+        # Use separate instance to be able to prefill the form without any existing Publication
+        self.submission = None
+        self.issue = None
+        self.to_journal = None
+        if arxiv_identifier_w_vn_nr:
+            try:
+                self.submission = Submission.objects.accepted().get(
+                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
+            except Submission.DoesNotExist:
+                self.submission = None
+
+        # Check if the Submission is related to a Journal with individual Publications only
+        if self.submission:
+            try:
+                self.to_journal = Journal.objects.has_individual_publications().get(
+                    name=self.submission.submitted_to_journal)
+            except Journal.DoesNotExist:
+                self.to_journal = None
+
+        # If the Journal is not for individual publications, choose a Issue for Publication
+        if issue_id and not self.to_journal:
+            try:
+                self.issue = self.get_possible_issues().get(id=issue_id)
+            except Issue.DoesNotExist:
+                self.issue = None
+
+        super().__init__(data, *args, **kwargs)
+
+        if kwargs.get('instance') or self.issue or self.to_journal:
+            # When updating: fix in_issue, because many fields are directly related to the issue.
+            del self.fields['in_issue']
+            self.prefill_fields()
+        else:
+            self.fields['in_issue'].queryset = self.get_possible_issues()
+            self.delete_secondary_fields()
+
+    def get_possible_issues(self):
+        issues = Issue.objects.filter(until_date__gte=timezone.now())
+        if self.submission:
+            issues = issues.for_journal(self.submission.submitted_to_journal)
+        return issues
+
+    def delete_secondary_fields(self):
+        """
+        Delete fields from the self.fields dictionary. Later on, this submitted sparse form can
+        be used to prefill these secondary fields.
+        """
+        del self.fields['doi_label']
+        del self.fields['pdf_file']
+        del self.fields['paper_nr']
+        del self.fields['title']
+        del self.fields['author_list']
+        del self.fields['abstract']
+        del self.fields['discipline']
+        del self.fields['domain']
+        del self.fields['subject_area']
+        del self.fields['secondary_areas']
+        del self.fields['cc_license']
+        del self.fields['BiBTeX_entry']
+        del self.fields['submission_date']
+        del self.fields['acceptance_date']
+        del self.fields['publication_date']
+
+    def clean(self):
+        data = super().clean()
+        if not self.instance.id:
+            if self.submission:
+                self.instance.accepted_submission = self.submission
+            if self.issue:
+                self.instance.in_issue = self.issue
+            if self.to_journal:
+                self.instance.in_journal = self.to_journal
+        return data
+
+    def save(self, *args, **kwargs):
+        """
+        Save the Publication object always as a draft and prefill the Publication with
+        related Submission data only when appending the Publication.
+        """
+        do_prefill = False
+        if not self.instance.id:
+            do_prefill = True
+        super().save(*args, **kwargs)
+        if do_prefill:
+            self.first_time_fill()
+        return self.instance
+
+    def first_time_fill(self):
+        """
+        Take over fields from related Submission object. This can only be done after
+        the Publication object has been added to the database due to m2m relations.
+        """
+        self.instance.status = STATUS_DRAFT
+
+        if self.submission:
+            # Copy all existing author and non-author relations to Publication
+            for submission_author in self.submission.authors.all():
+                PublicationAuthorsTable.objects.create(
+                    publication=self.instance, contributor=submission_author)
+            self.instance.authors_claims.add(*self.submission.authors_claims.all())
+            self.instance.authors_false_claims.add(*self.submission.authors_false_claims.all())
+
+        # Add Institutions to the publication related to the current authors
+        for author in self.instance.authors_registered.all():
+            for current_affiliation in author.affiliations.active():
+                self.instance.institutions.add(current_affiliation.institution)
+
+    def prefill_fields(self):
+        if self.submission:
+            self.fields['title'].initial = self.submission.title
+            self.fields['author_list'].initial = self.submission.author_list
+            self.fields['abstract'].initial = self.submission.abstract
+            self.fields['discipline'].initial = self.submission.discipline
+            self.fields['domain'].initial = self.submission.domain
+            self.fields['subject_area'].initial = self.submission.subject_area
+            self.fields['secondary_areas'].initial = self.submission.secondary_areas
+            self.fields['submission_date'].initial = self.submission.submission_date
+            self.fields['acceptance_date'].initial = self.submission.acceptance_date
+            self.fields['publication_date'].initial = timezone.now()
+
+        # Fill data that may be derived from the issue data
+        issue = None
+        if hasattr(self.instance, 'in_issue') and self.instance.in_issue:
+            issue = self.instance.in_issue
+        elif self.issue:
+            issue = self.issue
+        if issue:
+            self.prefill_with_issue(issue)
+
+        # Fill data that may be derived from the issue data
+        journal = None
+        if hasattr(self.instance, 'in_journal') and self.instance.in_journal:
+            journal = self.instance.in_issue
+        elif self.to_journal:
+            journal = self.to_journal
+        if journal:
+            self.prefill_with_journal(journal)
+
+    def prefill_with_issue(self, issue):
+        # Determine next available paper number:
+        paper_nr = Publication.objects.filter(in_issue__in_volume=issue.in_volume).count() + 1
+        if paper_nr > 999:
+            raise PaperNumberingError(paper_nr)
+        self.fields['paper_nr'].initial = str(paper_nr)
+        doi_label = '{journal}.{vol}.{issue}.{paper}'.format(
+            journal=issue.in_volume.in_journal.name,
+            vol=issue.in_volume.number,
+            issue=issue.number,
+            paper=str(paper_nr).rjust(3, '0'))
+        self.fields['doi_label'].initial = doi_label
+
+        doi_string = '10.21468/{doi}'.format(doi=doi_label)
+        bibtex_entry = (
+            '@Article{%s,\n'
+            '\ttitle={{%s},\n'
+            '\tauthor={%s},\n'
+            '\tjournal={%s},\n'
+            '\tvolume={%i},\n'
+            '\tissue={%i},\n'
+            '\tpages={%i},\n'
+            '\tyear={%s},\n'
+            '\tpublisher={SciPost},\n'
+            '\tdoi={%s},\n'
+            '\turl={https://scipost.org/%s},\n'
+            '}'
+        ) % (
+            doi_string,
+            self.submission.title,
+            self.submission.author_list.replace(',', ' and'),
+            issue.in_volume.in_journal.abbreviation_citation,
+            issue.in_volume.number,
+            issue.number,
+            paper_nr,
+            issue.until_date.strftime('%Y'),
+            doi_string,
+            doi_string)
+        self.fields['BiBTeX_entry'].initial = bibtex_entry
+        if not self.instance.BiBTeX_entry:
+            self.instance.BiBTeX_entry = bibtex_entry
+
+    def prefill_with_journal(self, journal):
+        # Determine next available paper number:
+        paper_nr = journal.publications.count() + 1
+        self.fields['paper_nr'].initial = str(paper_nr)
+        doi_label = '{journal}.{paper}'.format(
+            journal=journal.name,
+            paper=paper_nr)
+        self.fields['doi_label'].initial = doi_label
+
+        doi_string = '10.21468/{doi}'.format(doi=doi_label)
+        bibtex_entry = (
+            '@Article{%s,\n'
+            '\ttitle={{%s},\n'
+            '\tauthor={%s},\n'
+            '\tjournal={%s},\n'
+            '\tpages={%i},\n'
+            '\tyear={%s},\n'
+            '\tpublisher={SciPost},\n'
+            '\tdoi={%s},\n'
+            '\turl={https://scipost.org/%s},\n'
+            '}'
+        ) % (
+            doi_string,
+            self.submission.title,
+            self.submission.author_list.replace(',', ' and'),
+            journal.abbreviation_citation,
+            paper_nr,
+            timezone.now().year,
+            doi_string,
+            doi_string)
+        self.fields['BiBTeX_entry'].initial = bibtex_entry
+        if not self.instance.BiBTeX_entry:
+            self.instance.BiBTeX_entry = bibtex_entry
+
+
+class DraftPublicationApprovalForm(forms.ModelForm):
+    class Meta:
+        model = Publication
+        fields = ()
+
+    def save(self, commit=True):
+        self.instance.status = PUBLICATION_PREPUBLISHED
+        if commit:
+            self.instance.save()
+            mail_sender = DirectMailUtil(mail_code='publication_ready', instance=self.instance)
+            mail_sender.send()
+        return self.instance
+
+
+class PublicationGrantsForm(forms.ModelForm):
+    grant = forms.ModelChoiceField(queryset=Grant.objects.none())
+
+    class Meta:
+        model = Publication
+        fields = []
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.fields['grant'].queryset = Grant.objects.exclude(
+            id__in=self.instance.grants.values_list('id', flat=True))
+
+    def save(self, commit=True):
+        if commit:
+            self.instance.grants.add(self.cleaned_data['grant'])
+        return self.instance
+
+
+class PublicationPublishForm(RequestFormMixin, forms.ModelForm):
+    class Meta:
+        model = Publication
+        fields = []
+
+    def move_pdf(self):
+        """
+        To keep the Publication pdfs organized we move the pdfs to their own folder
+        organized by journal and optional issue folder.
+        """
+        initial_path = self.instance.pdf_file.path
+
+        new_dir = ''
+        if self.instance.in_issue:
+            new_dir += self.instance.in_issue.path
+        elif self.instance.in_journal:
+            new_dir += 'SCIPOST_JOURNALS/{name}'.format(name=self.instance.in_journal.name)
+
+        new_dir += '/{paper_nr}'.format(paper_nr=self.instance.get_paper_nr())
+        os.makedirs(settings.MEDIA_ROOT + new_dir, exist_ok=True)
+
+        new_dir += '/{doi}.pdf'.format(doi=self.instance.doi_label.replace('.', '_'))
+        os.rename(initial_path, settings.MEDIA_ROOT + new_dir)
+        self.instance.pdf_file.name = new_dir
+        self.instance.status = PUBLICATION_PUBLISHED
+        self.instance.save()
+
+    def update_submission(self):
+        # Mark the submission as having been published:
+        submission = self.instance.accepted_submission
+        submission.published_as = self.instance
+        submission.status = 'published'
+        submission.save()
+
+        # Add SubmissionEvents
+        submission.add_general_event(
+            'The Submission has been published as %s.' % self.instance.doi_label)
+
+    def update_stream(self):
+        # Update ProductionStream
+        submission = self.instance.accepted_submission
+        if hasattr(submission, 'production_stream'):
+            stream = submission.production_stream
+            stream.status = PROOFS_PUBLISHED
+            stream.save()
+            if self.request.user.production_user:
+                prodevent = ProductionEvent(
+                    stream=stream,
+                    event='status',
+                    comments=' published the manuscript.',
+                    noted_by=self.request.user.production_user
+                )
+                prodevent.save()
+            notify_stream_status_change(self.request.user, stream, False)
+
+    def save(self, commit=True):
+        if commit:
+            self.move_pdf()
+            self.update_submission()
+            self.update_stream()
+
+            # Email authors
+            JournalUtils.load({'publication': self.instance})
+            JournalUtils.send_authors_paper_published_email()
+            notify_manuscript_published(self.request.user, self.instance, False)
+
+        return self.instance
diff --git a/journals/helpers.py b/journals/helpers.py
index 6c097de27734169f18446b14b253ec9923a1059b..36b2819df320c0360d6480efd84b0bf129705461 100644
--- a/journals/helpers.py
+++ b/journals/helpers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from .exceptions import JournalNameError, PaperNumberError
diff --git a/journals/management/__init__.py b/journals/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/journals/management/commands/__init__.py b/journals/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/journals/management/commands/create_issues.py b/journals/management/commands/create_issues.py
new file mode 100644
index 0000000000000000000000000000000000000000..e2165c1dbf0785222b196c0ed8bdda571e4990bd
--- /dev/null
+++ b/journals/management/commands/create_issues.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from journals import factories
+
+
+class Command(BaseCommand):
+    help = 'Create Issue objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Issues to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_issues(kwargs['number'])
+
+    def create_issues(self, n):
+        factories.IssueFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Issues.'.format(n=n)))
diff --git a/journals/management/commands/create_journals.py b/journals/management/commands/create_journals.py
new file mode 100644
index 0000000000000000000000000000000000000000..8d0c34182ea410638173f0bfc3da1a0f32162132
--- /dev/null
+++ b/journals/management/commands/create_journals.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from journals import factories
+
+
+class Command(BaseCommand):
+    help = 'Create Journal objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Journals to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_journals(kwargs['number'])
+
+    def create_journals(self, n):
+        factories.JournalFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Journals.'.format(n=n)))
diff --git a/journals/management/commands/create_publications.py b/journals/management/commands/create_publications.py
new file mode 100644
index 0000000000000000000000000000000000000000..0da7e41c135db2cdbd257d73fe01ecc3f446573c
--- /dev/null
+++ b/journals/management/commands/create_publications.py
@@ -0,0 +1,34 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from journals.constants import SCIPOST_JOURNALS_SUBMIT
+from journals.factories import PublicationFactory
+
+
+class Command(BaseCommand):
+    help = 'Create random Publication objects by using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of publications to add',
+        )
+        parser.add_argument(
+            '--journal', choices=[i[0] for i in SCIPOST_JOURNALS_SUBMIT],
+            action='store', dest='journal',
+            help='The name of the specific Journal to add the Publications to',
+        )
+
+    def handle(self, *args, **kwargs):
+        if kwargs['number'] > 0:
+            journal = None
+            if kwargs.get('journal'):
+                journal = kwargs['journal']
+            self.create_publications(kwargs['number'], journal=journal)
+
+    def create_publications(self, n, journal=None):
+        PublicationFactory.create_batch(n, journal=journal)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Publications.'.format(n=n)))
diff --git a/journals/management/commands/create_volumes.py b/journals/management/commands/create_volumes.py
new file mode 100644
index 0000000000000000000000000000000000000000..3bd1217d57d51342a82f91db5249730fedd6caf9
--- /dev/null
+++ b/journals/management/commands/create_volumes.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from journals import factories
+
+
+class Command(BaseCommand):
+    help = 'Create Volume objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Volumes to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_volumes(kwargs['number'])
+
+    def create_volumes(self, n):
+        factories.VolumeFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Volumes.'.format(n=n)))
diff --git a/journals/managers.py b/journals/managers.py
index 0b058c1b3a78d47baca5c366cf9d94c8a71e60a3..d8c9725ad0d477ba9b993bbbfb3a43b68d7d6784 100644
--- a/journals/managers.py
+++ b/journals/managers.py
@@ -1,53 +1,62 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
-from django.http import Http404
 from django.utils import timezone
 
-from .constants import STATUS_PUBLISHED, STATUS_DRAFT
+from .constants import STATUS_PUBLISHED, STATUS_DRAFT, PUBLICATION_PUBLISHED, ISSUES_AND_VOLUMES,\
+    ISSUES_ONLY, INDIVIDUAL_PUBLCATIONS
 
 
-class JournalManager(models.Manager):
+class JournalQuerySet(models.QuerySet):
     def active(self):
         return self.filter(active=True)
 
+    def has_issues(self):
+        return self.filter(structure__in=(ISSUES_AND_VOLUMES, ISSUES_ONLY))
+
+    def has_individual_publications(self):
+        return self.filter(structure=INDIVIDUAL_PUBLCATIONS)
 
-class IssueManager(models.Manager):
-    def get_published(self, *args, **kwargs):
-        try:
-            return self.published(*args, **kwargs)[0]
-        except IndexError:
-            raise Http404
 
-    def published(self, journal=None, **kwargs):
-        issues = self.filter(status=STATUS_PUBLISHED, **kwargs)
-        if journal:
-            issues.filter(in_volume__in_journal=journal)
-        return issues
+class IssueQuerySet(models.QuerySet):
+    def published(self):
+        return self.filter(status=STATUS_PUBLISHED)
 
-    def in_draft(self, journal=None, **kwargs):
-        issues = self.filter(status=STATUS_DRAFT, **kwargs)
-        if journal:
-            issues.filter(in_volume__in_journal=journal)
-        return issues
+    def in_draft(self):
+        return self.filter(status=STATUS_DRAFT)
 
-    def get_current_issue(self, *args, **kwargs):
-        return self.published(start_date__lte=timezone.now(),
-                              until_date__gte=timezone.now(),
-                              **kwargs).order_by('-until_date').first()
+    def for_journal(self, journal_name):
+        return self.filter(
+            models.Q(in_volume__in_journal__name=journal_name) |
+            models.Q(in_journal__name=journal_name))
 
-    def get_last_filled_issue(self, *args, **kwargs):
-        return self.published(publication__isnull=False,
-                              **kwargs).order_by('-until_date').first()
+    def get_current_issue(self):
+        return self.published(
+            start_date__lte=timezone.now(), until_date__gte=timezone.now()).first()
 
 
 class PublicationQuerySet(models.QuerySet):
-    def get_published(self, *args, **kwargs):
-        try:
-            return self.published(*args, **kwargs)[0]
-        except IndexError:
-            raise Http404
+    def published(self):
+        return self.filter(status=PUBLICATION_PUBLISHED).filter(
+            models.Q(in_issue__status=STATUS_PUBLISHED) | models.Q(in_journal__active=True))
+
+    def unpublished(self):
+        return self.exclude(status=PUBLICATION_PUBLISHED)
+
+    def in_draft(self):
+        return self.filter(in_issue__status=STATUS_DRAFT)
+
+    def drafts(self):
+        return self.filter(status=STATUS_DRAFT)
 
-    def published(self, **kwargs):
-        return self.filter(in_issue__status=STATUS_PUBLISHED, **kwargs)
+    def for_subject(self, subject_code):
+        return self.filter(
+            models.Q(subject_area=subject_code) |
+            models.Q(secondary_areas__contains=[subject_code]))
 
-    def in_draft(self, **kwargs):
-        return self.filter(in_issue__status=STATUS_DRAFT, **kwargs)
+    def for_journal(self, journal_name):
+        return self.filter(
+            models.Q(in_issue__in_volume__in_journal__name=journal_name) |
+            models.Q(in_journal__name=journal_name))
diff --git a/journals/migrations/0013_auto_20180216_0850.py b/journals/migrations/0013_auto_20180216_0850.py
new file mode 100644
index 0000000000000000000000000000000000000000..15e86e0e3936a6f1715cec3480a31e601bd52914
--- /dev/null
+++ b/journals/migrations/0013_auto_20180216_0850.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-16 07:50
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0012_auto_20180212_1950'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='publication',
+            name='authors_old',
+        ),
+        migrations.RemoveField(
+            model_name='publication',
+            name='authors_unregistered_old',
+        ),
+        migrations.RemoveField(
+            model_name='publication',
+            name='first_author',
+        ),
+        migrations.RemoveField(
+            model_name='publication',
+            name='first_author_unregistered',
+        ),
+    ]
diff --git a/journals/migrations/0014_publication_status.py b/journals/migrations/0014_publication_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a10cb32d3d71e98d10230537c9ec76a05e038a6
--- /dev/null
+++ b/journals/migrations/0014_publication_status.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-02 13:03
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0013_auto_20180216_0850'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='publication',
+            name='status',
+            field=models.CharField(choices=[('draft', 'Draft'), ('prepub', 'Pre-published'), ('pub', 'Published')], default='pub', max_length=8),
+        ),
+    ]
diff --git a/journals/migrations/0015_auto_20180302_1404.py b/journals/migrations/0015_auto_20180302_1404.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1efbff642228e4db55409f7a6a2268b56672584
--- /dev/null
+++ b/journals/migrations/0015_auto_20180302_1404.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-02 13:04
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0014_publication_status'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='publication',
+            name='status',
+            field=models.CharField(choices=[('draft', 'Draft'), ('prepub', 'Pre-published'), ('pub', 'Published')], default='draft', max_length=8),
+        ),
+    ]
diff --git a/journals/migrations/0016_auto_20180303_0918.py b/journals/migrations/0016_auto_20180303_0918.py
new file mode 100644
index 0000000000000000000000000000000000000000..f9448c4ab78a4ec88146dd6d6dd9d8a4cfd8fcb2
--- /dev/null
+++ b/journals/migrations/0016_auto_20180303_0918.py
@@ -0,0 +1,38 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-03 08:18
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+def null_to_blank(apps, schema_editor):
+    Publication = apps.get_model('journals', 'Publication')
+    for pub in Publication.objects.all():
+        if pub.BiBTeX_entry is None:
+            pub.BiBTeX_entry = ''
+        if pub.metadata_xml is None:
+            pub.metadata_xml = ''
+        pub.save()
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0015_auto_20180302_1404'),
+    ]
+
+    operations = [
+        migrations.RunPython(null_to_blank),
+        migrations.AlterField(
+            model_name='publication',
+            name='BiBTeX_entry',
+            field=models.TextField(blank=True, default=''),
+            preserve_default=False,
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='metadata_xml',
+            field=models.TextField(blank=True, default=''),
+            preserve_default=False,
+        ),
+    ]
diff --git a/journals/migrations/0017_auto_20180310_1103.py b/journals/migrations/0017_auto_20180310_1103.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5ba40965f1d7c49a56cedc586a25357f5b8bd9b
--- /dev/null
+++ b/journals/migrations/0017_auto_20180310_1103.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:03
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0016_auto_20180303_0918'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='journal',
+            name='_has_issues',
+            field=models.BooleanField(default=True, verbose_name='Use Issues to group Publications'),
+        ),
+        migrations.AddField(
+            model_name='journal',
+            name='_has_volumes',
+            field=models.BooleanField(default=True, verbose_name='Use Issues to group Publications (if True, the use of Issues is required)'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_issue',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='publications', to='journals.Issue'),
+        ),
+    ]
diff --git a/journals/migrations/0018_auto_20180310_1112.py b/journals/migrations/0018_auto_20180310_1112.py
new file mode 100644
index 0000000000000000000000000000000000000000..028c046820795fa14e37b882febfced9ab715ba5
--- /dev/null
+++ b/journals/migrations/0018_auto_20180310_1112.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:12
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0017_auto_20180310_1103'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='issue',
+            name='in_journal',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='journals.Journal'),
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_volume',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='journals.Volume'),
+        ),
+    ]
diff --git a/journals/migrations/0019_auto_20180310_1115.py b/journals/migrations/0019_auto_20180310_1115.py
new file mode 100644
index 0000000000000000000000000000000000000000..71ac22ab4b8851c23c3db53b9e151429a6481334
--- /dev/null
+++ b/journals/migrations/0019_auto_20180310_1115.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0018_auto_20180310_1112'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='publication',
+            name='in_journal',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='publications', to='journals.Journal'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_issue',
+            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='publications', to='journals.Issue'),
+        ),
+    ]
diff --git a/journals/migrations/0020_auto_20180310_1137.py b/journals/migrations/0020_auto_20180310_1137.py
new file mode 100644
index 0000000000000000000000000000000000000000..3e800f5de4a291096dfd7f1a302503a578bfe937
--- /dev/null
+++ b/journals/migrations/0020_auto_20180310_1137.py
@@ -0,0 +1,46 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0019_auto_20180310_1115'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='journal',
+            old_name='_has_issues',
+            new_name='has_issues',
+        ),
+        migrations.RenameField(
+            model_name='journal',
+            old_name='_has_volumes',
+            new_name='has_volumes',
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_journal',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.PROTECT, to='journals.Journal'),
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_volume',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.PROTECT, to='journals.Volume'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_issue',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Issue or Journal to the Publication', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='publications', to='journals.Issue'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_journal',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Issue or Journal to the Publication', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='publications', to='journals.Journal'),
+        ),
+    ]
diff --git a/journals/migrations/0021_auto_20180310_1137.py b/journals/migrations/0021_auto_20180310_1137.py
new file mode 100644
index 0000000000000000000000000000000000000000..70c8a6fd2ebcc3628790bf1de87db5743ac33bd8
--- /dev/null
+++ b/journals/migrations/0021_auto_20180310_1137.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0020_auto_20180310_1137'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='journal',
+            name='has_volumes',
+            field=models.BooleanField(default=True, verbose_name='Use Volumes to group Publications'),
+        ),
+    ]
diff --git a/journals/migrations/0022_auto_20180310_1154.py b/journals/migrations/0022_auto_20180310_1154.py
new file mode 100644
index 0000000000000000000000000000000000000000..94624cc27b658c23a24d5cc75362314c9686ffd9
--- /dev/null
+++ b/journals/migrations/0022_auto_20180310_1154.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 10:54
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0021_auto_20180310_1137'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='journal',
+            name='has_issues',
+        ),
+        migrations.RemoveField(
+            model_name='journal',
+            name='has_volumes',
+        ),
+    ]
diff --git a/journals/migrations/0023_journal_structure.py b/journals/migrations/0023_journal_structure.py
new file mode 100644
index 0000000000000000000000000000000000000000..0bfb0012cc2548ce1d1db0a428b2ac810d4fcb9b
--- /dev/null
+++ b/journals/migrations/0023_journal_structure.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 11:05
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0022_auto_20180310_1154'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='journal',
+            name='structure',
+            field=models.CharField(choices=[('IV', 'Issues and Volumes'), ('IO', 'Issues only'), ('IP', 'Individual Publications')], default='IV', max_length=2),
+        ),
+    ]
diff --git a/journals/migrations/0024_auto_20180310_1740.py b/journals/migrations/0024_auto_20180310_1740.py
new file mode 100644
index 0000000000000000000000000000000000000000..70cd9bdf95702d28414fd9199a8389fa51e40c68
--- /dev/null
+++ b/journals/migrations/0024_auto_20180310_1740.py
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-10 16:40
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0023_journal_structure'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='issue',
+            options={'ordering': ('-until_date',)},
+        ),
+        migrations.AlterModelOptions(
+            name='publication',
+            options={'ordering': ('-publication_date', '-paper_nr')},
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_journal',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='issues', to='journals.Journal'),
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_volume',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='issues', to='journals.Volume'),
+        ),
+        migrations.AlterField(
+            model_name='journal',
+            name='structure',
+            field=models.CharField(choices=[('IV', 'Issues and Volumes'), ('IP', 'Individual Publications')], default='IV', max_length=2),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='doi_label',
+            field=models.CharField(db_index=True, max_length=200, unique=True, validators=[django.core.validators.RegexValidator('^[a-zA-Z]+.[0-9]+(.[0-9]+.[0-9]{3,})?$', 'Only valid DOI expressions are allowed (`[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,}` or `[a-zA-Z]+.[0-9]+`)')]),
+        ),
+        migrations.AlterField(
+            model_name='volume',
+            name='in_journal',
+            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='volumes', to='journals.Journal'),
+        ),
+    ]
diff --git a/journals/migrations/0025_auto_20180314_1637.py b/journals/migrations/0025_auto_20180314_1637.py
new file mode 100644
index 0000000000000000000000000000000000000000..35b306e63723cd7b0b0ec6db28a0d0c5317b7c59
--- /dev/null
+++ b/journals/migrations/0025_auto_20180314_1637.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-14 15:37
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0024_auto_20180310_1740'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='issue',
+            name='in_journal',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='issues', to='journals.Journal'),
+        ),
+        migrations.AlterField(
+            model_name='issue',
+            name='in_volume',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Volume or Journal to the Issue', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='issues', to='journals.Volume'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_issue',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Issue or Journal to the Publication', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='publications', to='journals.Issue'),
+        ),
+        migrations.AlterField(
+            model_name='publication',
+            name='in_journal',
+            field=models.ForeignKey(blank=True, help_text='Assign either an Issue or Journal to the Publication', null=True, on_delete=django.db.models.deletion.CASCADE, related_name='publications', to='journals.Journal'),
+        ),
+    ]
diff --git a/journals/migrations/0026_auto_20180327_1937.py b/journals/migrations/0026_auto_20180327_1937.py
new file mode 100644
index 0000000000000000000000000000000000000000..72bcb0c8bcc9c315db7345dc95842eb0141714eb
--- /dev/null
+++ b/journals/migrations/0026_auto_20180327_1937.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-27 17:37
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0025_auto_20180314_1637'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='volume',
+            options={'ordering': ('-until_date',)},
+        ),
+    ]
diff --git a/journals/migrations/0027_auto_20180414_2053.py b/journals/migrations/0027_auto_20180414_2053.py
new file mode 100644
index 0000000000000000000000000000000000000000..165078a172a03bde9e214369a8d6f04226dcd2ef
--- /dev/null
+++ b/journals/migrations/0027_auto_20180414_2053.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 18:53
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('journals', '0026_auto_20180327_1937'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='publication',
+            name='doi_label',
+            field=models.CharField(db_index=True, max_length=200, unique=True, validators=[django.core.validators.RegexValidator('^(SciPostPhysProc|SciPostPhysSel|SciPostPhysLectNotes|SciPostPhys).[0-9]+(.[0-9]+.[0-9]{3,})?$', 'Only valid DOI expressions are allowed (`[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,}` or `[a-zA-Z]+.[0-9]+`)')]),
+        ),
+    ]
diff --git a/journals/mixins.py b/journals/mixins.py
new file mode 100644
index 0000000000000000000000000000000000000000..e4ab4013cbd1a75c4bec589a34bcc1c9c2cc04e3
--- /dev/null
+++ b/journals/mixins.py
@@ -0,0 +1,26 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from .models import Publication
+
+from scipost.mixins import PermissionsMixin
+
+
+class PublicationMixin:
+    model = Publication
+    slug_field = slug_url_kwarg = 'doi_label'
+
+
+class ProdSupervisorPublicationPermissionMixin(PermissionsMixin):
+    """
+    This will give permission to Production Supervisors if Publication is in_draft.
+    If Publication is not in draft, it will only give permission to administrators.
+    """
+    permission_required = 'scipost.can_draft_publication'
+
+    def has_permission(self):
+        has_perm = super().has_permission()
+        if has_perm and self.get_object().is_draft:
+            return True
+        return self.request.user.has_perm('scipost.can_publish_accepted_submission')
diff --git a/journals/models.py b/journals/models.py
index 41cd2052cc1ad1bdaba0b9852ff8219190edc51e..e5468f362bca0bd53a6edc5c57ae1b7b15036e75 100644
--- a/journals/models.py
+++ b/journals/models.py
@@ -1,6 +1,11 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.postgres.fields import JSONField
+from django.core.exceptions import ValidationError
 from django.db import models
 from django.db.models import Avg, F
 from django.utils import timezone
@@ -9,10 +14,11 @@ from django.urls import reverse
 from .behaviors import doi_journal_validator, doi_volume_validator,\
                        doi_issue_validator, doi_publication_validator
 from .constants import SCIPOST_JOURNALS, SCIPOST_JOURNALS_DOMAINS,\
-                       STATUS_DRAFT, STATUS_PUBLISHED, ISSUE_STATUSES,\
-                       CCBY4, CC_LICENSES, CC_LICENSES_URI
+                       STATUS_DRAFT, STATUS_PUBLISHED, ISSUE_STATUSES, PUBLICATION_PUBLISHED,\
+                       CCBY4, CC_LICENSES, CC_LICENSES_URI, PUBLICATION_STATUSES,\
+                       JOURNAL_STRUCTURE, ISSUES_AND_VOLUMES, ISSUES_ONLY
 from .helpers import paper_nr_string, journal_name_abbrev_citation
-from .managers import IssueManager, PublicationQuerySet, JournalManager
+from .managers import IssueQuerySet, PublicationQuerySet, JournalQuerySet
 
 from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS
 from scipost.fields import ChoiceArrayField
@@ -71,27 +77,56 @@ class PublicationAuthorsTable(models.Model):
 
 
 class Journal(models.Model):
+    """
+    Journal is a container of Publications with a unique issn and doi_label.
+    Publications may be categorized into issues or issues and volumes.
+    """
     name = models.CharField(max_length=100, choices=SCIPOST_JOURNALS, unique=True)
     doi_label = models.CharField(max_length=200, unique=True, db_index=True,
                                  validators=[doi_journal_validator])
     issn = models.CharField(max_length=16, default='2542-4653', blank=True)
     active = models.BooleanField(default=True)
+    structure = models.CharField(max_length=2,
+                                 choices=JOURNAL_STRUCTURE, default=ISSUES_AND_VOLUMES)
 
-    objects = JournalManager()
+    objects = JournalQuerySet.as_manager()
 
     def __str__(self):
         return self.get_name_display()
 
+    def get_absolute_url(self):
+        return reverse('scipost:landing_page', args=(self.doi_label,))
+
     @property
     def doi_string(self):
         return '10.21468/' + self.doi_label
 
-    def get_absolute_url(self):
-        return reverse('scipost:landing_page', args=[self.doi_label])
+    @property
+    def has_issues(self):
+        return self.structure in (ISSUES_AND_VOLUMES, ISSUES_ONLY)
+
+    @property
+    def has_volumes(self):
+        return self.structure in (ISSUES_AND_VOLUMES)
 
-    def get_abbreviation_citation(self):
+    @property
+    def abbreviation_citation(self):
         return journal_name_abbrev_citation(self.name)
 
+    def get_issues(self):
+        if self.structure == ISSUES_AND_VOLUMES:
+            return Issue.objects.filter(in_volume__in_journal=self)
+        elif self.structure == ISSUES_ONLY:
+            return self.issues.all()
+        return Issue.objects.none()
+
+    def get_publications(self):
+        if self.structure == ISSUES_AND_VOLUMES:
+            return Publication.objects.filter(in_issue__in_volume__in_journal=self)
+        elif self.structure == ISSUES_ONLY:
+            return Publication.objects.filter(in_issue__in_journal=self)
+        return self.publications.all()
+
     def nr_publications(self, tier=None):
         publications = Publication.objects.filter(in_issue__in_volume__in_journal=self)
         if tier:
@@ -125,6 +160,9 @@ class Journal(models.Model):
 
 
 class Volume(models.Model):
+    """
+    A Volume may be used as a subgroup of Publications related to a specific Issue object.
+    """
     in_journal = models.ForeignKey('journals.Journal', on_delete=models.CASCADE)
     number = models.PositiveSmallIntegerField()
     start_date = models.DateField(default=timezone.now)
@@ -133,11 +171,23 @@ class Volume(models.Model):
                                  validators=[doi_volume_validator])
 
     class Meta:
+        default_related_name = 'volumes'
+        ordering = ('-until_date',)
         unique_together = ('number', 'in_journal')
 
     def __str__(self):
         return str(self.in_journal) + ' Vol. ' + str(self.number)
 
+    def clean(self):
+        """
+        Check if the Volume is assigned to a valid Journal.
+        """
+        if not self.in_journal.has_volumes:
+            raise ValidationError({
+                'in_journal': ValidationError('This journal does not allow for the use of Volumes',
+                                              code='invalid'),
+            })
+
     @property
     def doi_string(self):
         return '10.21468/' + self.doi_label
@@ -175,30 +225,59 @@ class Volume(models.Model):
 
 
 class Issue(models.Model):
-    in_volume = models.ForeignKey('journals.Volume', on_delete=models.CASCADE)
+    """
+    An Issue may be used as a subgroup of Publications related to a specific Journal object.
+    """
+    in_journal = models.ForeignKey(
+        'journals.Journal', on_delete=models.CASCADE, null=True, blank=True,
+        help_text='Assign either an Volume or Journal to the Issue')
+    in_volume = models.ForeignKey(
+        'journals.Volume', on_delete=models.CASCADE, null=True, blank=True,
+        help_text='Assign either an Volume or Journal to the Issue')
     number = models.PositiveSmallIntegerField()
     start_date = models.DateField(default=timezone.now)
     until_date = models.DateField(default=timezone.now)
     status = models.CharField(max_length=20, choices=ISSUE_STATUSES, default=STATUS_PUBLISHED)
     doi_label = models.CharField(max_length=200, unique=True, db_index=True,
                                  validators=[doi_issue_validator])
+
     # absolute path on filesystem: (JOURNALS_DIR)/journal/vol/issue/
     path = models.CharField(max_length=200)
 
-    objects = IssueManager()
+    objects = IssueQuerySet.as_manager()
 
     class Meta:
+        default_related_name = 'issues'
+        ordering = ('-until_date',)
         unique_together = ('number', 'in_volume')
 
     def __str__(self):
         text = self.issue_number
         if hasattr(self, 'proceedings'):
             return text
-        text += self.period_as_string()
+        text += ' (%s)' % self.period_as_string
         if self.status == STATUS_DRAFT:
             text += ' (In draft)'
         return text
 
+    def clean(self):
+        """
+        Check if either a Journal or Volume is assigned to the Issue, else the Issue be floating
+        like Musk's red Roadster.
+        """
+        if not (self.in_journal or self.in_volume):
+            raise ValidationError({
+                'in_journal': ValidationError('Either assign a Journal or Volume to this Issue',
+                                              code='required'),
+                'in_volume': ValidationError('Either assign a Journal or Volume to this Issue',
+                                             code='required'),
+            })
+        if self.in_journal and not self.in_journal.has_issues:
+            raise ValidationError({
+                'in_journal': ValidationError('This journal does not allow for the use of Issues',
+                                              code='invalid'),
+            })
+
     def get_absolute_url(self):
         return reverse('scipost:issue_detail', args=[self.doi_label])
 
@@ -210,15 +289,15 @@ class Issue(models.Model):
     def issue_number(self):
         return '%s issue %s' % (self.in_volume, self.number)
 
+    @property
     def short_str(self):
         return 'Vol. %s issue %s' % (self.in_volume.number, self.number)
 
+    @property
     def period_as_string(self):
         if self.start_date.month == self.until_date.month:
-            return ' (%s %s)' % (self.until_date.strftime('%B'), self.until_date.strftime('%Y'))
-        else:
-            return (' (' + self.start_date.strftime('%B') + '-' + self.until_date.strftime('%B') +
-                    ' ' + self.until_date.strftime('%Y') + ')')
+            return '%s %s' % (self.until_date.strftime('%B'), self.until_date.strftime('%Y'))
+        return '%s - %s' % (self.start_date.strftime('%B'), self.until_date.strftime('%B %Y'))
 
     def is_current(self):
         return self.start_date <= timezone.now().date() and\
@@ -260,12 +339,21 @@ class Publication(models.Model):
     """
     A Publication is an object directly related to an accepted Submission. It contains metadata,
     the actual publication file, author data, etc. etc.
+
+    It may be directly related to a Journal or to an Issue.
     """
     # Publication data
     accepted_submission = models.OneToOneField('submissions.Submission', on_delete=models.CASCADE,
                                                related_name='publication')
-    in_issue = models.ForeignKey('journals.Issue', on_delete=models.CASCADE)
+    in_issue = models.ForeignKey(
+        'journals.Issue', on_delete=models.CASCADE, null=True, blank=True,
+        help_text='Assign either an Issue or Journal to the Publication')
+    in_journal = models.ForeignKey(
+        'journals.Journal', on_delete=models.CASCADE, null=True, blank=True,
+        help_text='Assign either an Issue or Journal to the Publication')
     paper_nr = models.PositiveSmallIntegerField()
+    status = models.CharField(max_length=8,
+                              choices=PUBLICATION_STATUSES, default=STATUS_DRAFT)
 
     # Core fields
     title = models.CharField(max_length=300)
@@ -282,20 +370,12 @@ class Publication(models.Model):
     # Authors
     authors_registered = models.ManyToManyField('scipost.Contributor', blank=True,
                                                 through='PublicationAuthorsTable',
-                                                through_fields=('publication', 'contributor'),
-                                                related_name='publications')
+                                                through_fields=('publication', 'contributor'))
     authors_unregistered = models.ManyToManyField('journals.UnregisteredAuthor', blank=True,
                                                   through='PublicationAuthorsTable',
                                                   through_fields=(
                                                     'publication',
-                                                    'unregistered_author'),
-                                                  related_name='publications')
-    first_author = models.ForeignKey('scipost.Contributor', blank=True, null=True,
-                                     on_delete=models.CASCADE,
-                                     related_name='first_author_publications')
-    first_author_unregistered = models.ForeignKey('journals.UnregisteredAuthor', blank=True, null=True,
-                                                  on_delete=models.CASCADE,
-                                                  related_name='first_author_publications')
+                                                    'unregistered_author'))
     authors_claims = models.ManyToManyField('scipost.Contributor', blank=True,
                                             related_name='claimed_publications')
     authors_false_claims = models.ManyToManyField('scipost.Contributor', blank=True,
@@ -304,19 +384,17 @@ class Publication(models.Model):
     cc_license = models.CharField(max_length=32, choices=CC_LICENSES, default=CCBY4)
 
     # Funders
-    grants = models.ManyToManyField('funders.Grant', blank=True, related_name="publications")
-    funders_generic = models.ManyToManyField(
-        'funders.Funder', blank=True, related_name="publications")  # not linked to a grant
-    institutions = models.ManyToManyField('affiliations.Institution',
-                                          blank=True, related_name="publications")
+    grants = models.ManyToManyField('funders.Grant', blank=True)
+    funders_generic = models.ManyToManyField('funders.Funder', blank=True)  # not linked to a grant
+    institutions = models.ManyToManyField('affiliations.Institution', blank=True)
 
     # Metadata
     metadata = JSONField(default={}, blank=True, null=True)
-    metadata_xml = models.TextField(blank=True, null=True)  # for Crossref deposit
+    metadata_xml = models.TextField(blank=True)  # for Crossref deposit
     metadata_DOAJ = JSONField(default={}, blank=True, null=True)
     doi_label = models.CharField(max_length=200, unique=True, db_index=True,
                                  validators=[doi_publication_validator])
-    BiBTeX_entry = models.TextField(blank=True, null=True)
+    BiBTeX_entry = models.TextField(blank=True)
     doideposit_needs_updating = models.BooleanField(default=False)
     citedby = JSONField(default={}, blank=True, null=True)
 
@@ -328,22 +406,55 @@ class Publication(models.Model):
     latest_metadata_update = models.DateTimeField(blank=True, null=True)
     latest_activity = models.DateTimeField(default=timezone.now)
 
-    # Deprecated fields. About to be removed after successful database migration on production.
-    authors_old = models.ManyToManyField('scipost.Contributor', blank=True,
-                                         related_name='publications_old')
-    authors_unregistered_old = models.ManyToManyField('journals.UnregisteredAuthor', blank=True,
-                                                      related_name='publications_old')
-
     objects = PublicationQuerySet.as_manager()
 
+    class Meta:
+        default_related_name = 'publications'
+        ordering = ('-publication_date', '-paper_nr')
+
     def __str__(self):
-        header = (self.citation() + ', '
-                  + self.title[:30] + ' by ' + self.author_list[:30]
-                  + ', published ' + self.publication_date.strftime('%Y-%m-%d'))
-        return header
+        return '{cite}, {title} by {authors}, {date}'.format(
+            cite=self.citation,
+            title=self.title[:30],
+            authors=self.author_list[:30],
+            date=self.publication_date.strftime('%Y-%m-%d'))
+
+    def clean(self):
+        """
+        Check if either a valid Journal or Issue is assigned to the Publication.
+        """
+        if not (self.in_journal or self.in_issue):
+            raise ValidationError({
+                'in_journal': ValidationError(
+                    'Either assign a Journal or Issue to this Publication', code='required'),
+                'in_issue': ValidationError(
+                    'Either assign a Journal or Issue to this Publication', code='required'),
+            })
+        if self.in_journal and self.in_issue:
+            # Assigning both a Journal and an Issue will screw up the database
+            raise ValidationError({
+                'in_journal': ValidationError(
+                    'Either assign only a Journal or Issue to this Publication', code='invalid'),
+                'in_issue': ValidationError(
+                    'Either assign only a Journal or Issue to this Publication', code='invalid'),
+            })
+        if self.in_issue and not self.in_issue.in_volume.in_journal.has_issues:
+            # Assigning both a Journal and an Issue will screw up the database
+            raise ValidationError({
+                'in_issue': ValidationError(
+                    'This journal does not allow the use of Issues',
+                    code='invalid'),
+            })
+        if self.in_journal and self.in_journal.has_issues:
+            # Assigning both a Journal and an Issue will screw up the database
+            raise ValidationError({
+                'in_journal': ValidationError(
+                    'This journal does not allow the use of individual Publications',
+                    code='invalid'),
+            })
 
     def get_absolute_url(self):
-        return reverse('scipost:publication_detail', args=[self.doi_label])
+        return reverse('scipost:publication_detail', args=(self.doi_label,))
 
     def get_cc_license_URI(self):
         for (key, val) in CC_LICENSES_URI:
@@ -355,14 +466,64 @@ class Publication(models.Model):
     def doi_string(self):
         return '10.21468/' + self.doi_label
 
-    def get_paper_nr(self):
-        return paper_nr_string(self.paper_nr)
+    @property
+    def is_draft(self):
+        return self.status == STATUS_DRAFT
 
+    @property
+    def is_published(self):
+        if self.status != PUBLICATION_PUBLISHED:
+            return False
+
+        if self.in_issue:
+            return self.in_issue.status == STATUS_PUBLISHED
+        elif self.in_journal:
+            return self.in_journal.active
+        return False
+
+    @property
+    def has_xml_metadata(self):
+        return self.metadata_xml != ''
+
+    @property
+    def has_bibtex_entry(self):
+        return self.BiBTeX_entry != ''
+
+    @property
+    def has_citation_list(self):
+        return 'citation_list' in self.metadata and len(self.metadata['citation_list']) > 0
+
+    @property
+    def has_funding_statement(self):
+        return 'funding_statement' in self.metadata and self.metadata['funding_statement']
+
+    @property
     def citation(self):
-        return (self.in_issue.in_volume.in_journal.get_abbreviation_citation()
-                + ' ' + str(self.in_issue.in_volume.number)
-                + ', ' + self.get_paper_nr()
-                + ' (' + self.publication_date.strftime('%Y') + ')')
+        """
+        Return Publication name in the preferred citation format.
+        """
+        if self.in_issue:
+            return '{journal} {volume}, {paper_nr} ({year})'.format(
+                journal=self.in_issue.in_volume.in_journal.abbreviation_citation,
+                volume=self.in_issue.in_volume.number,
+                paper_nr=self.get_paper_nr(),
+                year=self.publication_date.strftime('%Y'))
+        elif self.in_journal:
+            return '{journal}, {paper_nr} ({year})'.format(
+                journal=self.in_journal.abbreviation_citation,
+                paper_nr=self.paper_nr,
+                year=self.publication_date.strftime('%Y'))
+        return '{paper_nr} ({year})'.format(
+            paper_nr=self.paper_nr,
+            year=self.publication_date.strftime('%Y'))
+
+    def get_journal(self):
+        return self.in_journal or self.in_issue.in_volume.in_journal
+
+    def get_paper_nr(self):
+        if self.in_journal:
+            return self.paper_nr
+        return paper_nr_string(self.paper_nr)
 
     def citation_rate(self):
         """
diff --git a/journals/search_indexes.py b/journals/search_indexes.py
index 08c3b2898fcfc8613a8e4eb8d48a398ca914d87f..c01f22dd19db770537be76b8d0d870ae3e686dd9 100644
--- a/journals/search_indexes.py
+++ b/journals/search_indexes.py
@@ -1,4 +1,6 @@
-# import datetime
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
 
 from haystack import indexes
 
@@ -11,6 +13,10 @@ class PublicationIndex(indexes.SearchIndex, indexes.Indexable):
     date = indexes.DateTimeField(model_attr='publication_date')
     abstract = indexes.CharField(model_attr='abstract')
     doi_label = indexes.CharField(model_attr='doi_label')
+    institutions = indexes.MultiValueField()
+
+    def prepare_institutions(self, obj):
+        return [inst.name for inst in obj.institutions.all()]
 
     def get_model(self):
         return Publication
diff --git a/journals/signals.py b/journals/signals.py
new file mode 100644
index 0000000000000000000000000000000000000000..17f15821add3415f967d34c366473031d54176ec
--- /dev/null
+++ b/journals/signals.py
@@ -0,0 +1,21 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib.auth.models import User, Group
+
+from notifications.signals import notify
+
+
+def notify_manuscript_published(sender, instance, created, **kwargs):
+    """
+    Notify the authors about their new Publication.
+
+    instance -- Publication instance
+    """
+    if instance.is_published:
+        authors = User.objects.filter(contributor__publications=instance)
+        editorial_administration = Group.objects.get(name='Editorial Administrators')
+        for user in authors:
+            notify.send(sender=sender, recipient=user, actor=editorial_administration,
+                        verb=' published your manuscript.', target=instance)
diff --git a/journals/templates/journals/_base.html b/journals/templates/journals/_base.html
index bd692680e7e564e05329bdc90c1314e1ac27c0b5..b1fc60fa1e6253c2881e2aec50d3eb9398080fd0 100644
--- a/journals/templates/journals/_base.html
+++ b/journals/templates/journals/_base.html
@@ -2,8 +2,8 @@
 
 {% load staticfiles %}
 
-{% block pagetitle %}: {{journal}}{% endblock pagetitle %}
-{% block body_class %}{{block.super}} journals{% endblock %}
+{% block pagetitle %}: {{ journal }}{% endblock pagetitle %}
+{% block body_class %}{{ block.super }} journals{% endblock %}
 
 {% block breadcrumb %}
     <div class="container-outside breadcrumb-nav">
@@ -21,11 +21,15 @@
 <div class="container mt-3">
     <div class="row">
         <div class="col journal">
-            <h2 class="banner d-inline-block mr-2"><a href="{% url 'scipost:landing_page' journal.doi_label %}">{{journal}}</a></h2>
+            <h2 class="banner d-inline-block mr-2 mb-0"><a href="{{ journal.get_absolute_url }}">{{journal}}</a></h2>
             <ul class="links">
                 {% if journal.active or request.user.is_staff %}
-                    <li><a class="{% block link_class_physics_issues %}{% endblock %}" href="{% url 'journal:issues' journal.doi_label %}">Issues</a></li>
-                    <li><a class="{% block link_class_physics_recent %}{% endblock %}" href="{% url 'journal:recent' journal.doi_label %}">Recent</a></li>
+                    {% if journal.has_issues %}
+                        <li><a class="{% block link_class_physics_issues %}{% endblock %}" href="{% url 'journal:issues' journal.doi_label %}">Issues</a></li>
+                        <li><a class="recent {% block link_class_physics_recent %}{% endblock %}" href="{% url 'journal:recent' journal.doi_label %}">Recent</a></li>
+                    {% else %}
+                        <li><a class="recent" href="{{ journal.get_absolute_url }}">Recent</a></li>
+                    {% endif %}
                     <li><a class="{% block link_class_physics_accepted %}{% endblock %}" href="{% url 'journal:accepted' journal.doi_label %}">Accepted</a></li>
                     <li><a href="{% url 'submissions:submissions' %}?to_journal={{ journal.name }}">Submissions</a></li>
                     <li><a class="{% block link_class_physics_info %}{% endblock %}" href="{% url 'journal:info_for_authors' journal.doi_label %}">Info for authors</a></li>
diff --git a/journals/templates/journals/add_author.html b/journals/templates/journals/add_author.html
index b49a3a0408821feaf3c8ddcc5ca28cb7e9dc1e94..627dd1a06baf3690764cdcf7ec3ab42063044c62 100644
--- a/journals/templates/journals/add_author.html
+++ b/journals/templates/journals/add_author.html
@@ -7,8 +7,6 @@
         <div class="container">
             <nav class="breadcrumb hidden-sm-down">
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
-                <a href="{{publication.in_issue.in_volume.in_journal.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.in_volume.in_journal}}</a>
-                <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
                 <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
                 <span class="breadcrumb-item active">Add author to publication</span>
 
@@ -60,7 +58,7 @@
               {% for contributor in contributors_found %}
                   <li>
                     <div class="font-weight-bold">{{ contributor.user.first_name }} {{ contributor.user.last_name }}</div>
-                    <a href="{% url 'journals:add_author' publication_id=publication.id contributor_id=contributor.id %}">Add this Contributor as author of this Publication</a>
+                    <a href="{% url 'journals:add_author' doi_label=publication.doi_label contributor_id=contributor.id %}">Add this Contributor as author of this Publication</a>
                   </li>
               {% empty %}
                   <li><span class="text-danger">No Contributor with this name could be identified.</span></li>
@@ -68,7 +66,7 @@
             </ul>
 
             <h3>You can otherwise add the author manually and link it to the publication</h3>
-            <form action="{% url 'journals:add_author' publication_id=publication.id %}" method="post">
+            <form action="{% url 'journals:add_author'  doi_label=publication.doi_label %}" method="post">
                 {% csrf_token %}
                 {{ form|bootstrap }}
                 <input class="btn btn-primary" type="submit" value="Add">
diff --git a/journals/templates/journals/create_citation_list_metadata.html b/journals/templates/journals/create_citation_list_metadata.html
index 637c12a0b10145671a88bede2d81522ed7fa8da0..724637a48de011831f16a8f857cd0ee4fd414e28 100644
--- a/journals/templates/journals/create_citation_list_metadata.html
+++ b/journals/templates/journals/create_citation_list_metadata.html
@@ -7,9 +7,8 @@
         <div class="container">
             <nav class="breadcrumb hidden-sm-down">
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
-                <a href="{{publication.in_issue.in_volume.in_journal.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.in_volume.in_journal}}</a>
-                <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
-                <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
+                <a href="{% url 'journals:manage_metadata' %}" class="breadcrumb-item">Administration</a>
+                <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="breadcrumb-item">{{ publication.citation }}</a>
                 <span class="breadcrumb-item active">Create citation list metadata</span>
             </nav>
         </div>
@@ -22,37 +21,30 @@
 
 <div class="row">
   <div class="col-12">
-    <h1 class="highlight">Create citation list metadata page</h1>
-  </div>
-</div>
-
-
-<div class="row">
-  <div class="col-12">
-      {% if errormessage %}
-        <h2 class="text-danger">{{ errormessage }}</h2>
-      {% endif %}
+    <h1 class="highlight">Create citation list metadata page for <a href="{{ publication.get_absolute_url }}">{{ publication.doi_label }}</a></h1>
+    <p>
+        The following field is prefilled with the current citation list of the Publication object. Once you submit, it will overwrite the current citation list, shown below.
+    </p>
+    <br>
 
       <form action="{% url 'journals:create_citation_list_metadata' publication.doi_label %}" method="post">
         {% csrf_token %}
-        {{ bibitems_form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" value="Submit">
+        {{ form|bootstrap }}
+        <input type="submit" class="btn btn-primary" value="Submit">
+        <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="ml-3 btn btn-link">Back to Admin for {{ publication.doi_label }}</a>
       </form>
 
-      <hr>
+      <hr class="divider">
 
       <h3>Current citation list metadata:</h3>
-      <table>
-        {% for citation in citation_list %}
+      <br>
+      <table class="table">
+        {% for citation in publication.metadata.citation_list %}
           <tr>
             <td>{{ citation.key }}</td><td>{{ citation.doi }}</td>
           </tr>
         {% endfor %}
       </table>
-
-      <hr>
-
-      <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a> or to the <a href="{% url 'journals:manage_metadata' %}">metadata management page</a> or to <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">this publication's metadata management page</a></h3>
     </div>
 </div>
 
diff --git a/journals/templates/journals/create_funding_info_metadata.html b/journals/templates/journals/create_funding_info_metadata.html
index 3f5d9921bae52166335fbc2eb80f4f4d7f3180ba..43c046b30c36fe66ce7be51270f324f28d50bd1c 100644
--- a/journals/templates/journals/create_funding_info_metadata.html
+++ b/journals/templates/journals/create_funding_info_metadata.html
@@ -7,9 +7,8 @@
         <div class="container">
             <nav class="breadcrumb hidden-sm-down">
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
-                <a href="{{publication.in_issue.in_volume.in_journal.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.in_volume.in_journal}}</a>
-                <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
-                <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
+                <a href="{% url 'journals:manage_metadata' %}" class="breadcrumb-item">Administration</a>
+                <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="breadcrumb-item">{{ publication.citation }}</a>
                 <span class="breadcrumb-item active">Create funding info metadata</span>
             </nav>
         </div>
@@ -22,32 +21,22 @@
 
 <div class="row">
     <div class="col-12">
-        <h1 class="highlight">Create funding info metadata page</h1>
-    </div>
-</div>
-
-
-<div class="row">
-    <div class="col-12">
-
-      {% if errormessage %}
-        <h2 class="text-danger">{{ errormessage }}</h2>
-      {% endif %}
+        <h1 class="highlight">Create funding info metadata page for <a href="{{ publication.get_absolute_url }}">{{ publication.doi_label }}</a></h1>
+        <p>
+            The following field is prefilled with the current funding info of the Publication object. Once you submit, it will overwrite the current funding info, shown below.
+        </p>
+        <br>
 
-      <form action="{% url 'journals:create_funding_info_metadata' publication.doi_label %}" method="post">
+      <form method="post">
         {% csrf_token %}
-        {{ funding_info_form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" value="Submit">
+        {{ form|bootstrap }}
+        <input type="submit" class="btn btn-primary" value="Submit">
+        <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="ml-3 btn btn-link">Back to Admin for {{ publication.doi_label }}</a>
       </form>
 
-     <hr>
-        <h3 class="mt-3">Current funding info metadata:</h3>
-        <p>{{funding_statement|linebreaks}}</p>
-
-      <hr>
-
-      <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a> or to the <a href="{% url 'journals:manage_metadata' %}">metadata management page</a> or to <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">this publication's metadata management page</a></h3>
-
+     <hr class="divider">
+        <h3>Current funding info metadata:</h3>
+        <p class="mb-0">{{ publication.metadata.funding_statement|linebreaksbr }}</p>
     </div>
 </div>
 
diff --git a/journals/templates/journals/create_metadata_xml.html b/journals/templates/journals/create_metadata_xml.html
index c99b48c8a289197ee1f1ffda7f77eec19e1ca6de..dff180d06c8f5142f944b9bd3121165b7d9f74a7 100644
--- a/journals/templates/journals/create_metadata_xml.html
+++ b/journals/templates/journals/create_metadata_xml.html
@@ -7,9 +7,8 @@
         <div class="container">
             <nav class="breadcrumb hidden-sm-down">
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
-                <a href="{{publication.in_issue.in_volume.in_journal.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.in_volume.in_journal}}</a>
-                <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
-                <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
+                <a href="{% url 'journals:manage_metadata' %}" class="breadcrumb-item">Administration</a>
+                <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="breadcrumb-item">{{ publication.citation }}</a>
                 <span class="breadcrumb-item active">Create metadata XML</span>
             </nav>
         </div>
@@ -23,30 +22,22 @@
 <div class="row">
     <div class="col-12">
         <h1 class="highlight">Create metadata XML (for Crossref deposit)</h1>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-12">
-      {% if errormessage %}
-          <h2 class="text-danger">{{ errormessage }}</h2>
-      {% endif %}
-
+        <p>
+            The following field is prefilled with data from the Publication object. Once you accept them, they will overwrite the current metadata, shown below.
+        </p>
+        <br>
       <form action="{% url 'journals:create_metadata_xml' publication.doi_label %}" method="post">
         {% csrf_token %}
-        {{ create_metadata_xml_form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" value="Accept the metadata">
+        {{ form|bootstrap }}
+        <input type="submit" class="btn btn-primary" value="Accept the metadata">
+        <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="ml-3 btn btn-link">Back to Admin for {{ publication.doi_label }}</a>
       </form>
 
-      <hr class="hr6"/>
-
-      <h3>Current metadata xml:</h3>
-      <div>
-          <pre><code>{{ publication.metadata_xml|linebreaksbr }}</code></pre>
-      </div>
-
-      <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a> or to the <a href="{% url 'journals:manage_metadata' %}">metadata management page</a></h3>
+      <hr class="divider">
 
+      <h3>Current metadata xml</h3>
+      <br>
+      <pre><code>{{ publication.metadata_xml|linebreaksbr }}</code></pre>
     </div>
 </div>
 
diff --git a/journals/templates/journals/grants_form.html b/journals/templates/journals/grants_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..b78f521cb9c883d04e837c623d0892f4a659dcba
--- /dev/null
+++ b/journals/templates/journals/grants_form.html
@@ -0,0 +1,40 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Publication related grant(s){% endblock pagetitle %}
+
+{% block content %}
+
+
+<h1>Publication related grant(s)</h1>
+
+<h3>Funding acknowledgement of this Publication:</h3>
+{% if publication.has_funding_statement %}
+<p>{{ publication.metadata.funding_statement }}</p>
+{% else %}
+<p>No funding statement was registered.</p>
+{% endif %}
+
+<h3>Add existing grant to this Publication</h3>
+<form method="post" enctype="multipart/form-data">
+    {% csrf_token %}
+    {{ form|bootstrap }}
+    <input type="submit" class="btn btn-primary" value="Add">
+    <a class="btn btn-link ml-2" href="{% url 'funders:add_grant' %}">Create new Grant</a>
+</form>
+
+<hr class="divider">
+
+
+<h3>Current grant(s)</h3>
+<ul>
+    {% for grant in publication.grants.all %}
+        <li>{{ grant }} - <a class="text-danger" href="{% url 'journals:remove_grant' form.instance.doi_label grant.id %}">Remove grant from Publication</a></li>
+    {% empty %}
+        <li><em>No grants added</em></li>
+    {% endfor %}
+</ul>
+
+
+{% endblock %}
diff --git a/journals/templates/journals/initiate_publication.html b/journals/templates/journals/initiate_publication.html
deleted file mode 100644
index c9fa7acc87fb2a42b4829a2ce0363c7bec8d1863..0000000000000000000000000000000000000000
--- a/journals/templates/journals/initiate_publication.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% load bootstrap %}
-
-{% block pagetitle %}: Initiate publication{% endblock pagetitle %}
-
-{% block content %}
-
-
-<h1>Initiate publication page</h1>
-
-<form action="{% url 'journals:initiate_publication' %}" method="post" enctype="multipart/form-data">
-    {% csrf_token %}
-    {{ initiate_publication_form|bootstrap }}
-    <input type="submit" class="btn btn-primary" value="Submit">
-</form>
-
-
-
-
-{% endblock %}
diff --git a/journals/templates/journals/journal_accepted.html b/journals/templates/journals/journal_accepted.html
index 2eb16483da99aa3932b753af4b69e555a40c39af..d5944bf769b67b5b121d54bf598176827ca56b11 100644
--- a/journals/templates/journals/journal_accepted.html
+++ b/journals/templates/journals/journal_accepted.html
@@ -19,7 +19,7 @@
     <div class="row">
         <div class="col-12">
             <ul class="list-group list-group-flush">
-                {% for submission in accepted_SP_submissions %}
+                {% for submission in accepted_submissions %}
                     <li class="list-group-item">
                         <div class="card-body px-0">
                             {% include 'partials/submissions/submission_card_content.html' with submission=submission %}
diff --git a/journals/templates/journals/journal_issue_detail.html b/journals/templates/journals/journal_issue_detail.html
index 6b646613d4d4de29b67a170ad2c1d32a6e20dbf2..5b22c11f7d028b9f06f49c3351e72c7f33dd9193 100644
--- a/journals/templates/journals/journal_issue_detail.html
+++ b/journals/templates/journals/journal_issue_detail.html
@@ -14,10 +14,10 @@
 
 {% block journal_header_block %}
     {% if prev_issue %}
-        <h4 class="d-inline-block"><a href="{{prev_issue.get_absolute_url}}">< Previous issue | {{prev_issue.short_str}}</a></h4>
+        <h4 class="d-inline-block"><a href="{{prev_issue.get_absolute_url}}"><i class="fa fa-long-arrow-left"></i> Previous issue | {{prev_issue.short_str}}</a></h4>
     {% endif %}
     {% if next_issue %}
-        <h4 class="float-right d-inline-block"><a href="{{next_issue.get_absolute_url}}">{{next_issue.short_str}} | Next issue ></a></h4>
+        <h4 class="float-right d-inline-block"><a href="{{next_issue.get_absolute_url}}">{{next_issue.short_str}} | Next issue <i class="fa fa-long-arrow-right"></i></a></h4>
     {% endif %}
 {% endblock %}
 
diff --git a/journals/templates/journals/journal_issues.html b/journals/templates/journals/journal_issues.html
index 601a8c550639617c5f3d130bbeaba8a83af987e0..e69b81f25d844551d18d925c6733a703ba2bb29a 100644
--- a/journals/templates/journals/journal_issues.html
+++ b/journals/templates/journals/journal_issues.html
@@ -18,7 +18,7 @@
     <div class="row">
         <div class="col-12">
             <ul>
-                {% for issue in issues %}
+                {% for issue in journal.get_issues %}
                     <li>
                         <a href="{{issue.get_absolute_url}}">{{issue}}</a>
                         {% if issue.proceedings %}
diff --git a/journals/templates/journals/journal_landing_page.html b/journals/templates/journals/journal_landing_page.html
index 1cd761620af9cf7acc1489e50227f2a4c8443e1c..98bae00dcc384a1fb6ab18f1d927f24e23eb15c0 100644
--- a/journals/templates/journals/journal_landing_page.html
+++ b/journals/templates/journals/journal_landing_page.html
@@ -7,62 +7,92 @@
 
 {% block content %}
 
-    {% if current_issue %}
-        <div class="row">
-            <div class="col-12">
-                <h2 class="highlight-empty text-blue m-0 p-0 pt-2">Current issue: Vol. {{ current_issue.in_volume.number }} issue {{ current_issue.number }} (in progress)</h2>
-                {% if prev_issue %}
-                    <h4 class="d-inline-block"><a href="{{prev_issue.get_absolute_url}}">< Previous issue | Vol. {{prev_issue.in_volume.number}} issue {{prev_issue.number}}</a></h4>
-                {% endif %}
+    {% if journal.has_issues %}
+        {% if current_issue %}
+            <div class="row">
+                <div class="col-12">
+                    <h2 class="highlight-empty text-blue m-0 p-0 pt-2">Current issue: Vol. {{ current_issue.in_volume.number }} issue {{ current_issue.number }} (in progress)</h2>
+                    {% if prev_issue %}
+                        <h4 class="d-inline-block"><a href="{{prev_issue.get_absolute_url}}"><i class="fa fa-long-arrow-left"></i> Previous issue | Vol. {{prev_issue.in_volume.number}} issue {{prev_issue.number}}</a></h4>
+                    {% endif %}
+                </div>
             </div>
-        </div>
 
-        <div class="row">
-            <div class="col-12">
-                <ul class="list-unstyled">
-                    {% for paper in current_issue.publication_set.all|dictsort:"paper_nr" %}
-                        <li>
-                            {% include 'partials/journals/publication_card.html' with publication=paper %}
-                        </li>
-                    {% empty %}
-                        <li>
-                            <h3>No publications found for this issue</h3>
-                        </li>
-                    {% endfor %}
-                </ul>
+            <div class="row">
+                <div class="col-12">
+                    <ul class="list-unstyled">
+                        {% for paper in current_issue.publications.published|dictsort:"paper_nr" %}
+                            <li>
+                                {% include 'partials/journals/publication_card.html' with publication=paper %}
+                            </li>
+                        {% empty %}
+                            <li>
+                                <h3>No publications found for this issue</h3>
+                            </li>
+                        {% endfor %}
+                    </ul>
+                </div>
             </div>
-        </div>
-    {% endif %}
+        {% endif %}
+
+        {% if latest_issue %}
+            <div class="row">
+                <div class="col-12">
+                    <h2 class="highlight-empty text-blue m-0 p-0">Latest issue: Vol. {{ latest_issue.in_volume.number }} issue {{ latest_issue.number }}</h2>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-12">
+                    <ul class="list-unstyled">
+                        {% for paper in latest_issue.publications.published|dictsort:"paper_nr" %}
+                            <li>
+                                {% include 'partials/journals/publication_card.html' with publication=paper %}
+                            </li>
+                        {% empty %}
+                            <li>
+                                <h3>No publications found for this issue</h3>
+                            </li>
+                        {% endfor %}
+                    </ul>
+                </div>
+            </div>
+        {% endif %}
 
-    {% if latest_issue %}
+        {% if not current_issue and not latest_issue %}
+            <div class="row">
+                <div class="col-12">
+                    <h2 class="text-blue">Coming soon!</h2>
+                </div>
+            </div>
+        {% endif %}
+    {% elif page_object %}
         <div class="row">
             <div class="col-12">
-                <h2 class="highlight-empty text-blue m-0 p-0">Latest issue: Vol. {{ latest_issue.in_volume.number }} issue {{ latest_issue.number }}</h2>
+                <h2 class="text-blue">{{ journal.get_name_display }} Publications</h2>
             </div>
         </div>
         <div class="row">
             <div class="col-12">
                 <ul class="list-unstyled">
-                    {% for paper in latest_issue.publication_set.all|dictsort:"paper_nr" %}
+                    {% for publication in page_object.object_list %}
                         <li>
-                            {% include 'partials/journals/publication_card.html' with publication=paper %}
+                            {% include 'partials/journals/publication_card.html' with publication=publication %}
                         </li>
                     {% empty %}
                         <li>
-                            <h3>No publications found for this issue</h3>
+                            <h3>First Publication coming soon!</h3>
                         </li>
                     {% endfor %}
                 </ul>
             </div>
         </div>
-    {% endif %}
-
-    {% if not current_issue and not latest_issue %}
         <div class="row">
             <div class="col-12">
-                <h2 class="text-blue">Coming soon!</h2>
+                {% include 'partials/pagination.html' with page_obj=page_object %}
             </div>
         </div>
+    {% else %}
+        <h3 class="none-found">First Publication coming soon!</h3>
     {% endif %}
 
 {% endblock %}
diff --git a/journals/templates/journals/journal_recent.html b/journals/templates/journals/journal_recent.html
index d12a180904f8c57ace7aa15c2996930e7e708544..66c96e5019a0a7e72cedac9c31ae546c51953f74 100644
--- a/journals/templates/journals/journal_recent.html
+++ b/journals/templates/journals/journal_recent.html
@@ -19,7 +19,7 @@
     <div class="row">
         <div class="col-12">
             <ul class="list-unstyled">
-                {% for paper in recent_papers %}
+                {% for paper in journal.get_publications.published|slice:':20' %}
                     <li>
                         {% include 'partials/journals/publication_card.html' with publication=paper %}
                     </li>
diff --git a/journals/templates/journals/journals.html b/journals/templates/journals/journals.html
index de1e80066fb283e867d99346edbe3e9e2879f199..2dad808af08ed6a0f3266302465db2b77a04aab4 100644
--- a/journals/templates/journals/journals.html
+++ b/journals/templates/journals/journals.html
@@ -70,16 +70,13 @@
 
 <div class="row">
     <div class="col-md-6">
-        <h1 class="banner">SciPost Physics Select</h1>
+        <h1 class="banner"><a href="{% url 'scipost:landing_page' 'SciPostPhysLectNotes' %}">SciPost Physics Lecture Notes</a></h1>
         <div class="py-2">
-            <p>SciPost Physics Select publishes articles of superlative quality in the field of Physics.</p>
-            <p>Authors cannot submit directly to this Journal; SPS papers are editorially selected from the most outstanding Submissions to SciPost Physics.</p>
-        </div>
-    </div>
-    <div class="col-md-6">
-        <h1 class="banner">SciPost Physics Lecture Notes</h1>
-        <div class="py-2">
-          <p>Research-level didactic material in all domains and subject areas of Physics.</p>
+          <p>
+              <a href="{% url 'journal:about' 'SciPostPhysLectNotes' %}">Go directly to SciPost Physics Lecture Notes</a>
+              <br><br>
+              Research-level didactic material in all domains and subject areas of Physics.
+          </p>
         </div>
     </div>
 </div>
diff --git a/journals/templates/journals/manage_metadata.html b/journals/templates/journals/manage_metadata.html
index 0b0547b47c5be8f52046bbf7b3036ac80089d857..bcaa4e0c9daaf8e0c5ddaf74f95195bfdb1f4327 100644
--- a/journals/templates/journals/manage_metadata.html
+++ b/journals/templates/journals/manage_metadata.html
@@ -19,23 +19,47 @@ event: "focusin"
     <span class="breadcrumb-item">Manage metadata</span>
 {% endblock %}
 
+{% block body_class %}{{ block.super }} manage_metadata{% endblock %}
+
 {% block content %}
 
 <div class="row">
     <div class="col-12">
-        <h1 class="highlight">Manage Publications Metadata{% if issue_doi_label %} for issue {{ issue_doi_label }}{% endif %}</h1>
-	{% if issue_doi_label %}
-	<h3>Return to the <a href="{% url 'journals:manage_metadata' %}">Main manage metadata page</a></h3>
-	{% endif %}
-	<h3>Manage metadata per issue:</h3>
-        <ul>
-          {% for issue in issues %}
-          <li>
-            <a href="{% url 'journals:manage_metadata' issue_doi_label=issue.doi_label %}">{{ issue }}</a>
-          </li>
-          {% endfor %}
+        <h1 class="highlight">Manage Publications Metadata{% if issue_doi_label %} for issue {{ issue_doi_label }}{% elif journal %} for {{ journal }}{% endif %}</h1>
+
+    </div>
+</div>
+<div class="row">
+    <div class="col-md-6">
+        <h3>Available journals</h3>
+        <ul class="links">
+            {% for journal in journals %}
+                {% url 'journals:manage_metadata' journal_doi_label=journal.doi_label as url %}
+                <li class="{% if url == request.path %}active{% endif %}">
+                    <a href="{{ url }}">{{ journal }}</a>
+                </li>
+            {% endfor %}
         </ul>
     </div>
+    <div class="col-md-6">
+        <h3>Manage metadata per issue:</h3>
+        {% if journal.has_issues %}
+            <ul class="links">
+              {% for volume in journal.volumes.all %}
+                  {% for issue in volume.issues.all %}
+                      {% url 'journals:manage_metadata' issue_doi_label=issue.doi_label as url %}
+                      <li class="{% if url == request.path %}active{% endif %}">
+                        <a href="{{ url }}">{{ issue }}</a>
+                      </li>
+                  {% endfor %}
+              {% empty %}
+                <li><em>There are no Volumes and Issues for this Journal</em></li>
+              {% endfor %}
+            </ul>
+        {% else %}
+            <em>This Journal does not have Issues, but individual Publications.</em>
+        {% endif %}
+    </div>
 </div>
 
 
@@ -53,7 +77,7 @@ event: "focusin"
 
   <tbody id="accordion" role="tablist" aria-multiselectable="true">
     {% for publication in publications %}
-    <tr data-toggle="collapse" data-parent="#accordion" href="#collapse{{ publication.id }}" aria-expanded="true" aria-controls="collapse{{ publication.id }}" style="cursor: pointer;">
+    <tr data-toggle="collapse" data-parent="#accordion" href="#collapse{{ publication.id }}" aria-expanded="true" aria-controls="collapse{{ publication.id }}" style="cursor: pointer;"{% if not publication.is_published %} class="table-warning"{% endif %}>
       <td><a href="{{ publication.get_absolute_url }}">{{ publication.doi_label }}</a></td>
       <td>{{ publication.publication_date }}</td>
       {% if publication.latest_metadata_update %}
@@ -68,35 +92,25 @@ event: "focusin"
       <td>{{ publication|latest_successful_DOAJ_deposit }}</td>
     </tr>
     <tr id="collapse{{ publication.id }}" class="collapse" role="tabpanel" aria-labelledby="heading{{ publication.id }}" style="background-color: #fff;">
-      <td colspan="6">
-
-	<h2 class="ml-3">Actions</h2>
-	<div class="row">
-          <div class="col-md-5">
-            <ul>
-              <li>Mark the first author (currently: {% if publication.first_author %}{{ publication.first_author }}{% elif publication.first_author_unregistered %}{{ publication.first_author_unregistered }} (unregistered){% endif %})
-                <ul class="list-unstyled pl-4">
-                  {% for author in publication.authors.all %}
-                  <li>
-                    {{ author.order }}. <a href="{% url 'journals:mark_first_author' publication_id=publication.id author_object_id=author.id %}">{{ author }}</a>
-                  </li>
-                  {% endfor %}
-                </ul>
-	      </li>
-              <li><a href="{% url 'journals:add_author' publication.id %}">Add a missing author</a></li>
-              <li><a href="{% url 'journals:create_citation_list_metadata' publication.doi_label %}">Create/update citation list metadata</a></li>
-              <li><a href="{% url 'journals:create_funding_info_metadata' publication.doi_label %}">Create/update funding info metadata</a></li>
-
-              <li><a href="{% url 'journals:create_metadata_xml' publication.doi_label %}">(re)create metadata</a></li>
-              <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'test' %}">Test metadata deposit (via Crossref test server)</a></li>
-              <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'deposit' %}">Deposit the metadata to Crossref</a></li>
-	      <li><a href="{% url 'journals:produce_metadata_DOAJ' doi_label=publication.doi_label %}">Produce DOAJ metadata</a></li>
-	      <li><a href="{% url 'journals:metadata_DOAJ_deposit' doi_label=publication.doi_label %}">Deposit the metadata to DOAJ</a></li>
-              <li><a href="{% url 'journals:harvest_citedby_links' publication.doi_label %}">Update Crossref cited-by links</a></li>
-            </ul>
+      <td colspan="6" class="py-3">
+        <div class="row">
+          {% if not publication.is_published %}
+            <div class="col-12">
+                <h3 class="text-center bg-warning text-white mb-3">Current status: <em>{{ publication.get_status_display }}</em></h3>
+            </div>
+          {% endif %}
+
+          <div class="col-md-6">
+              {% if publication.status == 'draft' %}
+                  {% include 'partials/journals/publication_preparation.html' with publication=publication %}
+                  <hr>
+              {% endif %}
+
+              <h2 class="ml-3">Actions</h2>
+              {% include 'partials/journals/admin/publication_actions.html' with publication=publication %}
           </div>
 
-          <div class="col-md-5">
+          <div class="col-md-6">
 	    <h2>Funding statement for this publication:</h2>
 	    {% if publication.metadata.funding_statement %}
 	    <p>{{ publication.metadata.funding_statement }}</p>
@@ -116,7 +130,7 @@ event: "focusin"
 	    <form action="{% url 'journals:add_associated_grant' publication.doi_label %}" method="post">
 	      {% csrf_token %}
 	      {{associate_grant_form|bootstrap}}
-	      <input class="btn btn-secondary" type="submit" value="Add">
+	      <input class="btn btn-outline-secondary" type="submit" value="Add">
 	    </form>
 	    <br/>
 	    <h2>Generic (not via grant) funders associated to this publication:</h2>
@@ -131,7 +145,7 @@ event: "focusin"
 	    <form action="{% url 'journals:add_generic_funder' publication.doi_label %}" method="post">
 	      {% csrf_token %}
 	      {{associate_generic_funder_form|bootstrap}}
-	      <input class="btn btn-secondary" type="submit" value="Add">
+	      <input class="btn btn-outline-secondary" type="submit" value="Add">
 	    </form>
 	    <br/>
 	    <h3>Other funding-related actions:</h3>
diff --git a/journals/templates/journals/metadata_doaj_create.html b/journals/templates/journals/metadata_doaj_create.html
new file mode 100644
index 0000000000000000000000000000000000000000..5702c8deeba546e5181cbb1e9aa5c8ad9ccb35c5
--- /dev/null
+++ b/journals/templates/journals/metadata_doaj_create.html
@@ -0,0 +1,49 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Produce metadata DOAJ{% endblock pagetitle %}
+
+{% block breadcrumb %}
+    <div class="container-outside header">
+        <div class="container">
+            <nav class="breadcrumb hidden-sm-down">
+                <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
+                <a href="{% url 'journals:manage_metadata' %}" class="breadcrumb-item">Administration</a>
+                <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="breadcrumb-item">{{ publication.citation }}</a>
+                <span class="breadcrumb-item active">Produce metadata DOAJ</span>
+            </nav>
+        </div>
+    </div>
+{% endblock %}
+
+{% block content %}
+
+
+<div class="row">
+  <div class="col-12">
+    <h1 class="highlight">Produce metadata DOAJ for <a href="{{ publication.get_absolute_url }}">{{ publication.doi_label }}</a></h1>
+  </div>
+</div>
+
+<div class="row">
+    <div class="col-12">
+        <h3>Existing DOAJ metadata</h3>
+        {% if publication.metadata_DOAJ %}
+            <pre><code>{{ publication.metadata_DOAJ }}</code></pre>
+        {% else %}
+            <p>No existing DOAJ Metadata found.</p>
+        {% endif %}
+
+        <br>
+        <form method="post">
+            {% csrf_token %}
+            {{ form|bootstrap }}
+            <input class="btn btn-primary" type="submit" value="{% if publication.metadata_DOAJ %}Reproduce{% else %}Produce{% endif %}">
+            <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="ml-3 btn btn-link">Back to Admin for {{ publication.doi_label }}</a>
+        </form>
+    </div>
+</div>
+
+
+{% endblock %}
diff --git a/journals/templates/journals/metadata_xml_deposit.html b/journals/templates/journals/metadata_xml_deposit.html
index 0f40882d3e4f459ebd331fc81fcf12d3a708f4e8..a95c2c9d2c8979034fa4ec9cb586a44e30e52ef3 100644
--- a/journals/templates/journals/metadata_xml_deposit.html
+++ b/journals/templates/journals/metadata_xml_deposit.html
@@ -7,9 +7,8 @@
         <div class="container">
             <nav class="breadcrumb hidden-sm-down">
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
-                <a href="{{publication.in_issue.in_volume.in_journal.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.in_volume.in_journal}}</a>
-                <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
-                <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
+                <a href="{% url 'journals:manage_metadata' %}" class="breadcrumb-item">Administration</a>
+                <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}" class="breadcrumb-item">{{ publication.citation }}</a>
                 <span class="breadcrumb-item active">Metadata XML deposit</span>
             </nav>
         </div>
@@ -25,29 +24,40 @@
   </div>
 </div>
 
+{% if valid %}
+    <div class="row">
+      <div class="col-12">
 
-<div class="row">
-  <div class="col-12">
-
-  {% if errormessage %}
-    <h2 class="text-danger">{{ errormessage }}</h2>
-  {% endif %}
-
-  <h3 class="my-1">Response headers:</h3>
-  <div>
-      <pre><code>{{ response_headers|linebreaks }}</code></pre>
-  </div>
+          <h3 class="my-1">Response headers:</h3>
+          <pre><code>{{ response_headers|linebreaks }}</code></pre>
 
-  <h3 class="mt-3">Response text:</h3>
-  <div>
-      <pre><code>{{ response_text|linebreaks }}</code></pre>
-  </div>
+          <h3 class="mt-3">Response text:</h3>
+          <pre><code>{{ response_text|linebreaks }}</code></pre>
 
-  <h3><a href="{{publication.get_absolute_url}}">return to the publication's page</a>, to the <a href="{% url 'journals:manage_metadata' %}">general metadata management page</a> or to <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">this publication's metadata management page</a></h3>
+          {% if perms.scipost.can_publish_accepted_submission %}
+              <br>
+              <p><a href="{{publication.get_absolute_url}}">return to the publication's page</a>, to the <a href="{% url 'journals:manage_metadata' %}">general metadata management page</a> or to <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">this publication's metadata management page</a></p>
+          {% endif %}
 
 
+        </div>
     </div>
-</div>
+{% else %}
+    <div class="row">
+        <div class="col-12">
+            <p>
+                <span class="text-danger">The metadata file for this metadata timestamp already exists.</span><br>
+                You might want to <a href="{% url 'journals:create_metadata_xml' doi_label=publication.doi_label %}">produce new metadata</a> to do a new deposit instead.
+            <p>
+
+            {% if perms.scipost.can_publish_accepted_submission %}
+                <p>
+                    <a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">Back to Admin for {{ publication.doi_label }}</a>
+                </p>
+            {% endif %}
+        </div>
+    </div>
+{% endif %}
 
 
 {% endblock %}
diff --git a/journals/templates/journals/publication_approval_form.html b/journals/templates/journals/publication_approval_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..4daa978337c5de968add6bda355b8327ee3d4499
--- /dev/null
+++ b/journals/templates/journals/publication_approval_form.html
@@ -0,0 +1,46 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Send Publication for approval{% endblock pagetitle %}
+
+{% block content %}
+
+
+<h1 class="highlight">Send Publication for approval</h1>
+{% include 'partials/journals/publication_summary.html' with publication=form.instance %}
+
+<h3>Authors</h3>
+<ul>
+    {% for author in form.instance.authors.all %}
+        <li>{{ author }}</li>
+    {% empty %}
+        <li>No authors assigned</li>
+    {% endfor %}
+</ul>
+
+<h3>Funding statement</h3>
+<p>{{ form.instance.metadata.funding_statement|default:'<em>No funding statement found.</em>' }}</p>
+
+<h3>Grants</h3>
+<ul>
+    {% for grant in form.instance.grants.all %}
+        <li>{{ grant }}</li>
+    {% empty %}
+        <li>No grants assigned</li>
+    {% endfor %}
+</ul>
+
+{% include 'partials/journals/references.html' with publication=form.instance %}
+
+<br>
+<form method="post" enctype="multipart/form-data">
+    {% csrf_token %}
+    {{ form|bootstrap }}
+    <input type="submit" class="btn btn-primary" value="Submit">
+</form>
+
+
+
+
+{% endblock %}
diff --git a/journals/templates/journals/publication_authors_form.html b/journals/templates/journals/publication_authors_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..861f712b9e0e4a275ba9b436757658c8352346ac
--- /dev/null
+++ b/journals/templates/journals/publication_authors_form.html
@@ -0,0 +1,47 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Publication Authors{% endblock pagetitle %}
+
+{% block breadcrumb %}
+    <div class="container-outside header">
+        <div class="container">
+            <nav class="breadcrumb hidden-sm-down">
+                <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
+                <a href="{{publication.get_absolute_url}}" class="breadcrumb-item">{{publication.citation}}</a>
+                <span class="breadcrumb-item active">Author ordering</span>
+
+            </nav>
+        </div>
+    </div>
+{% endblock %}
+
+{% block content %}
+
+
+<h1 class="highlight">Author Ordering</h1>
+
+<div class="mb-4">
+    {% include 'partials/journals/publication_li_content.html' with publication=publication %}
+</div>
+<a href="{% url 'journals:add_author' publication.doi_label %}">Add missing author</a>
+<h3 class="highlight">Ordering</h3>
+
+<form method="post" enctype="multipart/form-data">
+    {% csrf_token %}
+    {{ formset.management_form }}
+    <ul class="fa-ul sortable-list d-inline-block">
+        {% for form in formset %}
+            <li>
+                <i class="fa fa-sort"></i>
+                {{ form.instance.first_name }} {{ form.instance.last_name }}
+                <div class="d-none">{{ form }}</div>
+            </li>
+        {% endfor %}
+    </ul>
+    <br>
+    <input type="submit" class="btn btn-primary" value="Save ordering">
+</form>
+
+{% endblock %}
diff --git a/journals/templates/journals/publication_detail.html b/journals/templates/journals/publication_detail.html
index 358a8bbca484f3651103a84b22d9df4e010f28b9..67892330e77d5b979ec472bfd0b120cc4136fc55 100644
--- a/journals/templates/journals/publication_detail.html
+++ b/journals/templates/journals/publication_detail.html
@@ -1,6 +1,7 @@
 {% extends 'journals/_base.html' %}
 
 {% load journals_extras %}
+{% load publication_administration %}
 {% load staticfiles %}
 {% load scipost_extras %}
 {% load user_groups %}
@@ -11,8 +12,10 @@
 
 {% block breadcrumb_items %}
     {{block.super}}
-    <a href="{{journal.get_absolute_url}}" class="breadcrumb-item">{{journal}}</a>
-    <a href="{{publication.in_issue.get_absolute_url}}" class="breadcrumb-item">{{publication.in_issue.short_str}}</a>
+    <a href="{{ journal.get_absolute_url }}" class="breadcrumb-item">{{ journal }}</a>
+    {% if publication.in_issue %}
+        <a href="{{ publication.in_issue.get_absolute_url }}" class="breadcrumb-item">{{ publication.in_issue.short_str }}</a>
+    {% endif %}
     <span class="breadcrumb-item active">{{publication.title}}</span>
 {% endblock %}
 
@@ -30,11 +33,12 @@
     <meta name="citation_publication_date" content="{{ publication.publication_date|date:'Y/m/d' }}"/>
     <meta name="citation_journal_title" content="{{ journal }}"/>
     <meta name="citation_issn" content="{{ journal.issn }}"/>
-    <meta name="citation_volume" content="{{ publication.in_issue.in_volume.number }}"/>
-    <meta name="citation_issue" content="{{ publication.in_issue.number }}"/>
+    {% if publication.in_issue %}
+        <meta name="citation_volume" content="{{ publication.in_issue.in_volume.number }}"/>
+        <meta name="citation_issue" content="{{ publication.in_issue.number }}"/>
+    {% endif %}
     <meta name="citation_firstpage" content="{{ publication.paper_nr|paper_nr_string_filter }}"/>
     <meta name="citation_pdf_url" content="https://scipost.org/{{ publication.doi_string }}/pdf"/>
-
     <meta name="dc.identifier" content="doi:{{ publication.doi_string }}"/>
 
     <script>
@@ -50,6 +54,17 @@
 {% endblock headsup %}
 
 {% block content %}
+    {% if not publication.is_published and perms.can_publish_accepted_submission %}
+        <div class="card bg-warning text-white">
+            <div class="card-body">
+                <p class="card-text text-center">
+                    This Publication is not published yet.
+                    Current status: {{ publication.get_status_display }}
+                </p>
+            </div>
+        </div>
+    {% endif %}
+
     {% is_edcol_admin request.user as is_edcol_admin %}
 
     {% include 'partials/journals/publication_summary.html' with publication=publication %}
@@ -127,35 +142,23 @@
         </ul>
     {% endif %}
 
+    {% if publication.status == 'draft' and perms.scipost.can_draft_publication %}
+        <hr class="divider">
+        <div class="row">
+            <div class="col-12">
+                {% include 'partials/journals/publication_preparation.html' with publication=publication %}
+            </div>
+        </div>
+    {% endif %}
+
     {% if is_edcol_admin %}
-    <hr>
-    <div class="row">
-        <div class="col-12">
-            <h3>Editorial Administration tools: </h3>
-            <ul>
-              <li>
-                  Mark the first author (currently: {% if publication.first_author %}{{ publication.first_author }}{% elif publication.first_author_unregistered %}{{ publication.first_author_unregistered }} (unregistered){% endif %})
-                  <ul class="list-unstyled pl-4">
-                    {% for author in publication.authors.all %}
-                      <li>
-                        {{ author.order }}. <a href="{% url 'journals:mark_first_author' publication_id=publication.id author_object_id=author.id %}">{{ author }}</a>
-                      </li>
-                    {% endfor %}
-                  </ul>
-              </li>
-              <li><a href="{% url 'journals:add_author' publication.id %}">Add a missing author</a></li>
-              <li><a href="{% url 'journals:create_citation_list_metadata' publication.doi_label %}">Create/update citation list metadata</a></li>
-              <li><a href="{% url 'journals:create_funding_info_metadata' publication.doi_label %}">Create/update funding info metadata</a></li>
-              <li><a href="{% url 'journals:create_metadata_xml' publication.doi_label %}">Create/update the XML metadata</a></li>
-              <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'test' %}">Test metadata deposit (via Crossref test server)</a></li>
-              <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'deposit' %}">Deposit the metadata to Crossref</a></li>
-              <li><a href="{% url 'journals:harvest_citedby_links' publication.doi_label %}">Update Crossref cited-by links</a></li>
-              <li><a href="{% url 'journals:manage_metadata' %}">Metadata management page</a></li>
-    	      <li><a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">This publication's metadata management page</a></li>
-              <li><a href="{% url 'journals:update_references' doi_label=publication.doi_label %}">Update references</a></li>
-            </ul>
+        <hr class="divider">
+        <div class="row">
+            <div class="col-12">
+                <h3>Editorial Administration tools</h3>
+                {% include 'partials/journals/admin/publication_actions.html' with publication=publication %}
+            </div>
         </div>
-    </div>
     {% endif %}
 
 {% endblock content %}
diff --git a/journals/templates/journals/publication_form.html b/journals/templates/journals/publication_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..8d46616c3d1fbc955e347d6034a773420a9ec485
--- /dev/null
+++ b/journals/templates/journals/publication_form.html
@@ -0,0 +1,32 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Draft publication{% endblock pagetitle %}
+
+{% block content %}
+
+
+<h1>Draft publication</h1>
+
+{% if request.GET.issue or form.instance.id or form.to_journal %}
+    <form method="post" enctype="multipart/form-data">
+        {% csrf_token %}
+        {{ form|bootstrap }}
+        <input type="submit" class="btn btn-primary" value="Save">
+    </form>
+{% else %}
+    <h3>Pick the Issue to publish in</h3>
+    <ul>
+        {% for issue in form.get_possible_issues %}
+            <li><a href="?issue={{ issue.id }}">{{ issue }}</a></li>
+        {% empty %}
+            <li><em>No Issues found. Please contact administration</em></li>
+        {% endfor %}
+    </ul>
+{% endif %}
+
+
+
+
+{% endblock %}
diff --git a/journals/templates/journals/publication_list.html b/journals/templates/journals/publication_list.html
new file mode 100644
index 0000000000000000000000000000000000000000..f5829e225be99a0154ff6c1a0480fd643146240c
--- /dev/null
+++ b/journals/templates/journals/publication_list.html
@@ -0,0 +1,65 @@
+{% extends 'scipost/layout_2_col.html' %}
+
+{% load bootstrap %}
+{% load request_filters %}
+{% load submissions_extras %}
+{% load request_filters %}
+
+{% block body_class %}{{block.super}} sidebar-left{% endblock %}
+
+{% block pagetitle %}: Publications{% endblock pagetitle %}
+
+{% block page_header %}<h1 class="highlight">Recent SciPost Publications</h1>{% endblock page_header %}
+
+{% block breadcrumb_items %}
+    <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
+    <span class="breadcrumb-item">Publications</span>
+{% endblock %}
+
+{% block content %}
+
+<div class="row">
+    <div class="col-12">
+        <ul class="list-unstyled">
+            {% for publication in object_list %}
+                <li>
+                    <div class="card card-grey card-publication">
+                        {% include 'journals/_publication_card_content.html' with publication=publication %}
+                    </div>
+                </li>
+            {% empty %}
+                <h3><em>No match found for your search query.</em></h3>
+            {% endfor %}
+        </ul>
+    </div>
+    {% if is_paginated %}
+        <div class="col-12">
+            {% include 'partials/pagination.html' with page_obj=page_obj %}
+        </div>
+    {% endif %}
+</div>
+
+{% endblock content %}
+
+
+{% block sidebar %}
+    <div class="row">
+        <div class="col-12">
+            <h2 class="mb-2">Recent Issues</h2>
+            <div class="mb-1 pl-2">
+                <a href="?{% url_replace issue='' page='' subject='' %}" class="{% active_get_request 'issue' '' %}">All Issues</a>
+            </div>
+            {% for issue in recent_issues %}
+                <div class="mb-1 pl-2">
+                    <a href="?{% url_replace issue=issue.id page='' subject='' %}" class="{% active_get_request 'issue' issue.id %}">{{ issue.in_volume.in_journal }} {{ issue.short_str }}</a>
+                    <br>{{ issue.period_as_string }}
+                </div>
+            {% endfor %}
+
+            <h2 class="mb-2 mt-4">Subject area</h2>
+            {% for subject in subject_areas %}
+                <a href="?{% url_replace subject=subject.0 page='' %}" class="d-inline-block mb-1 ml-2 {% active_get_request 'subject' subject.0 %}">{{ subject.1 }}</a><br>
+            {% endfor %}
+        </div>
+    </div>
+{% endblock %}
diff --git a/journals/templates/journals/publication_publish_form.html b/journals/templates/journals/publication_publish_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..b361b0c290a7bf02204221da22a49548b99e4d4d
--- /dev/null
+++ b/journals/templates/journals/publication_publish_form.html
@@ -0,0 +1,57 @@
+{% extends 'scipost/base.html' %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: Publish Publication{% endblock pagetitle %}
+
+{% block content %}
+
+
+<h1 class="highlight">Publish Publication</h1>
+{% include 'partials/journals/publication_summary.html' with publication=form.instance %}
+
+<h3>Authors</h3>
+<ul>
+    {% for author in form.instance.authors.all %}
+        <li>{{ author }}</li>
+    {% empty %}
+        <li>No authors assigned</li>
+    {% endfor %}
+</ul>
+
+<h3>Funding statement</h3>
+<p>{{ form.instance.metadata.funding_statement|default:'<em>No funding statement found.</em>' }}</p>
+
+<h3>Grants</h3>
+<ul>
+    {% for grant in form.instance.grants.all %}
+        <li>{{ grant }}</li>
+    {% empty %}
+        <li>No grants assigned</li>
+    {% endfor %}
+</ul>
+
+{% include 'partials/journals/references.html' with publication=form.instance %}
+
+<hr class="divider">
+<h3>Publishing will do the following:</h3>
+<div>
+    <ul>
+        <li>Move the pdf file to the appropriate folder</li>
+        <li>Update the Submission status</li>
+        <li>Update the Production Stream status</li>
+        <li>Send the authors a publication-email</li>
+    </ul>
+    <em>Reminder: Is the metadata already deposited at Crossref?</em>
+</div>
+<br>
+<form method="post" enctype="multipart/form-data">
+    {% csrf_token %}
+    {{ form|bootstrap }}
+    <input type="submit" class="btn btn-primary" value="Publish">
+</form>
+
+
+
+
+{% endblock %}
diff --git a/journals/templates/journals/sign_existing_report.html b/journals/templates/journals/sign_existing_report.html
index 422659cd787f3887bd2c3ca8d230a118a83a33f1..4e2649a0b7884e6d8c5d9904089ff039b5bbcd35 100644
--- a/journals/templates/journals/sign_existing_report.html
+++ b/journals/templates/journals/sign_existing_report.html
@@ -34,7 +34,7 @@
         <form action="{% url 'journals:sign_existing_report' report_id=report.id %}" method="post">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input class="btn btn-secondary" type="submit" value="Submit" />
+            <input class="btn btn-outline-secondary" type="submit" value="Submit" />
         </form>
     </div>
 </div>
@@ -42,7 +42,7 @@
 <div class="row">
     <div class="col-12">
         <h3>Report on Submission <a href="{{report.submission.get_absolute_url}}">{{report.submission.title}}</a></h3>
-        {% include 'submissions/_single_public_report_without_comments.html' with report=report user=request.user perms=perms %}
+        {% include 'partials/submissions/report_public_without_comments.html' with report=report user=request.user perms=perms %}
     </div>
 </div>
 
diff --git a/journals/templates/journals/validate_publication.html b/journals/templates/journals/validate_publication.html
deleted file mode 100644
index db78a13e090435434f2826e8dee528feed773071..0000000000000000000000000000000000000000
--- a/journals/templates/journals/validate_publication.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% load bootstrap %}
-
-{% block pagetitle %}: Validate publication{% endblock pagetitle %}
-
-{% block content %}
-
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">Validate publication page</h1>
-    </div>
-</div>
-
-<div class="row justify-content-center">
-    <div class="col-lg-10">
-        {% if errormessage %}
-            <h2 style="color: red;">{{ errormessage }}</h2>
-        {% endif %}
-
-        <form action="{% url 'journals:validate_publication' %}" method="post" enctype="multipart/form-data">
-            {% csrf_token %}
-            {{ validate_publication_form|bootstrap }}
-            <input class="btn btn-secondary" type="submit" value="Submit">
-        </form>
-    </div>
-</div>
-
-{% endblock content %}
diff --git a/journals/templates/partials/journals/admin/publication_actions.html b/journals/templates/partials/journals/admin/publication_actions.html
new file mode 100644
index 0000000000000000000000000000000000000000..5d9fa275a20c39c16c94c7cd3a6d6c53424b76cd
--- /dev/null
+++ b/journals/templates/partials/journals/admin/publication_actions.html
@@ -0,0 +1,18 @@
+<ul class="mb-0">
+  <li><a href="{% url 'journals:add_author' doi_label=publication.doi_label %}">Add a missing author</a></li>
+  <li><a href="{% url 'journals:update_author_ordering' doi_label=publication.doi_label %}">Update Author ordering</a></li>
+  <li><a href="{% url 'journals:create_citation_list_metadata' publication.doi_label %}">Create/update citation list metadata</a></li>
+  <li><a href="{% url 'journals:create_funding_info_metadata' publication.doi_label %}">Create/update funding info metadata</a></li>
+  <li><a href="{% url 'journals:create_metadata_xml' publication.doi_label %}">Create/update the XML metadata</a></li>
+  <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'test' %}">Test metadata deposit (via Crossref test server)</a></li>
+  <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'deposit' %}">Deposit the metadata to Crossref</a></li>
+  <li><a href="{% url 'journals:produce_metadata_DOAJ' doi_label=publication.doi_label %}">Produce DOAJ metadata</a></li>
+  <li><a href="{% url 'journals:metadata_DOAJ_deposit' doi_label=publication.doi_label %}">Deposit the metadata to DOAJ</a></li>
+  <li><a href="{% url 'journals:harvest_citedby_links' publication.doi_label %}">Update Crossref cited-by links</a></li>
+  <li><a href="{% url 'journals:manage_metadata' doi_label=publication.doi_label %}">Metadata management page</a></li>
+  <li><a href="{% url 'journals:update_references' doi_label=publication.doi_label %}">Update references</a></li>
+  {% if not publication.is_published %}
+      <li><a href="{% url 'journals:update_publication' publication.accepted_submission.arxiv_identifier_w_vn_nr %}">Update Publication object</a></li>
+      <li><strong><a href="{% url 'journals:publish_publication' publication.doi_label %}">Publish this Publication</a></strong></li>
+  {% endif %}
+</ul>
diff --git a/journals/templates/partials/journals/publication_li_content.html b/journals/templates/partials/journals/publication_li_content.html
index 2f8346ba21f8b2516f3cc1698d256f787030363d..9bb1406455a4bc4b18b6c3516416460ce667c9e3 100644
--- a/journals/templates/partials/journals/publication_li_content.html
+++ b/journals/templates/partials/journals/publication_li_content.html
@@ -1,7 +1,9 @@
-<h5 class="pb-0">{{publication.get_subject_area_display}}</h5>
-<h3><a href="{{publication.get_absolute_url}}">{{publication.title}}</a></h3>
+<div class="li publication">
+    <h5 class="subject">{{publication.get_subject_area_display}}</h5>
+    <h3 class="title"><a href="{{publication.get_absolute_url}}">{{publication.title}}</a></h3>
 
-<p class="mt-0 mb-2">{{ publication.author_list }}</p>
-<p class="text-muted mb-0">
-    {{ publication.citation }} &middot; <span class="font-weight-light">published {{ publication.publication_date|date:'j F Y' }}</span>
-</p>
+    <p class="authors">{{ publication.author_list }}</p>
+    <p class="meta mb-0">
+      {{ publication.citation }} &middot; <span class="font-weight-light">published {{ publication.publication_date|date:'j F Y' }}</span>
+    </p>
+</div>
diff --git a/journals/templates/partials/journals/publication_li_content_extended.html b/journals/templates/partials/journals/publication_li_content_extended.html
new file mode 100644
index 0000000000000000000000000000000000000000..400d677b974f58134632d7980a860b0128da5139
--- /dev/null
+++ b/journals/templates/partials/journals/publication_li_content_extended.html
@@ -0,0 +1,17 @@
+<div class="li publication">
+    <h5 class="subject">{{ publication.citation }}</h5>
+    <h3 class="title"><a href="{{publication.get_absolute_url}}">{{publication.title}}</a></h3>
+
+    <p class="authors">{{ publication.author_list }}</p>
+    <p class="meta">
+        doi: <a href="{{ publication.get_absolute_url }}">{{ publication.doi_string }}</a> &middot;
+        <span class="font-weight-light">published {{ publication.publication_date|date:'j F Y' }}</span> &middot;
+        <a href="{% url 'scipost:publication_pdf' publication.doi_label %}" target="_blank"><i class="fa fa-file-pdf-o" aria-hidden="true"></i> pdf</a>
+    </p>
+    <div class="abstract">
+        <a href="javascript:;" data-toggle="toggle" data-target="#abstract-{{ publication.id }}">+ Show abstract</a>
+        <div id="abstract-{{ publication.id }}" style="display: none;" class="mt-2">
+            {{ publication.abstract }}
+        </div>
+    </div>
+</div>
diff --git a/journals/templates/partials/journals/publication_preparation.html b/journals/templates/partials/journals/publication_preparation.html
new file mode 100644
index 0000000000000000000000000000000000000000..6012a9cbbf072da75046af6129394c9b1cb56a30
--- /dev/null
+++ b/journals/templates/partials/journals/publication_preparation.html
@@ -0,0 +1,18 @@
+{% load publication_administration %}
+
+<h3>Publication preparation</h3>
+<ul class="fa-ul">
+    <li><i class="fa-li fa fa-check-square text-success"></i><a href="{% url 'journals:update_publication' publication.accepted_submission.arxiv_identifier_w_vn_nr %}">Create/update Publication object</a></li>
+    <li><i class="fa-li fa {% if publication|has_all_author_relations %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:add_author' publication.doi_label %}">Create all author relations</a></li>
+    <li><i class="fa-li fa {% if publication.has_citation_list %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:create_citation_list_metadata' publication.doi_label %}">Create/update citation metadata</a></li>
+    <li><i class="fa-li fa {% if publication.has_funding_statement %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:create_funding_info_metadata' publication.doi_label %}">Create/update funding info metadata</a></li>
+    <li><i class="fa-li fa {% if publication.grants.exists %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:update_grants' publication.doi_label %}">Create/update grants</a></li>
+    <li><i class="fa-li fa {% if publication.has_xml_metadata %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:create_metadata_xml' publication.doi_label %}">Create/update Crossref metadata</a> <em>(please do after citation and funding info are added)</em></li>
+    <li><i class="fa-li fa {% if publication.references.exists %}fa-check-square text-success{% else %}fa-square{% endif %}"></i><a href="{% url 'journals:update_references' doi_label=publication.doi_label %}">Create/update references</a></li>
+</ul>
+
+<h3>Tools</h3>
+<ul>
+    <li><a href="{% url 'journals:metadata_xml_deposit' publication.doi_label 'test' %}">Test Crossref deposit</a></li>
+</ul>
+Preparation completed? <a href="{% url 'journals:send_publication_for_approval' publication.doi_label %}">Send to administration for approval</a>.
diff --git a/journals/templates/partials/journals/publication_ris.html b/journals/templates/partials/journals/publication_ris.html
new file mode 100644
index 0000000000000000000000000000000000000000..64d1bf2cf6f3df71a0bfbf06c9f0a8eebc79f5ab
--- /dev/null
+++ b/journals/templates/partials/journals/publication_ris.html
@@ -0,0 +1,28 @@
+{% spaceless %}
+    <pre>
+        <code>
+        <span>TY  - JOUR</span><br>
+        <span>PB  - SciPost Foundation</span><br>
+        <span>DO  - {{ publication.doi_string }}</span><br>
+        <span>TI  - {{ publication.title }}</span><br>
+        <span>PY  - {{ publication.publication_date|date:'Y/m/d' }}</span><br>
+        <span>UR  - https://scipost.org{{ publication.get_absolute_url }}</span><br>
+        <span>JF  - {{ publication.get_journal.get_name_display }}</span><br>
+        <span>JA  - {{ publication.get_journal.abbreviation_citation }}</span><br>
+        {% if publication.in_issue %}
+            <span>VL  - {{ publication.in_issue.in_volume.number }}</span><br>
+            <span>IS  - {{ publication.in_issue.number }}</span><br>
+        {% endif %}
+        <span>SP  - {{ publication.get_paper_nr }}</span><br>
+        {% for author in publication.authors.all %}
+            {% if forloop.first %}
+                <span>A1  - {{ author.last_name }}, {{ author.first_name }}</span><br>
+            {% else %}
+                <span>AU  - {{ author.last_name }}, {{ author.first_name }}</span><br>
+            {% endif %}
+        {% endfor %}
+        <span>AB  - {{ publication.abstract }}</span><br>
+        <span>ER  -</span>
+        </code>
+    </pre>
+{% endspaceless %}
diff --git a/journals/templates/partials/journals/publication_summary.html b/journals/templates/partials/journals/publication_summary.html
index 014da1f23f015d0a82d9b59bf0be546a35470a09..ff6b434747ef4d4944b263e1dc90df7a49af6d24 100644
--- a/journals/templates/partials/journals/publication_summary.html
+++ b/journals/templates/partials/journals/publication_summary.html
@@ -1,7 +1,7 @@
 
 <div class="row">
     <div class="col-12">
-        <h2 class="pb-1 text-blue">{{publication.title}}</h2>
+        <h2 class="pb-1 text-blue">{{publication.title}}{% if publication.status == 'draft' %} <label class="label label-warning label-sm">{{ publication.get_status_display }}</label>{% endif %}</h2>
 
         <p class="mb-1">{{ publication.author_list }}</p>
         <p class="text-muted mb-0">
@@ -17,6 +17,7 @@
                 <a href="{{publication.get_absolute_url}}/pdf" target="_blank">pdf</a>
             </li>
             <li><a href="javascript:;" data-toggle="modal" data-target="#bibtextmodal">BiBTeX</a></li>
+            <li><a href="javascript:;" data-toggle="modal" data-target="#rismodal">RIS</a></li>
             <li><a href="{% url 'submissions:submission' publication.accepted_submission.arxiv_identifier_w_vn_nr %}">Submissions/Reports</a></li>
     	    <li>
     	      <!-- Start Crossmark Snippet v2.0 -->
@@ -40,6 +41,22 @@
 </div>
 
 
+<div class="modal" id="rismodal" tabindex="-1" role="dialog" aria-hidden="true" aria-labelledby="rismodal">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-body">
+                <div class="pb-4">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span>
+                    </button>
+                </div>
+                <div>{% include 'partials/journals/publication_ris.html' with publication=publication %}</div>
+            </div>
+        </div>
+    </div>
+</div>
+
+
 <div class="modal" id="bibtextmodal" tabindex="-1" role="dialog" aria-hidden="true" aria-labelledby="bibtextmodal">
     <div class="modal-dialog modal-lg" role="document">
         <div class="modal-content">
diff --git a/journals/templates/xml/publication_crossref.html b/journals/templates/xml/publication_crossref.html
new file mode 100644
index 0000000000000000000000000000000000000000..f2de3a9fd96bd5bc91aad846b24c0da253de085f
--- /dev/null
+++ b/journals/templates/xml/publication_crossref.html
@@ -0,0 +1,140 @@
+{% spaceless %}
+<?xml version="1.0" encoding="UTF-8"?>
+<doi_batch version="4.4.0" xmlns="http://www.crossref.org/schema/4.4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:fr="http://www.crossref.org/fundref.xsd" xsi:schemaLocation="http://www.crossref.org/schema/4.4.0 http://www.crossref.org/shema/deposit/crossref4.4.0.xsd" xmlns:ai="http://www.crossref.org/AccessIndicators.xsd">
+    <head>
+        <doi_batch_id>{{ doi_batch_id }}</doi_batch_id>
+        <timestamp>{% now "YmdHis" %}</timestamp>
+        <depositor>
+            <depositor_name>scipost</depositor_name>
+            <email_address>{{ deposit_email }}</email_address>
+        </depositor>
+        <registrant>scipost</registrant>
+    </head>
+    <body>
+        <journal>
+            {% if publication.in_issue %}
+                <journal_metadata>
+                    <full_title>{{ publication.in_issue.in_volume.in_journal.get_name_display }}</full_title>
+                    <abbrev_title>{{ publication.in_issue.in_volume.in_journal.abbreviation_citation }}</abbrev_title>
+                    <issn media_type='electronic'>{{ publication.in_issue.in_volume.in_journal.issn }}</issn>
+                    <doi_data>
+                        <doi>{{ publication.in_issue.in_volume.in_journal.doi_string }}</doi>
+                        <resource>https://scipost.org/{{ publication.in_issue.in_volume.in_journal.doi_string }}</resource>
+                    </doi_data>
+                </journal_metadata>
+                <journal_issue>
+                    <publication_date media_type='online'>
+                        <year>{{ publication.publication_date|date:'Y' }}</year>
+                    </publication_date>
+                    <journal_volume>
+                        <volume>{{ publication.in_issue.in_volume.number }}</volume>
+                    </journal_volume>
+                    <issue>{{ publication.in_issue.number }}</issue>
+                </journal_issue>
+            {% else %}
+                <journal_metadata>
+                    <full_title>{{ publication.in_journal.get_name_display }}</full_title>
+                    <abbrev_title>{{ publication.in_journal.abbreviation_citation }}</abbrev_title>
+                    <issn media_type='electronic'>{{ publication.in_journal.issn }}</issn>
+                    <doi_data>
+                        <doi>{{ publication.in_journal.doi_string }}</doi>
+                        <resource>https://scipost.org/{{ publication.in_journal.doi_string }}</resource>
+                    </doi_data>
+                </journal_metadata>
+            {% endif %}
+            <journal_article publication_type='full_text'>
+                <titles>
+                    <title>{{ publication.title }}</title>
+                </titles>
+
+                <contributors>
+                    {% for author_object in publication.authors.all %}
+                        {% if author_object.order == 1 %}
+                            <person_name sequence='first' contributor_role='author'>
+                        {% else %}
+                            <person_name sequence='additional' contributor_role='author'>
+                        {% endif %}
+                        <given_name>{{ author_object.first_name }}</given_name>
+                        <surname>{{ author_object.last_name }}</surname>
+                        {% if author_object.contributor and author_object.contributor.orcid_id %}
+                            <ORCID>https://orcid.org/{{ author_object.contributor.orcid_id }}</ORCID>
+                        {% endif %}
+                        </person_name>
+                    {% endfor %}
+                </contributors>
+
+                <publication_date media_type='online'>
+                    <month>{{ publication.publication_date|date:'m' }}</month>
+                    <day>{{ publication.publication_date|date:'d' }}</day>
+                    <year>{{ publication.publication_date|date:'Y' }}</year>
+                </publication_date>
+                <publisher_item>
+                    <item_number item_number_type='article_number'>{{ publication.paper_nr }}</item_number>
+                </publisher_item>
+                <crossmark>
+                    <crossmark_policy>10.21468/SciPost.CrossmarkPolicy</crossmark_policy>
+                    <crossmark_domains>
+                        <crossmark_domain><domain>scipost.org</domain></crossmark_domain>
+                    </crossmark_domains>
+                    <crossmark_domain_exclusive>false</crossmark_domain_exclusive>
+                    <custom_metadata>
+                        {% if funders %}
+                            <fr:program name='fundref'>
+                                {% for funder in funders %}
+                                    {% if funders|length > 1 %}
+                                        <fr:assertion name='fundgroup'>
+                                    {% endif %}
+
+                                    <fr:assertion name='funder_name'>{{ funder.name }}
+                                        <fr:assertion name='funder_identifier'>{{ funder.identifier }}</fr:assertion>
+                                    </fr:assertion>
+
+                                    {% for grant in publication.grants.all %}
+                                        {% if grant.funder == funder %}
+                                            <fr:assertion name='award_number'>{{ grant.number }}</fr:assertion>
+                                        {% endif %}
+                                    {% endfor %}
+
+                                    {% if funders|length > 1 %}
+                                        </fr:assertion>
+                                    {% endif %}
+                                {% endfor %}
+                            </fr:program>
+                        {% endif %}
+
+                        <ai:program name="AccessIndicators">
+                            <ai:license_ref>{{ publication.get_cc_license_URI }}</ai:license_ref>
+                        </ai:program>
+                    </custom_metadata>
+                </crossmark>
+                <archive_locations>
+                    <archive name="CLOCKSS"></archive>
+                </archive_locations>
+                <doi_data>
+                    <doi>{{ publication.doi_string }}</doi>
+                    <resource>https://scipost.org/{{ publication.doi_string }}</resource>
+                    <collection property='crawler-based'>
+                        <item crawler='iParadigms'>
+                            <resource>https://scipost.org/{{ publication.doi_string }}/pdf</resource>
+                        </item>
+                    </collection>
+                    <collection property='text-mining'>
+                        <item>
+                            <resource mime_type='application/pdf'>https://scipost.org/{{ publication.doi_string }}/pdf</resource>
+                        </item>
+                    </collection>
+                </doi_data>
+                {% if publication.metadata.citation_list %}
+                    <citation_list>
+                        {% for ref in publication.metadata.citation_list %}
+                            <citation key='{{ ref.key }}'>
+                                <doi>{{ ref.doi }}</doi>
+                            </citation>
+                        {% endfor %}
+                    </citation_list>
+                {% endif %}
+            </journal_article>
+        </journal>
+    </body>
+</doi_batch>
+{% endspaceless %}
diff --git a/journals/templatetags/journals_extras.py b/journals/templatetags/journals_extras.py
index fa6370f73bf45bfcb683840a82f28d5767d9e93d..9d8950779ff50d3639d8abd490ab5050d2fa453e 100644
--- a/journals/templatetags/journals_extras.py
+++ b/journals/templatetags/journals_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from journals.helpers import paper_nr_string
@@ -9,6 +13,7 @@ register = template.Library()
 def paper_nr_string_filter(nr):
     return paper_nr_string(nr)
 
+
 @register.filter(name='latest_successful_crossref_deposit')
 def latest_successful_crossref_deposit(publication):
     latest = publication.deposit_set.filter(
@@ -18,6 +23,7 @@ def latest_successful_crossref_deposit(publication):
     else:
         return "No successful deposit found"
 
+
 @register.filter(name='latest_successful_DOAJ_deposit')
 def latest_successful_DOAJ_deposit(publication):
     latest = publication.doajdeposit_set.filter(
@@ -27,8 +33,9 @@ def latest_successful_DOAJ_deposit(publication):
     else:
         return "No successful deposit found"
 
+
 @register.filter(name='latest_successful_crossref_deposit_report')
-def latest_successful_crossref_deposit(report):
+def latest_successful_crossref_deposit_report(report):
     latest = report.genericdoideposit.filter(
         deposit_successful=True).order_by('-deposition_date').first()
     if latest:
@@ -36,8 +43,9 @@ def latest_successful_crossref_deposit(report):
     else:
         return "No successful deposit found"
 
+
 @register.filter(name='latest_successful_crossref_deposit_comment')
-def latest_successful_crossref_deposit(comment):
+def latest_successful_crossref_deposit_comment(comment):
     latest = comment.genericdoideposit.filter(
         deposit_successful=True).order_by('-deposition_date').first()
     if latest:
diff --git a/journals/templatetags/lookup.py b/journals/templatetags/lookup.py
index bdfeb24b0ce148daab9e22cc133a37abf5e7cc2a..01f1af19c0e9c9d212364ea673c6f9eef65f5402 100644
--- a/journals/templatetags/lookup.py
+++ b/journals/templatetags/lookup.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from ajax_select import register, LookupChannel
 from ..models import Publication
 
@@ -28,4 +32,4 @@ class PublicationLookup(LookupChannel):
         Right now only used for draft registration invitations. May be extended in the
         future for other purposes as well.
         """
-        return request.user.has_perm('can_draft_registration_invitations')
+        return request.user.has_perm('can_create_registration_invitations')
diff --git a/journals/templatetags/publication_administration.py b/journals/templatetags/publication_administration.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce411dc04d40fac60672d273c44a0cc137adec05
--- /dev/null
+++ b/journals/templatetags/publication_administration.py
@@ -0,0 +1,15 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django import template
+
+register = template.Library()
+
+
+@register.filter
+def has_all_author_relations(publication):
+    """
+    Check if all authors are added to the Publication object, just by counting.
+    """
+    return len(publication.author_list.split(',')) == publication.authors.count()
diff --git a/journals/tests.py b/journals/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/journals/tests.py
+++ b/journals/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/journals/urls/general.py b/journals/urls/general.py
index c57c961fd9e4985efee6e2e2b7fc310190e2547c..aa45db5a152e0bbf692ce8227b0ac61e0ca66cc0 100644
--- a/journals/urls/general.py
+++ b/journals/urls/general.py
@@ -1,12 +1,21 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 from django.urls import reverse_lazy
 from django.views.generic import TemplateView, RedirectView
 
+from submissions.constants import SUBMISSIONS_COMPLETE_REGEX
+
+from journals.constants import PUBLICATION_DOI_REGEX, REGEX_CHOICES
 from journals import views as journals_views
 
+
 urlpatterns = [
     # Journals
     url(r'^$', journals_views.journals, name='journals'),
+    url(r'^publications$', journals_views.PublicationListView.as_view(), name='publications'),
     url(r'scipost_physics', RedirectView.as_view(url=reverse_lazy('scipost:landing_page',
                                                  args=['SciPostPhys']))),
     url(r'^journals_terms_and_conditions$',
@@ -16,91 +25,122 @@ urlpatterns = [
         TemplateView.as_view(template_name='journals/crossmark_policy.html'),
         name='crossmark_policy'),
 
+    # Publication creation
+    url(r'^admin/publications/{regex}/$'.format(regex=SUBMISSIONS_COMPLETE_REGEX),
+        journals_views.DraftPublicationUpdateView.as_view(),
+        name='update_publication'),
+    url(r'^admin/publications/(?P<doi_label>{regex})/publish$'.format(regex=PUBLICATION_DOI_REGEX),
+        journals_views.PublicationPublishView.as_view(),
+        name='publish_publication'),
+    url(r'^admin/publications/(?P<doi_label>{regex})/approval$'.format(
+            regex=PUBLICATION_DOI_REGEX),
+        journals_views.DraftPublicationApprovalView.as_view(),
+        name='send_publication_for_approval'),
+    url(r'^admin/publications/(?P<doi_label>{regex})/authors$'.format(regex=PUBLICATION_DOI_REGEX),
+        # journals_views.PublicationAuthorOrderingView.as_view(),
+        journals_views.publication_authors_ordering,
+        name='update_author_ordering'),
+    url(r'^admin/publications/(?P<doi_label>{regex})/grants$'.format(regex=PUBLICATION_DOI_REGEX),
+        journals_views.PublicationGrantsView.as_view(),
+        name='update_grants'),
+    url(r'^admin/publications/(?P<doi_label>{regex})/grants/(?P<grant_id>[0-9]+)/remove$'.format(
+            regex=PUBLICATION_DOI_REGEX),
+        journals_views.PublicationGrantsRemovalView.as_view(),
+        name='remove_grant'),
+
     # Editorial and Administrative Workflow
-    url(r'^initiate_publication$',
-        journals_views.initiate_publication,
-        name='initiate_publication'),
-    url(r'^validate_publication$',
-        journals_views.validate_publication,
-        name='validate_publication'),
-    url(r'^mark_first_author/(?P<publication_id>[0-9]+)/(?P<author_object_id>[0-9]+)$',
-        journals_views.mark_first_author,
-        name='mark_first_author'),
-    url(r'^add_author/(?P<publication_id>[0-9]+)/(?P<contributor_id>[0-9]+)$',
+    url(r'^admin/(?P<doi_label>{regex})/authors/add/(?P<contributor_id>[0-9]+)$'.format(
+            regex=PUBLICATION_DOI_REGEX),
         journals_views.add_author,
         name='add_author'),
-    url(r'^add_author/(?P<publication_id>[0-9]+)$',
+    url(r'^admin/(?P<doi_label>{regex})/authors/add$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.add_author,
         name='add_author'),
-    url(r'^manage_metadata/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/(?P<doi_label>{regex})/manage_metadata$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.manage_metadata,
         name='manage_metadata'),
-    url(r'^manage_metadata/(?P<issue_doi_label>[a-zA-Z]+.[0-9]+.[0-9]+)$',
+    url(r'^admin/(?P<issue_doi_label>[a-zA-Z]+.[0-9]+.[0-9]+)/manage_metadata$',
         journals_views.manage_metadata,
         name='manage_metadata'),
-    url(r'^manage_metadata/$',
+    url(r'^admin/(?P<journal_doi_label>{regex})/manage_metadata$'.format(regex=REGEX_CHOICES),
         journals_views.manage_metadata,
         name='manage_metadata'),
-    url(r'^create_citation_list_metadata/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_citation_list_metadata,
+    url(r'^admin/manage_metadata/$',
+        journals_views.manage_metadata,
+        name='manage_metadata'),
+    url(r'^admin/(?P<doi_label>{regex})/citation_list_metadata$'.format(
+            regex=PUBLICATION_DOI_REGEX),
+        journals_views.CitationUpdateView.as_view(),
         name='create_citation_list_metadata'),
-    url(r'^update_references/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/(?P<doi_label>{regex})/update_references$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.update_references, name='update_references'),
-    url(r'^create_funding_info_metadata/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_funding_info_metadata,
+    url(r'^admin/(?P<doi_label>{regex})/funders/create_metadata$'.format(
+            regex=PUBLICATION_DOI_REGEX),
+        journals_views.FundingInfoView.as_view(),
         name='create_funding_info_metadata'),
-    url(r'^add_associated_grant/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.add_associated_grant,
-        name='add_associated_grant'),
-    url(r'^add_generic_funder/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/(?P<doi_label>{regex})/funders/add_generic$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.add_generic_funder,
         name='add_generic_funder'),
-    url(r'^create_metadata_xml/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_metadata_xml,
+    url(r'^admin/(?P<doi_label>{regex})/grants/add$'.format(regex=PUBLICATION_DOI_REGEX),
+        journals_views.add_associated_grant,
+        name='add_associated_grant'),
+
+    # Metadata handling
+    url(r'^admin/(?P<doi_label>{regex})/metadata/crossref/create$'.format(
+            regex=PUBLICATION_DOI_REGEX),
+        journals_views.CreateMetadataXMLView.as_view(),
         name='create_metadata_xml'),
-    url(r'^metadata_xml_deposit/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/(?P<option>[a-z]+)$',
+    url(r'^admin/(?P<doi_label>{regex})/metadata/crossref/deposit/(?P<option>[a-z]+)$'.format(
+            regex=PUBLICATION_DOI_REGEX),
         journals_views.metadata_xml_deposit,
         name='metadata_xml_deposit'),
-    url(r'^mark_deposit_success/(?P<deposit_id>[0-9]+)/(?P<success>[0-1])$',
-        journals_views.mark_deposit_success,
-        name='mark_deposit_success'),
-    url(r'^produce_metadata_DOAJ/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/(?P<doi_label>{regex})/metadata/DOAJ$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.produce_metadata_DOAJ,
         name='produce_metadata_DOAJ'),
-    url(r'^metadata_DOAJ_deposit/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/(?P<doi_label>{regex})/metadata/DOAJ/deposit$'.format(
+            regex=PUBLICATION_DOI_REGEX),
         journals_views.metadata_DOAJ_deposit,
         name='metadata_DOAJ_deposit'),
-    url(r'^mark_doaj_deposit_success/(?P<deposit_id>[0-9]+)/(?P<success>[0-1])$',
+    url(r'^admin/metadata/crossref/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$',
+        journals_views.mark_deposit_success,
+        name='mark_deposit_success'),
+    url(r'^admin/metadata/DOAJ/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$',
         journals_views.mark_doaj_deposit_success,
         name='mark_doaj_deposit_success'),
-    url(r'^harvest_citedby_list/$',
+    url(r'^admin/metadata/generic/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)/metadata$',
+        journals_views.generic_metadata_xml_deposit,
+        name='generic_metadata_xml_deposit'),
+    url(r'^admin/metadata/generic/(?P<deposit_id>[0-9]+)/mark/(?P<success>[0-1])$',
+        journals_views.mark_generic_deposit_success,
+        name='mark_generic_deposit_success'),
+    url(r'^admin/generic/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)/email_made_citable$',
+        journals_views.email_object_made_citable,
+        name='email_object_made_citable'),
+
+    # Citedby
+    url(r'^admin/citedby/$',
         journals_views.harvest_citedby_list,
         name='harvest_citedby_list'),
-    url(r'^harvest_citedby_links/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^admin/citedby/(?P<doi_label>{regex})/harvest$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.harvest_citedby_links,
         name='harvest_citedby_links'),
-    url(r'^sign_existing_report/(?P<report_id>[0-9]+)$',
-        journals_views.sign_existing_report,
-        name='sign_existing_report'),
-    url(r'^manage_report_metadata/$',
+
+    # Reports
+    url(r'^reports/$',
         journals_views.manage_report_metadata,
         name='manage_report_metadata'),
-    url(r'^manage_comment_metadata/$',
-        journals_views.manage_comment_metadata,
-        name='manage_comment_metadata'),
-    url(r'^mark_report_doi_needed/(?P<report_id>[0-9]+)/(?P<needed>[0-1])$',
+    url(r'^reports/(?P<report_id>[0-9]+)/sign$',
+        journals_views.sign_existing_report,
+        name='sign_existing_report'),
+    url(r'^reports/(?P<report_id>[0-9]+)/mark_doi_needed/(?P<needed>[0-1])$',
         journals_views.mark_report_doi_needed,
         name='mark_report_doi_needed'),
-    url(r'^mark_comment_doi_needed/(?P<comment_id>[0-9]+)/(?P<needed>[0-1])$',
+
+    # Comments
+    url(r'^comments/$',
+        journals_views.manage_comment_metadata,
+        name='manage_comment_metadata'),
+    url(r'^comments/(?P<comment_id>[0-9]+)/mark_doi_needed/(?P<needed>[0-1])$',
         journals_views.mark_comment_doi_needed,
         name='mark_comment_doi_needed'),
-    url(r'^generic_metadata_xml_deposit/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)$',
-        journals_views.generic_metadata_xml_deposit,
-        name='generic_metadata_xml_deposit'),
-    url(r'^mark_generic_deposit_success/(?P<deposit_id>[0-9]+)/(?P<success>[0-1])$',
-        journals_views.mark_generic_deposit_success,
-        name='mark_generic_deposit_success'),
-    url(r'^email_object_made_citable/(?P<type_of_object>[a-z]+)/(?P<object_id>[0-9]+)$',
-        journals_views.email_object_made_citable,
-        name='email_object_made_citable'),
 ]
diff --git a/journals/urls/journal.py b/journals/urls/journal.py
index 5cffb7d42d425137fe5e89fe136f45fa2e71472b..8f3c0a749c21f6b47a06e0d0158ee4a74ae10a95 100644
--- a/journals/urls/journal.py
+++ b/journals/urls/journal.py
@@ -1,12 +1,16 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from journals import views as journals_views
 
 urlpatterns = [
     # Journal routes
-    url(r'^issues$', journals_views.issues, name='issues'),
-    url(r'^recent$', journals_views.recent, name='recent'),
-    url(r'^accepted$', journals_views.accepted, name='accepted'),
+    url(r'^issues$', journals_views.IssuesView.as_view(), name='issues'),
+    url(r'^recent$', journals_views.RecentView.as_view(), name='recent'),
+    url(r'^accepted$', journals_views.AcceptedView.as_view(), name='accepted'),
     url(r'^info_for_authors$', journals_views.info_for_authors, name='info_for_authors'),
     url(r'^about$', journals_views.about, name='about'),
 ]
diff --git a/journals/utils.py b/journals/utils.py
index da14da589fed0cdb9713666f5c451ad1c6263108..29adf7063bf416bc45d77e7f0a483d346b3d5634 100644
--- a/journals/utils.py
+++ b/journals/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.mail import EmailMessage
 
 from common.utils import BaseMailUtil
@@ -18,13 +22,14 @@ class JournalUtils(BaseMailUtil):
                       cls.publication.accepted_submission.title +
                       ' by ' + cls.publication.accepted_submission.author_list +
                       '\n\nhas been published online with reference '
-                      + cls.publication.citation() + '.'
+                      + cls.publication.citation + '.'
                       '\n\nThe publication page is located at the permanent link '
                       'https://scipost.org/' + cls.publication.doi_label + '.'
                       '\n\nThe permanent DOI for your publication is 10.21468/'
                       + cls.publication.doi_label + '.'
-                      '\n\nTo facilitate dissemination of your paper, we greatly encourage '
-                      'you to update the arXiv Journal-ref with this information.'
+                      '\n\nTo facilitate dissemination of your paper, we will also automatically '
+                      'update the arXiv Journal-ref with this information (this update usually '
+                      'takes place within one week; you do not need to take action).'
                       '\n\nWe warmly congratulate you on this achievement and thank you '
                       'for entrusting us with the task of publishing your research. '
                       '\n\nSincerely,' +
@@ -37,57 +42,6 @@ class JournalUtils(BaseMailUtil):
             reply_to=['admin@scipost.org'])
         emailmessage.send(fail_silently=False)
 
-    @classmethod
-    def generate_metadata_DOAJ(cls):
-        """ Requires loading 'publication' attribute. """
-        md = {
-            'bibjson': {
-                'author': [{'name': cls.publication.author_list}],
-                'title': cls.publication.title,
-                'abstract': cls.publication.abstract,
-                'year': cls.publication.publication_date.strftime('%Y'),
-                'month': cls.publication.publication_date.strftime('%m'),
-                'start_page': cls.publication.get_paper_nr(),
-                'identifier': [
-                    {
-                        'type': 'eissn',
-                        'id': str(cls.publication.in_issue.in_volume.in_journal.issn)
-                    },
-                    {
-                        'type': 'doi',
-                        'id': cls.publication.doi_string
-                    }
-                ],
-                'link': [
-                    {
-                        'url': cls.request.build_absolute_uri(cls.publication.get_absolute_url()),
-                        'type': 'fulltext',
-                    }
-                ],
-                'journal': {
-                    'publisher': 'SciPost',
-                    'volume': str(cls.publication.in_issue.in_volume.number),
-                    'number': str(cls.publication.in_issue.number),
-                    'identifier': [{
-                        'type': 'eissn',
-                        'id': str(cls.publication.in_issue.in_volume.in_journal.issn)
-                    }],
-                    'license': [
-                        {
-                            'url': cls.request.build_absolute_uri(
-                                cls.publication.in_issue.in_volume.in_journal.get_absolute_url()),
-                            'open_access': 'true',
-                            'type': cls.publication.get_cc_license_display(),
-                            'title': cls.publication.get_cc_license_display(),
-                        }
-                    ],
-                    'language': ['EN'],
-                    'title': cls.publication.in_issue.in_volume.in_journal.get_name_display(),
-                }
-            }
-        }
-        return md
-
     @classmethod
     def email_report_made_citable(cls):
         """ Requires loading 'report' attribute. """
diff --git a/journals/views.py b/journals/views.py
index 2456765e8afcf0601a8725e8b6efbec92db10d3d..a5fee852fb4deb606f67f47e472de14bb46f6a17 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import hashlib
 import json
 import os
@@ -10,6 +14,7 @@ import xml.etree.ElementTree as ET
 
 from django.contrib.auth.decorators import login_required
 from django.contrib.contenttypes.models import ContentType
+from django.core.exceptions import PermissionDenied
 from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
 from django.core.urlresolvers import reverse
 from django.conf import settings
@@ -17,27 +22,31 @@ from django.contrib import messages
 from django.db import transaction
 from django.http import Http404, HttpResponse
 from django.utils import timezone
-from django.shortcuts import get_object_or_404, render, redirect
+from django.utils.decorators import method_decorator
+from django.views.generic.detail import DetailView
+from django.views.generic.edit import UpdateView
+from django.views.generic.list import ListView
+from django.shortcuts import get_object_or_404, get_list_or_404, render, redirect
 
-from .exceptions import PaperNumberingError
-from .helpers import paper_nr_string, issue_doi_label_from_doi_label
+from .constants import STATUS_DRAFT, PUBLICATION_PREPUBLISHED
 from .models import Journal, Issue, Publication, Deposit, DOAJDeposit,\
                     GenericDOIDeposit, PublicationAuthorsTable
-from .forms import FundingInfoForm, InitiatePublicationForm, ValidatePublicationForm,\
+from .forms import FundingInfoForm,\
                    UnregisteredAuthorForm, CreateMetadataXMLForm, CitationListBibitemsForm,\
-                   ReferenceFormSet
+                   ReferenceFormSet, CreateMetadataDOAJForm, DraftPublicationForm,\
+                   PublicationGrantsForm, DraftPublicationApprovalForm, PublicationPublishForm,\
+                   PublicationAuthorOrderingFormSet
+from .mixins import PublicationMixin, ProdSupervisorPublicationPermissionMixin
 from .utils import JournalUtils
 
 from comments.models import Comment
-from funders.models import Funder
-from submissions.models import Submission, Report
-from scipost.models import Contributor
-from production.constants import PROOFS_PUBLISHED
-from production.models import ProductionEvent
-from production.signals import notify_stream_status_change
-
 from funders.forms import FunderSelectForm, GrantSelectForm
+from funders.models import Grant
+from submissions.models import Submission, Report
+from scipost.constants import SCIPOST_SUBJECT_AREAS
 from scipost.forms import ConfirmationForm
+from scipost.models import Contributor
+from scipost.mixins import PermissionsMixin, RequestViewMixin, PaginationMixin
 
 from guardian.decorators import permission_required
 
@@ -52,101 +61,128 @@ def journals(request):
     return render(request, 'journals/journals.html', context)
 
 
-def landing_page(request, doi_label):
-    journal = get_object_or_404(Journal, doi_label=doi_label)
-
-    current_issue = Issue.objects.published(
-        in_volume__in_journal=journal,
-        start_date__lte=timezone.now(),
-        until_date__gte=timezone.now()).order_by('-until_date').first()
-    latest_issue = Issue.objects.published(
-        in_volume__in_journal=journal,
-        until_date__lte=timezone.now()).order_by('-until_date').first()
+class PublicationListView(PaginationMixin, ListView):
+    """
+    Show Publications filtered per subject area.
+    """
+    queryset = Publication.objects.published()
+    paginate_by = 10
+
+    def get_queryset(self):
+        qs = super().get_queryset()
+        if self.request.GET.get('issue'):
+            try:
+                issue = int(self.request.GET['issue'])
+            except ValueError:
+                issue = None
+            if issue:
+                qs = qs.filter(in_issue__id=issue)
+        if self.request.GET.get('subject'):
+            qs = qs.for_subject(self.request.GET['subject'])
+        return qs.order_by('-publication_date')
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['recent_issues'] = Issue.objects.published().order_by('-start_date')[:5]
+        context['subject_areas'] = (('', 'Show all'),) + SCIPOST_SUBJECT_AREAS[0][1]
+        return context
 
-    prev_issue = None
-    if current_issue:
-        prev_issue = (Issue.objects.published(in_volume__in_journal=journal,
-                                              start_date__lt=current_issue.start_date)
-                                   .order_by('start_date').last())
 
+def landing_page(request, doi_label):
+    """
+    The landing page of a Journal lists either the latest and the current issue of a Journal
+    of paginates the individual Publications.
+    """
+    journal = get_object_or_404(Journal, doi_label=doi_label)
     context = {
-        'current_issue': current_issue,
-        'latest_issue': latest_issue,
-        'prev_issue': prev_issue,
         'journal': journal
     }
-    return render(request, 'journals/journal_landing_page.html', context)
 
+    if journal.has_issues:
+        current_issue = Issue.objects.published().filter(
+            in_volume__in_journal=journal,
+            start_date__lte=timezone.now(),
+            until_date__gte=timezone.now()).first()
+        latest_issue = Issue.objects.published().filter(
+            in_volume__in_journal=journal,
+            until_date__lte=timezone.now()).first()
+        prev_issue = None
+        if current_issue:
+            prev_issue = Issue.objects.published().filter(
+                in_volume__in_journal=journal, start_date__lt=current_issue.start_date
+                ).order_by('start_date').last()
+
+        context.update({
+            'current_issue': current_issue,
+            'latest_issue': latest_issue,
+            'prev_issue': prev_issue,
+        })
+    else:
+        paginator = Paginator(journal.publications.published(), 10)
+        context.update({
+            'page_object': paginator.page(request.GET.get('page', 1)),
+        })
+    return render(request, 'journals/journal_landing_page.html', context)
 
-def issues(request, doi_label):
-    journal = get_object_or_404(Journal, doi_label=doi_label)
 
-    issues = Issue.objects.published(in_volume__in_journal=journal).order_by('-until_date')
-    context = {
-        'issues': issues,
-        'journal': journal
-    }
-    return render(request, 'journals/journal_issues.html', context)
+class IssuesView(DetailView):
+    """
+    List all Issues sorted per Journal.
+    """
+    queryset = Journal.objects.has_issues()
+    slug_field = slug_url_kwarg = 'doi_label'
+    template_name = 'journals/journal_issues.html'
 
 
-def recent(request, doi_label):
+class RecentView(DetailView):
     """
-    Display page for the most recent 20 publications in SciPost Physics.
+    List all recent Publications for a specific Journal.
     """
-    journal = get_object_or_404(Journal, doi_label=doi_label)
-    recent_papers = Publication.objects.published(
-        in_issue__in_volume__in_journal=journal).order_by('-publication_date',
-                                                          '-paper_nr')[:20]
-    context = {
-        'recent_papers': recent_papers,
-        'journal': journal,
-    }
-    return render(request, 'journals/journal_recent.html', context)
+    queryset = Journal.objects.active()
+    slug_field = slug_url_kwarg = 'doi_label'
+    template_name = 'journals/journal_recent.html'
 
 
-def accepted(request, doi_label):
+class AcceptedView(DetailView):
     """
-    Display page for submissions to SciPost Physics which
-    have been accepted but are not yet published.
+    List all Submissions for a specific Journal which have been accepted but are not
+    yet published.
     """
-    journal = get_object_or_404(Journal, doi_label=doi_label)
-    accepted_SP_submissions = (Submission.objects.accepted()
-                               .filter(submitted_to_journal=journal.name)
-                               .order_by('-latest_activity'))
-    context = {
-        'accepted_SP_submissions': accepted_SP_submissions,
-        'journal': journal
-    }
-    return render(request, 'journals/journal_accepted.html', context)
+    queryset = Journal.objects.active()
+    slug_field = slug_url_kwarg = 'doi_label'
+    template_name = 'journals/journal_accepted.html'
+
+    def get_context_data(self, **kwargs):
+        context = super().get_context_data(**kwargs)
+        context['accepted_submissions'] = Submission.objects.accepted().filter(
+            submitted_to_journal=context['journal'].name).order_by('-latest_activity')
+        return context
 
 
 def info_for_authors(request, doi_label):
     journal = get_object_or_404(Journal, doi_label=doi_label)
-    context = {
-        'journal': journal
-    }
+    context = {'journal': journal}
     return render(request, 'journals/%s_info_for_authors.html' % doi_label, context)
 
 
 def about(request, doi_label):
     journal = get_object_or_404(Journal, doi_label=doi_label)
-    context = {
-        'journal': journal
-    }
+    context = {'journal': journal}
     return render(request, 'journals/%s_about.html' % doi_label, context)
 
 
 def issue_detail(request, doi_label):
-    issue = Issue.objects.get_published(doi_label=doi_label)
+    issue = get_object_or_404(Issue.objects.published(), doi_label=doi_label)
     journal = issue.in_volume.in_journal
 
-    papers = issue.publication_set.order_by('paper_nr')
-    next_issue = (Issue.objects.published(in_volume__in_journal=journal,
-                                          start_date__gt=issue.start_date)
-                               .order_by('start_date').first())
-    prev_issue = (Issue.objects.published(in_volume__in_journal=journal,
-                                          start_date__lt=issue.start_date)
-                               .order_by('start_date').last())
+    papers = issue.publications.published().order_by('paper_nr')
+    next_issue = Issue.objects.published().filter(
+        in_volume__in_journal=journal, start_date__gt=issue.start_date
+        ).order_by('start_date').first()
+    prev_issue = Issue.objects.published().filter(
+        in_volume__in_journal=journal, start_date__lt=issue.start_date
+        ).order_by('start_date').last()
+
     context = {
         'issue': issue,
         'prev_issue': prev_issue,
@@ -160,176 +196,135 @@ def issue_detail(request, doi_label):
 #######################
 # Publication process #
 #######################
-
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-@transaction.atomic
-def initiate_publication(request):
+class PublicationGrantsView(PermissionsMixin, UpdateView):
     """
-    Called by an Editorial Administrator.
-    Publish the manuscript after proofs have been accepted.
-    This method prefills a ValidatePublicationForm for further
-    processing (verification in validate_publication method).
+    Add/update grants associated to a Publication.
     """
-    initiate_publication_form = InitiatePublicationForm(request.POST or None)
-    if initiate_publication_form.is_valid():
-        submission = initiate_publication_form.cleaned_data['accepted_submission']
-        current_issue = initiate_publication_form.cleaned_data['to_be_issued_in']
-
-        # Determine next available paper number:
-        paper_nr = Publication.objects.filter(in_issue__in_volume=current_issue.in_volume).count()
-        paper_nr += 1
-        if paper_nr > 999:
-            raise PaperNumberingError(paper_nr)
-
-        # Build form data
-        doi_label = (
-            current_issue.in_volume.in_journal.name
-            + '.' + str(current_issue.in_volume.number)
-            + '.' + str(current_issue.number) + '.' + paper_nr_string(paper_nr)
-        )
-        doi_string = '10.21468/' + doi_label
-        BiBTeX_entry = (
-            '@Article{' + doi_label + ',\n'
-            '\ttitle={{' + submission.title + '}},\n'
-            '\tauthor={' + submission.author_list.replace(',', ' and') + '},\n'
-            '\tjournal={'
-            + current_issue.in_volume.in_journal.get_abbreviation_citation()
-            + '},\n'
-            '\tvolume={' + str(current_issue.in_volume.number) + '},\n'
-            '\tissue={' + str(current_issue.number) + '},\n'
-            '\tpages={' + paper_nr_string(paper_nr) + '},\n'
-            '\tyear={' + current_issue.until_date.strftime('%Y') + '},\n'
-            '\tpublisher={SciPost},\n'
-            '\tdoi={' + doi_string + '},\n'
-            '\turl={https://scipost.org/' + doi_string + '},\n'
-            '}\n'
-        )
-        initial = {
-            'accepted_submission': submission,
-            'in_issue': current_issue,
-            'paper_nr': paper_nr,
-            'discipline': submission.discipline,
-            'domain': submission.domain,
-            'subject_area': submission.subject_area,
-            'secondary_areas': submission.secondary_areas,
-            'title': submission.title,
-            'author_list': submission.author_list,
-            'abstract': submission.abstract,
-            'BiBTeX_entry': BiBTeX_entry,
-            'doi_label': doi_label,
-            'acceptance_date': submission.acceptance_date,
-            'submission_date': submission.submission_date,
-            'publication_date': timezone.now(),
-        }
-        validate_publication_form = ValidatePublicationForm(initial=initial)
-        context = {'validate_publication_form': validate_publication_form}
-        return render(request, 'journals/validate_publication.html', context)
-
-    context = {'initiate_publication_form': initiate_publication_form}
-    return render(request, 'journals/initiate_publication.html', context)
+    permission_required = 'scipost.can_draft_publication'
+    queryset = Publication.objects.drafts()
+    slug_field = slug_url_kwarg = 'doi_label'
+    form_class = PublicationGrantsForm
+    template_name = 'journals/grants_form.html'
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-@transaction.atomic
-def validate_publication(request):
+class PublicationGrantsRemovalView(PermissionsMixin, DetailView):
     """
-    This creates a Publication instance from the ValidatePublicationForm,
-    pre-filled by the initiate_publication method above.
+    Remove grant associated to a Publication.
     """
-    # TODO: move from uploads to Journal folder
-    # TODO: create metadata
-    # TODO: set DOI, register with Crossref
-    # TODO: add funding info
-    context = {}
-    validate_publication_form = ValidatePublicationForm(request.POST or None,
-                                                        request.FILES or None)
-    if validate_publication_form.is_valid():
-        publication = validate_publication_form.save()
-
-        # Fill remaining data
-        submission = publication.accepted_submission
-        if publication.first_author_unregistered:
-            PublicationAuthorsTable.objects.create(
-                order=1,
-                publication=publication,
-                unregistered_author=publication.first_author_unregistered)
-
-        for submission_author in submission.authors.all():
-            PublicationAuthorsTable.objects.create(
-                publication=publication, contributor=submission_author)
-        publication.authors_claims.add(*submission.authors_claims.all())
-        publication.authors_false_claims.add(*submission.authors_false_claims.all())
-
-        # Add Institutions to the publication
-        for author in publication.authors_registered.all():
-            for current_affiliation in author.affiliations.active():
-                publication.institutions.add(current_affiliation.institution)
-
-        # Save the beast
-        publication.save()
+    permission_required = 'scipost.can_draft_publication'
+    queryset = Publication.objects.drafts()
+    slug_field = slug_url_kwarg = 'doi_label'
 
-        # Move file to final location
-        initial_path = publication.pdf_file.path
-        new_dir = (settings.MEDIA_ROOT + publication.in_issue.path + '/'
-                   + publication.get_paper_nr())
-        new_path = new_dir + '/' + publication.doi_label.replace('.', '_') + '.pdf'
-        os.makedirs(new_dir)
-        os.rename(initial_path, new_path)
-        publication.pdf_file.name = new_path
-        publication.save()
+    def get(self, request, *args, **kwargs):
+        super().get(request, *args, **kwargs)
+        grant = get_object_or_404(Grant, id=kwargs.get('grant_id'))
+        self.object.grants.remove(grant)
+        return redirect(reverse('journals:update_grants', args=(self.object.doi_label,)))
 
-        # Mark the submission as having been published:
-        submission.published_as = publication
-        submission.status = 'published'
-        submission.save()
-
-        # Update ProductionStream
-        if hasattr(submission, 'production_stream'):
-            stream = submission.production_stream
-            stream.status = PROOFS_PUBLISHED
-            stream.save()
-            if request.user.production_user:
-                prodevent = ProductionEvent(
-                    stream=stream,
-                    event='status',
-                    comments=' published the manuscript.',
-                    noted_by=request.user.production_user
-                )
-                prodevent.save()
-            notify_stream_status_change(request.user, stream, False)
-
-        # TODO: Create a Commentary Page
-        # Email authors
-        JournalUtils.load({'publication': publication})
-        JournalUtils.send_authors_paper_published_email()
-
-        # Add SubmissionEvents
-        submission.add_general_event('The Submission has been published as %s.'
-                                     % publication.doi_label)
-
-        messages.success(request, 'The publication has been validated.')
+
+@permission_required('scipost.can_publish_accepted_submission', raise_exception=True)
+def publication_authors_ordering(request, doi_label):
+    publication = get_object_or_404(Publication, doi_label=doi_label)
+    formset = PublicationAuthorOrderingFormSet(
+        request.POST or None, queryset=publication.authors.order_by('order'))
+    if formset.is_valid():
+        formset.save()
+        messages.success(request, 'Author ordering updated')
         return redirect(publication.get_absolute_url())
-    else:
-        context['errormessage'] = 'The form was invalid.'
+    context = {
+        'formset': formset,
+        'publication': publication,
+    }
+    return render(request, 'journals/publication_authors_form.html', context)
 
-    context['validate_publication_form'] = validate_publication_form
-    return render(request, 'journals/validate_publication.html', context)
+
+class DraftPublicationUpdateView(PermissionsMixin, UpdateView):
+    """
+    Any Production Officer or Administrator can draft a new publication without publishing here.
+    The actual publishing is done lin a later stadium, after the draft has been finished.
+    """
+    permission_required = 'scipost.can_draft_publication'
+    queryset = Publication.objects.unpublished()
+    slug_url_kwarg = 'arxiv_identifier_w_vn_nr'
+    slug_field = 'accepted_submission__arxiv_identifier_w_vn_nr'
+    form_class = DraftPublicationForm
+    template_name = 'journals/publication_form.html'
+
+    def get_object(self, queryset=None):
+        try:
+            publication = Publication.objects.get(
+                accepted_submission__arxiv_identifier_w_vn_nr=self.kwargs.get(
+                    'arxiv_identifier_w_vn_nr'))
+        except Publication.DoesNotExist:
+            if Submission.objects.accepted().filter(arxiv_identifier_w_vn_nr=self.kwargs.get(
+              'arxiv_identifier_w_vn_nr')).exists():
+                return None
+            raise Http404('No accepted Submission found')
+        if publication.status == STATUS_DRAFT:
+            return publication
+        if self.request.user.has_perm('scipost.can_publish_accepted_submission'):
+            return publication
+        raise Http404('Found Publication is not in draft')
+
+    def get_form_kwargs(self):
+        kwargs = super().get_form_kwargs()
+        kwargs['arxiv_identifier_w_vn_nr'] = self.kwargs.get('arxiv_identifier_w_vn_nr')
+        kwargs['issue_id'] = self.request.GET.get('issue')
+        return kwargs
+
+
+class DraftPublicationApprovalView(PermissionsMixin, UpdateView):
+    permission_required = 'scipost.can_draft_publication'
+    queryset = Publication.objects.drafts()
+    slug_field = slug_url_kwarg = 'doi_label'
+    form_class = DraftPublicationApprovalForm
+    template_name = 'journals/publication_approval_form.html'
+
+
+@method_decorator(transaction.atomic, name='dispatch')
+class PublicationPublishView(PermissionsMixin, RequestViewMixin, UpdateView):
+    permission_required = 'scipost.can_publish_accepted_submission'
+    queryset = Publication.objects.unpublished()
+    slug_field = slug_url_kwarg = 'doi_label'
+    form_class = PublicationPublishForm
+    template_name = 'journals/publication_publish_form.html'
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
-def manage_metadata(request, issue_doi_label=None, doi_label=None):
-    issues = Issue.objects.all().order_by('-until_date')
-    publications = Publication.objects.all()
+def manage_metadata(request, doi_label=None, issue_doi_label=None, journal_doi_label=None):
+    journal = None
+    journals = Journal.objects.all()
+    issue = None
+
     if doi_label:
-        issue_doi_label = issue_doi_label_from_doi_label(doi_label)
-    if issue_doi_label:
-        publications = publications.filter(in_issue__doi_label=issue_doi_label)
-    publications = publications.order_by('-publication_date', '-paper_nr')
+        publications = get_list_or_404(Publication, doi_label=doi_label)
+        journal = publications[0].get_journal()
+    elif issue_doi_label:
+        issue = get_object_or_404(Issue, doi_label=issue_doi_label)
+        if issue.in_volume:
+            journal = issue.in_volume.in_journal
+        else:
+            journal = issue.in_journal
+        publications = issue.publications.all()
+    elif journal_doi_label:
+        journal = get_object_or_404(Journal, doi_label=journal_doi_label)
+        publications = Publication.objects.for_journal(journal.name)
+    else:
+        # Limit the amount of Publications to still an idiot size
+        publications = Publication.objects.all()[:50]
+
+    # Speeds up operations by reducing the number of queries
+    if not isinstance(publications, list):
+        publications = publications.prefetch_related(
+            'authors', 'funders_generic', 'deposit_set', 'doajdeposit_set')
+
     associate_grant_form = GrantSelectForm()
     associate_generic_funder_form = FunderSelectForm()
     context = {
-        'issues': issues,
+        'journal': journal,
+        'journals': journals,
         'issue_doi_label': issue_doi_label,
+        'journal_doi_label': journal_doi_label,
         'publications': publications,
         'associate_grant_form': associate_grant_form,
         'associate_generic_funder_form': associate_generic_funder_form,
@@ -337,44 +332,19 @@ def manage_metadata(request, issue_doi_label=None, doi_label=None):
     return render(request, 'journals/manage_metadata.html', context)
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-def mark_first_author(request, publication_id, author_object_id):
-    publication = get_object_or_404(Publication, id=publication_id)
-    author_object = get_object_or_404(publication.authors, id=author_object_id)
-
-    # Save explicit relation
-    if author_object.is_registered:
-        publication.first_author = author_object.contributor
-        publication.first_author_unregistered = None
-    else:
-        publication.first_author = None
-        publication.first_author_unregistered = author_object.unregistered_author
-    publication.save()
-
-    # Redo ordering
-    author_object.order = 1
-    author_object.save()
-    author_objects = publication.authors.exclude(id=author_object.id)
-    count = 2
-    for author in author_objects:
-        author.order = count
-        author.save()
-        count += 1
-    messages.success(request, 'Marked {} first author'.format(author_object))
-    return redirect(reverse('journals:manage_metadata',
-                            kwargs={'doi_label': publication.doi_label}))
-
-
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
+@permission_required('scipost.can_draft_publication', return_403=True)
 @transaction.atomic
-def add_author(request, publication_id, contributor_id=None, unregistered_author_id=None):
+def add_author(request, doi_label, contributor_id=None, unregistered_author_id=None):
     """
     If not all authors are registered Contributors or if they have not
     all claimed authorship, this method allows editorial administrators
     to associated them to the publication.
     This is important for the Crossref metadata, in which all authors must appear.
     """
-    publication = get_object_or_404(Publication, id=publication_id)
+    publication = get_object_or_404(Publication, doi_label=doi_label)
+    if not publication.is_draft and not request.user.has_perm('can_publish_accepted_submission'):
+        raise Http404('You do not have permission to edit this non-draft Publication')
+
     if contributor_id:
         contributor = get_object_or_404(Contributor, id=contributor_id)
         PublicationAuthorsTable.objects.create(contributor=contributor, publication=publication)
@@ -398,7 +368,6 @@ def add_author(request, publication_id, contributor_id=None, unregistered_author
                                 kwargs={'doi_label': publication.doi_label}))
     elif form.is_valid():
         contributors_found = Contributor.objects.filter(
-            # user__first_name__icontains=form.cleaned_data['first_name'],
             user__last_name__icontains=form.cleaned_data['last_name'])
     context = {
         'publication': publication,
@@ -408,38 +377,16 @@ def add_author(request, publication_id, contributor_id=None, unregistered_author
     return render(request, 'journals/add_author.html', context)
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-@transaction.atomic
-def create_citation_list_metadata(request, doi_label):
-    """
-    Called by an Editorial Administrator.
-    This populates the citation_list dictionary entry
-    in the metadata field in a Publication instance.
-    """
-    publication = get_object_or_404(Publication, doi_label=doi_label)
-    if request.method == 'POST':
-        bibitems_form = CitationListBibitemsForm(request.POST, request.FILES)
-        if bibitems_form.is_valid():
-            publication.metadata['citation_list'] = bibitems_form.extract_dois()
-            publication.save()
-    bibitems_form = CitationListBibitemsForm()
-    context = {
-        'publication': publication,
-        'bibitems_form': bibitems_form,
-    }
-    if request.method == 'POST':
-        context['citation_list'] = publication.metadata['citation_list']
-    return render(request, 'journals/create_citation_list_metadata.html', context)
-
-
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
+@permission_required('scipost.can_draft_publication', return_403=True)
 def update_references(request, doi_label):
     """
     Update the References for a certain Publication.
     """
     publication = get_object_or_404(Publication, doi_label=doi_label)
-    references = publication.references.all()
+    if not publication.is_draft and not request.user.has_perm('can_publish_accepted_submission'):
+        raise Http404('You do not have permission to edit this non-draft Publication')
 
+    references = publication.references.all()
     formset = ReferenceFormSet(request.POST or None, queryset=references, publication=publication,
                                extra=request.GET.get('extra'))
 
@@ -458,34 +405,20 @@ def update_references(request, doi_label):
     return render(request, 'journals/update_references.html', context)
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-@transaction.atomic
-def create_funding_info_metadata(request, doi_label):
+class CitationUpdateView(PublicationMixin, ProdSupervisorPublicationPermissionMixin, UpdateView):
     """
-    Called by an Editorial Administrator.
-    This populates the funding_info dictionary entry
-    in the metadata field in a Publication instance.
+    Populates the citation_list dictionary entry in the metadata field in a Publication instance.
     """
-    publication = get_object_or_404(Publication, doi_label=doi_label)
+    form_class = CitationListBibitemsForm
+    template_name = 'journals/create_citation_list_metadata.html'
 
-    funding_info_form = FundingInfoForm(request.POST or None)
-    if funding_info_form.is_valid():
-        publication.metadata['funding_statement'] = funding_info_form.cleaned_data[
-                                                        'funding_statement']
-        publication.save()
-
-    try:
-        initial = {'funding_statement': publication.metadata['funding_statement']}
-        funding_statement = initial['funding_statement']
-    except KeyError:
-        initial = {'funding_statement': ''}
-        funding_statement = ''
 
-    context = {'publication': publication,
-               'funding_info_form': FundingInfoForm(initial=initial),
-               'funding_statement': funding_statement}
-
-    return render(request, 'journals/create_funding_info_metadata.html', context)
+class FundingInfoView(PublicationMixin, ProdSupervisorPublicationPermissionMixin, UpdateView):
+    """
+    Add/update funding statement to the xml_metadata
+    """
+    form_class = FundingInfoForm
+    template_name = 'journals/create_funding_info_metadata.html'
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
@@ -499,6 +432,7 @@ def add_associated_grant(request, doi_label):
     grant_select_form = GrantSelectForm(request.POST or None)
     if grant_select_form.is_valid():
         publication.grants.add(grant_select_form.cleaned_data['grant'])
+        publication.doideposit_needs_updating = True
         publication.save()
         messages.success(request, 'Grant added to publication %s' % str(publication))
     return redirect(reverse('journals:manage_metadata',
@@ -522,193 +456,19 @@ def add_generic_funder(request, doi_label):
                             kwargs={'doi_label': doi_label}))
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
-@transaction.atomic
-def create_metadata_xml(request, doi_label):
+class CreateMetadataXMLView(PublicationMixin,
+                            ProdSupervisorPublicationPermissionMixin,
+                            UpdateView):
     """
-    To be called by an EdAdmin after the citation_list,
-    funding_info entries have been filled.
-    Populates the metadata_xml field of a Publication instance.
+    To be called by an EdAdmin (or Production Supervisor) after the citation_list, funding_info
+    entries have been filled. Populates the metadata_xml field of a Publication instance.
     The contents can then be sent to Crossref for registration.
     """
-    publication = get_object_or_404(Publication, doi_label=doi_label)
-
-    create_metadata_xml_form = CreateMetadataXMLForm(request.POST or None, instance=publication)
-    if create_metadata_xml_form.is_valid():
-        create_metadata_xml_form.save()
-        messages.success(request, 'Metadata XML saved')
-        return redirect(reverse('journals:manage_metadata',
-                                kwargs={'doi_label': doi_label}))
-
-    # create a doi_batch_id
-    salt = ""
-    for i in range(5):
-        salt = salt + random.choice(string.ascii_letters)
-    salt = salt.encode('utf8')
-    idsalt = publication.title[:10]
-    idsalt = idsalt.encode('utf8')
-    doi_batch_id = hashlib.sha1(salt+idsalt).hexdigest()
-
-    initial = {'metadata_xml': ''}
-    initial['metadata_xml'] += (
-        '<?xml version="1.0" encoding="UTF-8"?>\n'
-        '<doi_batch version="4.4.0" xmlns="http://www.crossref.org/schema/4.4.0" '
-        'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
-        'xmlns:fr="http://www.crossref.org/fundref.xsd" '
-        'xsi:schemaLocation="http://www.crossref.org/schema/4.4.0 '
-        'http://www.crossref.org/shema/deposit/crossref4.4.0.xsd" '
-        'xmlns:ai="http://www.crossref.org/AccessIndicators.xsd">\n'
-        '<head>\n'
-        '<doi_batch_id>' + str(doi_batch_id) + '</doi_batch_id>\n'
-        '<timestamp>' + timezone.now().strftime('%Y%m%d%H%M%S') + '</timestamp>\n'
-        '<depositor>\n'
-        '<depositor_name>scipost</depositor_name>\n'
-        '<email_address>' + settings.CROSSREF_DEPOSIT_EMAIL + '</email_address>\n'
-        '</depositor>\n'
-        '<registrant>scipost</registrant>\n'
-        '</head>\n'
-        '<body>\n'
-        '<journal>\n'
-        '<journal_metadata>\n'
-        '<full_title>' + publication.in_issue.in_volume.in_journal.get_name_display()
-        + '</full_title>\n'
-        '<abbrev_title>'
-        + publication.in_issue.in_volume.in_journal.get_abbreviation_citation() +
-        '</abbrev_title>\n'
-        '<issn media_type=\'electronic\'>' + publication.in_issue.in_volume.in_journal.issn
-        + '</issn>\n'
-        '<doi_data>\n'
-        '<doi>' + publication.in_issue.in_volume.in_journal.doi_string + '</doi>\n'
-        '<resource>https://scipost.org/'
-        + publication.in_issue.in_volume.in_journal.doi_string + '</resource>\n'
-        '</doi_data>\n'
-        '</journal_metadata>\n'
-        '<journal_issue>\n'
-        '<publication_date media_type=\'online\'>\n'
-        '<year>' + publication.publication_date.strftime('%Y') + '</year>\n'
-        '</publication_date>\n'
-        '<journal_volume>\n'
-        '<volume>' + str(publication.in_issue.in_volume.number) + '</volume>\n'
-        '</journal_volume>\n'
-        '<issue>' + str(publication.in_issue.number) + '</issue>\n'
-        '</journal_issue>\n'
-        '<journal_article publication_type=\'full_text\'>\n'
-        '<titles><title>' + publication.title + '</title></titles>\n'
-    )
-
-    # Precondition: all authors MUST be listed in authors field of publication instance,
-    # this to be checked by EdAdmin before publishing.
-    initial['metadata_xml'] += '<contributors>\n'
-    for author_object in publication.authors.all():
-        if author_object.order == 1:
-            initial['metadata_xml'] += (
-                '<person_name sequence=\'first\' contributor_role=\'author\'> '
-                '<given_name>' + author_object.first_name + '</given_name> '
-                '<surname>' + author_object.last_name + '</surname> '
-            )
-        else:
-            initial['metadata_xml'] += (
-                '<person_name sequence=\'additional\' contributor_role=\'author\'> '
-                '<given_name>' + author_object.first_name + '</given_name> '
-                '<surname>' + author_object.last_name + '</surname> '
-            )
-        if author_object.contributor and author_object.contributor.orcid_id:
-            initial['metadata_xml'] += (
-                '<ORCID>http://orcid.org/' + author_object.contributor.orcid_id + '</ORCID>'
-            )
-        initial['metadata_xml'] += '</person_name>\n'
-    initial['metadata_xml'] += '</contributors>\n'
-
-    initial['metadata_xml'] += (
-        '<publication_date media_type=\'online\'>\n'
-        '<month>' + publication.publication_date.strftime('%m') + '</month>'
-        '<day>' + publication.publication_date.strftime('%d') + '</day>'
-        '<year>' + publication.publication_date.strftime('%Y') + '</year>'
-        '</publication_date>\n'
-        '<publisher_item><item_number item_number_type="article_number">'
-        + paper_nr_string(publication.paper_nr) +
-        '</item_number></publisher_item>\n'
-        '<crossmark>\n'
-        '<crossmark_policy>10.21468/SciPost.CrossmarkPolicy</crossmark_policy>\n'
-        '<crossmark_domains>\n'
-        '<crossmark_domain><domain>scipost.org</domain></crossmark_domain>\n'
-        '</crossmark_domains>\n'
-        '<crossmark_domain_exclusive>false</crossmark_domain_exclusive>\n'
-        )
-    funders = (Funder.objects.filter(grant__in=publication.grants.all())
-               | publication.funders_generic.all()).distinct()
-    nr_funders = funders.count()
-    initial['metadata_xml'] += '<custom_metadata>\n'
-    if nr_funders > 0:
-        initial['metadata_xml'] += '<fr:program name="fundref">\n'
-        for funder in funders:
-            if nr_funders > 1:
-                initial['metadata_xml'] += '<fr:assertion name="fundgroup">\n'
-            initial['metadata_xml'] += (
-                '<fr:assertion name="funder_name">' + funder.name + '\n'
-                '<fr:assertion name="funder_identifier">'
-                + funder.identifier + '</fr:assertion>\n'
-                '</fr:assertion>\n')
-            for grant in publication.grants.all():
-                if grant.funder == funder:
-                    initial['metadata_xml'] += (
-                        '<fr:assertion name="award_number">'
-                        + grant.number + '</fr:assertion>\n')
-            if nr_funders > 1:
-                initial['metadata_xml'] += '</fr:assertion>\n'
-        initial['metadata_xml'] += '</fr:program>\n'
-    initial['metadata_xml'] += (
-        '<ai:program name="AccessIndicators">\n'
-        '<ai:license_ref>' + publication.get_cc_license_URI() +
-        '</ai:license_ref>\n'
-        '</ai:program>\n'
-    )
-    initial['metadata_xml'] += '</custom_metadata>\n'
-    initial['metadata_xml'] += (
-        '</crossmark>\n'
-        '<archive_locations><archive name="CLOCKSS"></archive></archive_locations>\n'
-        '<doi_data>\n'
-        '<doi>' + publication.doi_string + '</doi>\n'
-        '<resource>https://scipost.org/' + publication.doi_string + '</resource>\n'
-        '<collection property="crawler-based">\n'
-        '<item crawler="iParadigms">\n'
-        '<resource>https://scipost.org/'
-        + publication.doi_string + '/pdf</resource>\n'
-        '</item></collection>\n'
-        '<collection property="text-mining">\n'
-        '<item><resource mime_type="application/pdf">'
-        'https://scipost.org/' + publication.doi_string + '/pdf</resource></item>\n'
-        '</collection>'
-        '</doi_data>\n'
-    )
-    try:
-        if publication.metadata['citation_list']:
-            initial['metadata_xml'] += '<citation_list>\n'
-            for ref in publication.metadata['citation_list']:
-                initial['metadata_xml'] += (
-                    '<citation key="' + ref['key'] + '">'
-                    '<doi>' + ref['doi'] + '</doi>'
-                    '</citation>\n'
-                )
-        initial['metadata_xml'] += '</citation_list>\n'
-    except KeyError:
-        pass
-    initial['metadata_xml'] += (
-        '</journal_article>\n'
-        '</journal>\n'
-    )
-    initial['metadata_xml'] += '</body>\n</doi_batch>'
-
-    publication.latest_metadata_update = timezone.now()
-    publication.save()
-    context = {
-        'publication': publication,
-        'create_metadata_xml_form': CreateMetadataXMLForm(initial=initial, instance=publication),
-    }
-    return render(request, 'journals/create_metadata_xml.html', context)
+    form_class = CreateMetadataXMLForm
+    template_name = 'journals/create_metadata_xml.html'
 
 
-@permission_required('scipost.can_publish_accepted_submission', return_403=True)
+@permission_required('scipost.can_draft_publication', return_403=True)
 @transaction.atomic
 def metadata_xml_deposit(request, doi_label, option='test'):
     """
@@ -717,76 +477,98 @@ def metadata_xml_deposit(request, doi_label, option='test'):
     Makes use of the python requests module.
     """
     publication = get_object_or_404(Publication, doi_label=doi_label)
+    if not publication.is_draft and not request.user.has_perm('can_publish_accepted_submission'):
+        raise Http404('You do not have permission to access this non-draft Publication')
+    if not request.user.has_perm('can_publish_accepted_submission') and option != 'test':
+        raise PermissionDenied('You do not have permission to do real Crossref deposits')
 
     if publication.metadata_xml is None:
-        errormessage = 'This publication has no metadata. Produce it first before saving it.'
-        return render(request, 'scipost/error.html', context={'errormessage': errormessage})
-
-    timestamp = (publication.metadata_xml.partition(
-        '<timestamp>'))[2].partition('</timestamp>')[0]
-    doi_batch_id = (publication.metadata_xml.partition(
-        '<doi_batch_id>'))[2].partition('</doi_batch_id>')[0]
-    path = (settings.MEDIA_ROOT + publication.in_issue.path + '/'
-            + publication.get_paper_nr() + '/' + publication.doi_label.replace('.', '_')
-            + '_Crossref_' + timestamp + '.xml')
-
-    if os.path.isfile(path):
-        errormessage = 'The metadata file for this metadata timestamp already exists'
-        return render(request, 'scipost/error.html', context={'errormessage': errormessage})
+        messages.warning(
+            request,
+            'This publication has no metadata. Produce it first before saving it.')
+        return redirect(reverse('journals:create_metadata_xml',
+                                kwargs={'doi_label': publication.doi_label}))
 
-    if option == 'deposit' and not settings.DEBUG:
-        # CAUTION: Real deposit only on production (non-debug-mode)
-        url = 'http://doi.crossref.org/servlet/deposit'
+    timestamp = publication.metadata_xml.partition(
+        '<timestamp>')[2].partition('</timestamp>')[0]
+    doi_batch_id = publication.metadata_xml.partition(
+        '<doi_batch_id>')[2].partition('</doi_batch_id>')[0]
+
+    # Find Crossref xml files
+    path = ''
+    if publication.in_issue:
+        path += '{issue_path}/{paper_nr}/{doi_label}_Crossref'.format(
+            issue_path=publication.in_issue.path,
+            paper_nr=publication.get_paper_nr(),
+            doi_label=publication.doi_label.replace('.', '_'))
+
+    if publication.in_journal:
+        path += 'SCIPOST_JOURNALS/{journal_name}/{paper_nr}/{doi_label}_Crossref'.format(
+            journal_name=publication.in_journal.name,
+            paper_nr=publication.get_paper_nr(),
+            doi_label=publication.doi_label.replace('.', '_'))
+
+    os.makedirs(settings.MEDIA_ROOT + path, exist_ok=True)
+    path_wo_timestamp = path + '.xml'
+    path += '_{timestamp}.xml'.format(timestamp=timestamp)
+
+    valid = True
+    response_headers = None
+    response_text = None
+    if os.path.isfile(settings.MEDIA_ROOT + path):
+        # Deposit already done before.
+        valid = False
     else:
-        url = 'http://test.crossref.org/servlet/deposit'
-
-    # First perform the actual deposit to Crossref
-    params = {
-        'operation': 'doMDUpload',
-        'login_id': settings.CROSSREF_LOGIN_ID,
-        'login_passwd': settings.CROSSREF_LOGIN_PASSWORD,
+        # New deposit, go for it.
+        if option == 'deposit' and not settings.DEBUG:
+            # CAUTION: Real deposit only on production!
+            url = 'http://doi.crossref.org/servlet/deposit'
+        else:
+            url = 'http://test.crossref.org/servlet/deposit'
+
+        # First perform the actual deposit to Crossref
+        params = {
+            'operation': 'doMDUpload',
+            'login_id': settings.CROSSREF_LOGIN_ID,
+            'login_passwd': settings.CROSSREF_LOGIN_PASSWORD,
+            }
+        files = {
+            'fname': ('metadata.xml',
+                      publication.metadata_xml.encode('utf-8'),
+                      'multipart/form-data')
         }
-    files = {
-        'fname': ('metadata.xml', publication.metadata_xml.encode('utf-8'), 'multipart/form-data')
-    }
-    r = requests.post(url, params=params, files=files)
-    response_headers = r.headers
-    response_text = r.text
-
-    # Then create the associated Deposit object (saving the metadata to a file)
-    if option == 'deposit':
-        deposit = Deposit(publication=publication, timestamp=timestamp, doi_batch_id=doi_batch_id,
-                          metadata_xml=publication.metadata_xml, deposition_date=timezone.now())
-        deposit.response_text = r.text
-
-        # Save the filename with timestamp
-        path_with_timestamp = '{issue}/{paper}/{doi}_Crossref_{timestamp}.xml'.format(
-            issue=publication.in_issue.path,
-            paper=publication.get_paper_nr(),
-            doi=publication.doi_label.replace('.', '_'),
-            timestamp=timestamp)
-        f = open(settings.MEDIA_ROOT + path_with_timestamp, 'w', encoding='utf-8')
-        f.write(publication.metadata_xml)
-        f.close()
-
-        # Copy file
-        path_without_timestamp = '{issue}/{paper}/{doi}_Crossref.xml'.format(
-            issue=publication.in_issue.path,
-            paper=publication.get_paper_nr(),
-            doi=publication.doi_label.replace('.', '_'))
-        shutil.copyfile(settings.MEDIA_ROOT + path_with_timestamp,
-                        settings.MEDIA_ROOT + path_without_timestamp)
-
-        deposit.metadata_xml_file = path_with_timestamp
-        deposit.save()
-        publication.latest_crossref_deposit = timezone.now()
-        publication.save()
+        r = requests.post(url, params=params, files=files)
+        response_headers = r.headers
+        response_text = r.text
+
+        # Then create the associated Deposit object (saving the metadata to a file)
+        if option == 'deposit':
+            deposit = Deposit(publication=publication,
+                              timestamp=timestamp,
+                              doi_batch_id=doi_batch_id,
+                              metadata_xml=publication.metadata_xml,
+                              deposition_date=timezone.now())
+            deposit.response_text = r.text
+
+            # Save the filename with timestamp
+            f = open(settings.MEDIA_ROOT + path, 'w', encoding='utf-8')
+            f.write(publication.metadata_xml)
+            f.close()
+
+            # Update Crossref timestamp-free file to latest deposit
+            shutil.copyfile(settings.MEDIA_ROOT + path,
+                            settings.MEDIA_ROOT + path_wo_timestamp)
+            deposit.metadata_xml_file = path
+            deposit.save()
+            publication.latest_crossref_deposit = timezone.now()
+            publication.save()
 
     context = {
         'option': option,
         'publication': publication,
         'response_headers': response_headers,
         'response_text': response_text,
+        'valid': valid,
     }
     return render(request, 'journals/metadata_xml_deposit.html', context)
 
@@ -806,12 +588,18 @@ def mark_deposit_success(request, deposit_id, success):
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
 def produce_metadata_DOAJ(request, doi_label):
     publication = get_object_or_404(Publication, doi_label=doi_label)
-    JournalUtils.load({'request': request, 'publication': publication})
-    publication.metadata_DOAJ = JournalUtils.generate_metadata_DOAJ()
-    publication.save()
-    messages.success(request, '<h3>%s</h3>Successfully produced metadata DOAJ.'
-                              % publication.doi_label)
-    return redirect(reverse('journals:manage_metadata'))
+    form = CreateMetadataDOAJForm(request.POST or None, instance=publication, request=request)
+    if form.is_valid():
+        form.save()
+        messages.success(request, '<h3>%s</h3>Successfully produced metadata DOAJ.'
+                                  % publication.doi_label)
+        return redirect(reverse('journals:manage_metadata',
+                                kwargs={'doi_label': doi_label}))
+    context = {
+        'publication': publication,
+        'form': form
+    }
+    return render(request, 'journals/metadata_doaj_create.html', context)
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
@@ -826,14 +614,29 @@ def metadata_DOAJ_deposit(request, doi_label):
     if not publication.metadata_DOAJ:
         messages.warning(request, '<h3>%s</h3>Failed: please first produce '
                                   'DOAJ metadata before depositing.' % publication.doi_label)
-        return redirect(reverse('journals:manage_metadata'))
-
-    timestamp = (publication.metadata_xml.partition(
-        '<timestamp>'))[2].partition('</timestamp>')[0]
-    path = (settings.MEDIA_ROOT + publication.in_issue.path + '/'
-            + publication.get_paper_nr() + '/' + publication.doi_label.replace('.', '_')
-            + '_DOAJ_' + timestamp + '.json')
-    if os.path.isfile(path):
+        return redirect(reverse('journals:manage_metadata',
+                                kwargs={'doi_label': doi_label}))
+
+    timestamp = publication.metadata_xml.partition('<timestamp>')[2].partition('</timestamp>')[0]
+
+    # Find DOAJ xml files
+    path = ''
+    if publication.in_issue:
+        path += '{issue_path}/{paper_nr}/{doi_label}_DOAJ'.format(
+            issue_path=publication.in_issue.path,
+            paper_nr=publication.get_paper_nr(),
+            doi_label=publication.doi_label.replace('.', '_'))
+    elif publication.in_journal:
+        path += 'SCIPOST_JOURNALS/{journal_name}/{paper_nr}/{doi_label}_DOAJ'.format(
+            journal_name=publication.in_journal.name,
+            paper_nr=publication.get_paper_nr(),
+            doi_label=publication.doi_label.replace('.', '_'))
+
+    os.makedirs(settings.MEDIA_ROOT + path, exist_ok=True)
+    path_wo_timestamp = path + '.json'
+    path += '_{timestamp}.json'.format(timestamp=timestamp)
+
+    if os.path.isfile(settings.MEDIA_ROOT + path):
         errormessage = 'The metadata file for this metadata timestamp already exists'
         return render(request, 'scipost/error.html', context={'errormessage': errormessage})
 
@@ -854,25 +657,16 @@ def metadata_DOAJ_deposit(request, doi_label):
     deposit.response_text = r.text
 
     # Save a copy to the filename with and without timestamp
-    path_with_timestamp = '{issue}/{paper}/{doi}_DOAJ_{timestamp}.json'.format(
-        issue=publication.in_issue.path,
-        paper=publication.get_paper_nr(),
-        doi=publication.doi_label.replace('.', '_'),
-        timestamp=timestamp)
-    f = open(settings.MEDIA_ROOT + path_with_timestamp, 'w')
+    f = open(settings.MEDIA_ROOT + path, 'w')
     f.write(json.dumps(publication.metadata_DOAJ))
     f.close()
 
     # Copy file
-    path_without_timestamp = '{issue}/{paper}/{doi}_DOAJ.json'.format(
-        issue=publication.in_issue.path,
-        paper=publication.get_paper_nr(),
-        doi=publication.doi_label.replace('.', '_'))
-    shutil.copyfile(settings.MEDIA_ROOT + path_with_timestamp,
-                    settings.MEDIA_ROOT + path_without_timestamp)
+    shutil.copyfile(settings.MEDIA_ROOT + path,
+                    settings.MEDIA_ROOT + path_wo_timestamp)
 
     # Save the database entry
-    deposit.metadata_DOAJ_file = path_with_timestamp
+    deposit.metadata_DOAJ_file = path
     deposit.save()
 
     messages.success(request, '<h3>%s</h3>Successfull deposit of metadata DOAJ.'
@@ -1245,12 +1039,12 @@ def email_object_made_citable(request, **kwargs):
     if type_of_object == 'report':
         _object = get_object_or_404(Report, id=object_id)
         redirect_to = reverse('journals:manage_report_metadata')
-        publication_citation=None
-        publication_doi=None
+        publication_citation = None
+        publication_doi = None
         try:
-            publication=Publication.objects.get(
+            publication = Publication.objects.get(
                 accepted_submission__arxiv_identifier_wo_vn_nr=_object.submission.arxiv_identifier_wo_vn_nr)
-            publication_citation = publication.citation()
+            publication_citation = publication.citation
             publication_doi = publication.doi_string
         except Publication.DoesNotExist:
             pass
@@ -1296,8 +1090,21 @@ def author_reply_detail(request, doi_label):
 
 
 def publication_detail(request, doi_label):
-    publication = Publication.objects.get_published(doi_label=doi_label)
-    journal = publication.in_issue.in_volume.in_journal
+    """
+    The actual Publication detail page. This is visible for everyone if published or
+    visible for Production Supervisors and Administrators if in draft.
+    """
+    publication = get_object_or_404(Publication, doi_label=doi_label)
+    if not publication.is_published  and not publication.status == PUBLICATION_PREPUBLISHED:
+        if not request.user.has_perm('scipost.can_draft_publication'):
+            raise Http404('Publication is not publicly visible')
+
+    if publication.in_issue:
+        journal = publication.in_issue.in_volume.in_journal
+    elif publication.in_journal:
+        journal = publication.in_journal
+    else:
+        raise Http404('Publication configuration is valid')
 
     context = {
         'publication': publication,
@@ -1307,8 +1114,44 @@ def publication_detail(request, doi_label):
 
 
 def publication_detail_pdf(request, doi_label):
-    publication = Publication.objects.get_published(doi_label=doi_label)
+    """
+    The actual Publication pdf. This is visible for everyone if published or
+    visible for Production Supervisors and Administrators if in draft.
+    """
+    publication = get_object_or_404(Publication, doi_label=doi_label)
+    if not publication.is_published and not request.user.has_perm('scipost.can_draft_publication'):
+        raise Http404('Publication is not publicly visible')
+
     response = HttpResponse(publication.pdf_file.read(), content_type='application/pdf')
     response['Content-Disposition'] = ('filename='
                                        + publication.doi_label.replace('.', '_') + '.pdf')
     return response
+
+
+######################
+# Feed DOIs to arXiv #
+######################
+
+def arxiv_doi_feed(request, doi_label):
+    """
+    This method provides arXiv with the doi and journal ref of the 100 most recent
+    publications in the journal specified by doi_label.
+    """
+    journal = get_object_or_404(Journal, doi_label=doi_label)
+    feedxml = ('<preprint xmlns="http://arxiv.org/doi_feed" '
+               'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" '
+               'identifier="SciPost.org ' + doi_label + ' arXiv.org DOI feed" '
+               'version="DOI SnappyFeed v1.0" '
+               'xsi:schemaLocation="http://arxiv.org/doi_feed '
+               'http://arxiv.org/schemas/doi_feed.xsd">')
+    now = timezone.now()
+    feedxml += '<date year="%s" month="%s" day="%s" />' % (now.strftime('%Y'),
+                                                           now.strftime('%m'), now.strftime('%d'))
+    publications = Publication.objects.filter(
+        in_issue__in_volume__in_journal=journal).order_by('-publication_date')[:100]
+    for publication in publications:
+        feedxml += ('\n<article preprint_id="%s" doi="%s" journal_ref="%s" />' % (
+            publication.accepted_submission.arxiv_identifier_wo_vn_nr, publication.doi_string,
+            publication.citation))
+    feedxml += '\n</preprint>'
+    return HttpResponse(feedxml, content_type='text/xml')
diff --git a/mailing_lists/admin.py b/mailing_lists/admin.py
index 0730bce3ef54291b105d1561d7938594db162021..e0ae1f5b33533e6115e4e03dcb9b4d1423132400 100644
--- a/mailing_lists/admin.py
+++ b/mailing_lists/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import MailchimpList
diff --git a/mailing_lists/apps.py b/mailing_lists/apps.py
index 7b4422d51ad5206634f7e010a8d74f96dba289b5..2b9f85b5ec37d825a937b28284298c8680f63588 100644
--- a/mailing_lists/apps.py
+++ b/mailing_lists/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/mailing_lists/constants.py b/mailing_lists/constants.py
index f0146707df801221665e3497740e8043b11469fa..285a6594484c3725bfee0884ed970b3301ab6f36 100644
--- a/mailing_lists/constants.py
+++ b/mailing_lists/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 MAIL_LIST_STATUS_ACTIVE = 'active'
 MAIL_LIST_STATUS_DEACTIVATED = 'deactivated'
 MAIL_LIST_STATUSES = (
diff --git a/mailing_lists/forms.py b/mailing_lists/forms.py
index b5fed11fb236bad305fcafd7e966675f202582cd..e5880d9aa2e90a34ad8e6a699465934fb394ad2e 100644
--- a/mailing_lists/forms.py
+++ b/mailing_lists/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.conf import settings
 
diff --git a/mailing_lists/managers.py b/mailing_lists/managers.py
index c58c92de26405a91950d440684c18b206a59f4d9..1a16081d0ee437cc1a1f400eba6bf6910ddff455 100644
--- a/mailing_lists/managers.py
+++ b/mailing_lists/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 from .constants import MAIL_LIST_STATUS_ACTIVE
diff --git a/mailing_lists/models.py b/mailing_lists/models.py
index dc636cf4c349331d62885a284e87ab25f39b0449..e9ccc0b32da6c800d3179cda24d3a3adb32cc709 100644
--- a/mailing_lists/models.py
+++ b/mailing_lists/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import json
 
 from django.db import models, transaction
@@ -13,7 +17,7 @@ from .constants import MAIL_LIST_STATUSES, MAIL_LIST_STATUS_ACTIVE,\
 from .managers import MailListManager
 
 from scipost.behaviors import TimeStampedModel
-from scipost.constants import CONTRIBUTOR_NORMAL
+from scipost.constants import NORMAL_CONTRIBUTOR
 from scipost.models import Contributor
 
 
@@ -84,7 +88,7 @@ class MailchimpList(TimeStampedModel):
         # are not in the list yet.
         db_subscribers = (User.objects
                           .filter(contributor__isnull=False)
-                          .filter(is_active=True, contributor__status=CONTRIBUTOR_NORMAL)
+                          .filter(is_active=True, contributor__status=NORMAL_CONTRIBUTOR)
                           .filter(contributor__accepts_SciPost_emails=True,
                                   groups__in=self.allowed_groups.all(),
                                   email__isnull=False,
diff --git a/mailing_lists/templates/mailing_lists/mailchimplist_form.html b/mailing_lists/templates/mailing_lists/mailchimplist_form.html
index e0715f011020d5d2aa060853e6173ff62cc0f9ad..ffdaf457c2df57cd819e210b8861af345f84eb0c 100644
--- a/mailing_lists/templates/mailing_lists/mailchimplist_form.html
+++ b/mailing_lists/templates/mailing_lists/mailchimplist_form.html
@@ -30,7 +30,7 @@
         <form method="post">
             {% csrf_token %}
             {{form|bootstrap}}
-            <input type="submit" value="Update" class="btn btn-secondary" />
+            <input type="submit" value="Update" class="btn btn-outline-secondary" />
         </form>
         {% if request.GET.bulkid %}
             <div class="mb-3 mt-5">
diff --git a/mailing_lists/tests.py b/mailing_lists/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/mailing_lists/tests.py
+++ b/mailing_lists/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/mailing_lists/urls.py b/mailing_lists/urls.py
index 556ecfce05736d4cde59f2b124cb891d17e9d5d5..cf553972f7b72720086df47889d67a77ffa8f3b3 100644
--- a/mailing_lists/urls.py
+++ b/mailing_lists/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/mailing_lists/views.py b/mailing_lists/views.py
index 07792fff8517e31ac61e744087daeb4fec78637b..faa490050e9855993987f503c660d06cf138d6eb 100644
--- a/mailing_lists/views.py
+++ b/mailing_lists/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import csv
 
 from django.contrib import messages
@@ -9,7 +13,7 @@ from django.views.generic.list import ListView
 from django.core.urlresolvers import reverse
 from django.shortcuts import redirect, get_object_or_404
 
-from scipost.models import RegistrationInvitation
+from invitations.models import RegistrationInvitation
 
 from .forms import MailchimpUpdateForm
 from .models import MailchimpList
diff --git a/mails/admin.py b/mails/admin.py
index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..b2e3d3a71a1b4614308b69c395ff8be2b393886d 100644
--- a/mails/admin.py
+++ b/mails/admin.py
@@ -1,3 +1,14 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
-# Register your models here.
+from .models import MailLog
+
+
+class MailLogAdmin(admin.ModelAdmin):
+    list_display = ['__str__', 'processed']
+
+
+admin.site.register(MailLog, MailLogAdmin)
diff --git a/mails/apps.py b/mails/apps.py
index 4962a32c536cbb23c48681cc48636d4fe4007362..d393c4dcc3e6f4053cce51159df094e50cf4b1ce 100644
--- a/mails/apps.py
+++ b/mails/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/mails/backends/extendedfilebased.py b/mails/backends/base.py
similarity index 77%
rename from mails/backends/extendedfilebased.py
rename to mails/backends/base.py
index 381237b1b36224d7662945379e771b4fc14343a7..3a7833a83f3358d1d5c09c9ff6f80e5f5c7a5c95 100644
--- a/mails/backends/extendedfilebased.py
+++ b/mails/backends/base.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.mail.backends.filebased import EmailBackend as FileBacked
 
 
diff --git a/mails/backends/filebased.py b/mails/backends/filebased.py
new file mode 100644
index 0000000000000000000000000000000000000000..1c0e26d9f14c23b5e337bcaface786a3933f714d
--- /dev/null
+++ b/mails/backends/filebased.py
@@ -0,0 +1,59 @@
+from django.conf import settings
+from django.core.mail.backends.filebased import EmailBackend as FileBacked
+from django.core.mail.message import sanitize_address
+
+from ..models import MailLog
+
+
+class EmailBackend(FileBacked):
+    def write_message(self, message):
+        bcc_str = ', '.join(message.bcc).encode()
+        self.stream.write(b'Extended Mail FileBasedBackend\n\n')
+        self.stream.write(b'Bcc: ' + bcc_str + b'\n')
+        super().write_message(message)
+
+
+class ModelEmailBackend(FileBacked):
+    def send_messages(self, email_messages, force_original=False):
+        """Write all messages to the stream in a thread-safe way."""
+        if force_original:
+            return super().send_messages(email_messages)
+
+        if not email_messages:
+            return
+        msg_count = 0
+
+        try:
+            for message in email_messages:
+                self.write_message_to_db(message)
+                msg_count += 1
+        except Exception:
+            if not self.fail_silently:
+                raise
+        return msg_count
+
+    def write_message_to_db(self, email_message):
+        if not email_message.recipients():
+            return False
+        encoding = email_message.encoding or settings.DEFAULT_CHARSET
+        from_email = email_message.from_email
+        to_recipients = [sanitize_address(addr, encoding) for addr in email_message.to if addr]
+        bcc_recipients = [sanitize_address(addr, encoding) for addr in email_message.bcc if addr]
+        body = email_message.body
+        subject = email_message.subject
+        body_html = ''
+        try:
+            for alt in email_message.alternatives:
+                if alt[1] == 'text/html':
+                    body_html += alt[0]
+        except AttributeError:
+            pass
+
+        MailLog.objects.create(
+            body=body,
+            subject=subject,
+            body_html=body_html,
+            to_recipients=to_recipients,
+            bcc_recipients=bcc_recipients,
+            from_email=from_email)
+        return True
diff --git a/mails/forms.py b/mails/forms.py
index a7a8b241a3b22343728d21d1e28536af52da02b4..392a77ebccb8956100e0b4740d69a9f30ece14ac 100644
--- a/mails/forms.py
+++ b/mails/forms.py
@@ -1,133 +1,69 @@
-import re
-import json
-import inspect
-from html2text import HTML2Text
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
 
-from django import forms
-from django.core.mail import EmailMultiAlternatives
-from django.contrib.auth import get_user_model
-from django.conf import settings
-from django.template import loader
 
-from scipost.models import Contributor
+from django import forms
 
+from .mixins import MailUtilsMixin
 from .widgets import SummernoteEditor
 
 
-class EmailTemplateForm(forms.Form):
+class EmailTemplateForm(forms.Form, MailUtilsMixin):
     subject = forms.CharField(max_length=250, label="Subject*")
     text = forms.CharField(widget=SummernoteEditor, label="Text*")
     extra_recipient = forms.EmailField(label="Optional: bcc this email to", required=False)
+    prefix = 'mail_form'
 
     def __init__(self, *args, **kwargs):
-        self.mail_code = kwargs.pop('mail_code')
-        self.mail_fields = None
-        super().__init__(*args)
-
-        # Gather data
-        mail_template = loader.get_template('mail_templates/%s.html' % self.mail_code)
-        mail_template = mail_template.render(kwargs)
-        # self.doc = html.fromstring(mail_template)
-        # self.doc2 = self.doc.text_content()
-        # print(self.doc2)
-
-        json_location = '%s/mails/templates/mail_templates/%s.json' % (settings.BASE_DIR,
-                                                                       self.mail_code)
-        self.mail_data = json.loads(open(json_location).read())
-
-        # Object
-        self.object = kwargs.get(self.mail_data.get('context_object', ''), None)
-        self.recipient = None
-        if self.object:
-            recipient = self.object
-            for attr in self.mail_data.get('to_address').split('.'):
-                recipient = getattr(recipient, attr)
-                if inspect.ismethod(recipient):
-                    recipient = recipient()
-            self.recipient = recipient
+        self.pre_validation(*args, **kwargs)
+
+        # This form shouldn't be is_bound==True is there is any non-relavant POST data given.
+        data = args[0] or {}
+        if '%s-subject' % self.prefix in data.keys():
+            data = {
+                '%s-subject' % self.prefix: data.get('%s-subject' % self.prefix),
+                '%s-text' % self.prefix: data.get('%s-text' % self.prefix),
+                '%s-extra_recipient' % self.prefix: data.get('%s-extra_recipient' % self.prefix),
+            }
+        else:
+            data = None
+        super().__init__(data or None)
 
-        if not self.recipient:
+        if not self.original_recipient:
             self.fields['extra_recipient'].label = "Send this email to"
             self.fields['extra_recipient'].required = True
 
         # Set the data as initials
-        self.fields['text'].initial = mail_template
+        self.fields['text'].initial = self.mail_template
         self.fields['subject'].initial = self.mail_data['subject']
 
     def save_data(self):
         # Get text and html
-        html_message = self.cleaned_data['text']
-        handler = HTML2Text()
-        message = handler.handle(html_message)
+        self.html_message = self.cleaned_data['text']
+        self.subject = self.cleaned_data['subject']
+        self.validate_message()
+        self.validate_bcc_list()
 
         # Get recipients list. Try to send through BCC to prevent privacy issues!
-        bcc_list = []
-        if self.mail_data.get('bcc_to', False) and self.object:
-            if re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to')):
-                bcc_list = [self.mail_data.get('bcc_to')]
-            else:
-                bcc_to = self.object
-                for attr in self.mail_data.get('bcc_to').split('.'):
-                    bcc_to = getattr(bcc_to, attr)
-
-                if not isinstance(bcc_to, list):
-                    bcc_list = [bcc_to]
-                else:
-                    bcc_list = bcc_to
-        elif re.match("[^@]+@[^@]+\.[^@]+", self.mail_data.get('bcc_to', '')):
-            bcc_list = [self.mail_data.get('bcc_to')]
-
-        if self.cleaned_data.get('extra_recipient') and self.recipient:
-            bcc_list.append(self.cleaned_data.get('extra_recipient'))
-        elif self.cleaned_data.get('extra_recipient') and not self.recipient:
-            self.recipient = [self.cleaned_data.get('extra_recipient')]
-        elif not self.recipient:
+        if self.cleaned_data.get('extra_recipient') and self.original_recipient:
+            self.bcc_list.append(self.cleaned_data.get('extra_recipient'))
+        elif self.cleaned_data.get('extra_recipient') and not self.original_recipient:
+            self.original_recipient = [self.cleaned_data.get('extra_recipient')]
+        elif not self.original_recipient:
             self.add_error('extra_recipient', 'Please fill the bcc field to send the mail.')
 
-        # Check the send list
-        if isinstance(self.recipient, list):
-            recipients = self.recipient
-        elif not isinstance(self.recipient, str):
-            try:
-                recipients = list(self.recipient)
-            except TypeError:
-                recipients = [self.recipient]
-        else:
-            recipients = [self.recipient]
-        recipients = list(recipients)
-
-        # Check if email needs to be taken from instance
-        _recipients = []
-        for recipient in recipients:
-            if isinstance(recipient, Contributor):
-                _recipients.append(recipient.user.email)
-            elif isinstance(recipient, get_user_model()):
-                _recipients.append(recipient.email)
-            elif isinstance(recipient, str):
-                _recipients.append(recipient)
-
-        self.mail_fields = {
-            'subject': self.cleaned_data['subject'],
-            'message': message,
-            'html_message': html_message,
-            'recipients': _recipients,
-            'bcc_list': bcc_list,
-        }
+        self.validate_recipients()
+        self.save_mail_data()
 
     def clean(self):
         data = super().clean()
         self.save_data()
         return data
 
-    def send(self):
-        # Send the mail
-        email = EmailMultiAlternatives(
-            self.mail_fields['subject'],
-            self.mail_fields['message'],
-            '%s <%s>' % (self.mail_data.get('from_address_name', 'SciPost'),
-                         self.mail_data.get('from_address', 'no-reply@scipost.org')),  # From
-            self.mail_fields['recipients'],  # To
-            bcc=self.mail_fields['bcc_list'],
-            reply_to=[self.mail_data.get('from_address', 'no-reply@scipost.org')])
-        email.attach_alternative(self.mail_fields['html_message'], 'text/html')
-        email.send(fail_silently=False)
+
+class HiddenDataForm(forms.Form):
+    def __init__(self, form, *args, **kwargs):
+        super().__init__(form.data, *args, **kwargs)
+        for name, field in form.fields.items():
+            self.fields[name] = field
+            self.fields[name].widget = forms.HiddenInput()
diff --git a/mails/management/__init__.py b/mails/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/mails/management/commands/__init__.py b/mails/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/mails/management/commands/send_mails.py b/mails/management/commands/send_mails.py
new file mode 100644
index 0000000000000000000000000000000000000000..c684889d1b0d83caff363ed2422b52963fcb0b9a
--- /dev/null
+++ b/mails/management/commands/send_mails.py
@@ -0,0 +1,54 @@
+from django.core.management.base import BaseCommand
+from django.conf import settings
+
+from ...models import MailLog
+
+
+class Command(BaseCommand):
+    """
+    This sends the mails that are not processed, written to the database.
+    """
+    def add_arguments(self, parser):
+        parser.add_argument(
+            '--id', type=int, required=False,
+            help='The id in the `MailLog` table for a specific mail, Leave blank to send all')
+
+    def send_mails(self, mails):
+        from django.core.mail import get_connection, EmailMultiAlternatives
+
+        if hasattr(settings, 'EMAIL_BACKEND_ORIGINAL'):
+            backend = settings.EMAIL_BACKEND_ORIGINAL
+        else:
+            # Fallback to Django's default
+            backend = 'django.core.mail.backends.smtp.EmailBackend'
+
+        if backend == 'mails.backends.filebased.ModelEmailBackend':
+            raise AssertionError('The `EMAIL_BACKEND_ORIGINAL` cannot be the ModelEmailBackend')
+
+        connection = get_connection(backend=backend, fail_silently=False)
+        count = 0
+        for db_mail in mails:
+            mail = EmailMultiAlternatives(
+                db_mail.subject,
+                db_mail.body,
+                db_mail.from_email,
+                db_mail.to_recipients,
+                bcc=db_mail.bcc_recipients,
+                reply_to=(db_mail.from_email,),
+                connection=connection)
+            if db_mail.body_html:
+                mail.attach_alternative(db_mail.body_html, 'text/html')
+            response = mail.send()
+            if response:
+                count += 1
+                db_mail.processed = True
+                db_mail.save()
+        return count
+
+    def handle(self, *args, **options):
+        if options.get('id'):
+            mails = MailLog.objects.filter(id=options['id'])
+        else:
+            mails = MailLog.objects.unprocessed()
+        nr_mails = self.send_mails(mails)
+        self.stdout.write('Sent {} mails.'.format(nr_mails))
diff --git a/mails/managers.py b/mails/managers.py
new file mode 100644
index 0000000000000000000000000000000000000000..1be95a3768d1353c9452e5dec6b7df91d3e6aa5a
--- /dev/null
+++ b/mails/managers.py
@@ -0,0 +1,6 @@
+from django.db import models
+
+
+class MailLogQuerySet(models.QuerySet):
+    def unprocessed(self):
+        return self.filter(processed=False)
diff --git a/mails/migrations/0001_initial.py b/mails/migrations/0001_initial.py
new file mode 100644
index 0000000000000000000000000000000000000000..a5be4d9935ae0bb75e2180a945cce62c8178bbbd
--- /dev/null
+++ b/mails/migrations/0001_initial.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-13 16:41
+from __future__ import unicode_literals
+
+import django.contrib.postgres.fields
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='MailLog',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('processed', models.BooleanField(default=False)),
+                ('body', models.TextField()),
+                ('body_html', models.TextField(blank=True)),
+                ('to_recipients', django.contrib.postgres.fields.ArrayField(base_field=models.EmailField(max_length=254), blank=True, null=True, size=None)),
+                ('bcc_recipients', django.contrib.postgres.fields.ArrayField(base_field=models.EmailField(max_length=254), blank=True, null=True, size=None)),
+                ('from_name', models.CharField(blank=True, max_length=254)),
+                ('subject', models.CharField(blank=True, max_length=254)),
+            ],
+        ),
+    ]
diff --git a/mails/migrations/0002_auto_20180313_1744.py b/mails/migrations/0002_auto_20180313_1744.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ee0ebbdceacd5d76fc47760060a182b8c78e2a8
--- /dev/null
+++ b/mails/migrations/0002_auto_20180313_1744.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-13 16:44
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('mails', '0001_initial'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='maillog',
+            old_name='from_name',
+            new_name='from_email',
+        ),
+    ]
diff --git a/mails/mixins.py b/mails/mixins.py
new file mode 100644
index 0000000000000000000000000000000000000000..5fdb3ef421ce964f42a56a0e66d850952cb03a06
--- /dev/null
+++ b/mails/mixins.py
@@ -0,0 +1,182 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+import re
+import json
+import inspect
+from html2text import HTML2Text
+
+from django.core.mail import EmailMultiAlternatives
+from django.contrib.auth import get_user_model
+from django.conf import settings
+from django.template import loader
+
+from scipost.models import Contributor
+
+
+class MailUtilsMixin:
+    """
+    This mixin takes care of inserting the default data into the Utils or Form.
+    """
+    object = None
+    mail_fields = {}
+    mail_template = ''
+    html_message = ''
+    message = ''
+    original_recipient = ''
+
+    def __init__(self, *args, **kwargs):
+        self.pre_validation(*args, **kwargs)
+        super().__init__(*args)
+
+    def pre_validation(self, *args, **kwargs):
+        """
+        This method should be called when initiating the object.
+        """
+        self.mail_code = kwargs.pop('mail_code')
+        self.instance = kwargs.pop('instance', None)
+
+        # Gather meta data
+        json_location = '%s/mails/templates/mail_templates/%s.json' % (settings.BASE_DIR,
+                                                                       self.mail_code)
+        try:
+            self.mail_data = json.loads(open(json_location).read())
+        except OSError:
+            raise NotImplementedError(('You did not create a valid .html and .json file '
+                                       'for mail_code: %s' % self.mail_code))
+
+        # Save central object/instance
+        self.object = self.get_object(**kwargs)
+
+        # Digest the templates
+        mail_template = loader.get_template('mail_templates/%s.html' % self.mail_code)
+        if self.instance and self.mail_data.get('context_object'):
+            kwargs[self.mail_data['context_object']] = self.instance
+        self.mail_template = mail_template.render(kwargs)
+
+        # Gather Recipients data
+        self.original_recipient = self._validate_single_entry(self.mail_data.get('to_address'))[0]
+
+        self.subject = self.mail_data['subject']
+
+    def _validate_single_entry(self, entry):
+        """
+        entry -- raw email string or path or properties leading to email mail field
+
+        Returns a list of email addresses found.
+        """
+        if entry and self.object:
+            if re.match("[^@]+@[^@]+\.[^@]+", entry):
+                # Email string
+                return [entry]
+            else:
+                mail_to = self.object
+                for attr in entry.split('.'):
+                    try:
+                        mail_to = getattr(mail_to, attr)
+                        if inspect.ismethod(mail_to):
+                            mail_to = mail_to()
+                    except AttributeError:
+                        # Invalid property/mail
+                        return []
+
+                if not isinstance(mail_to, list):
+                    return [mail_to]
+                else:
+                    return mail_to
+        elif re.match("[^@]+@[^@]+\.[^@]+", entry):
+            return [entry]
+
+    def validate_bcc_list(self):
+        """
+        bcc_to in the .json file may contain multiple raw email addreses or property paths to
+        an email field. The different entries need to be comma separated.
+        """
+        # Get recipients list. Try to send through BCC to prevent privacy issues!
+        self.bcc_list = []
+        if self.mail_data.get('bcc_to'):
+            for bcc_entry in self.mail_data['bcc_to'].split(','):
+                self.bcc_list += self._validate_single_entry(bcc_entry)
+
+    def validate_recipients(self):
+        # Check the send list
+        if isinstance(self.original_recipient, list):
+            recipients = self.original_recipient
+        elif not isinstance(self.original_recipient, str):
+            try:
+                recipients = list(self.original_recipient)
+            except TypeError:
+                recipients = [self.original_recipient]
+        else:
+            recipients = [self.original_recipient]
+        recipients = list(recipients)
+
+        # Check if email needs to be taken from an instance
+        _recipients = []
+        for recipient in recipients:
+            if isinstance(recipient, Contributor):
+                _recipients.append(recipient.user.email)
+            elif isinstance(recipient, get_user_model()):
+                _recipients.append(recipient.email)
+            elif isinstance(recipient, str):
+                _recipients.append(recipient)
+        self.recipients = _recipients
+
+    def validate_message(self):
+        if not self.html_message:
+            self.html_message = self.mail_template
+        handler = HTML2Text()
+        self.message = handler.handle(self.html_message)
+
+    def validate(self):
+        """
+        Ease workflow by called this wrapper validation method.
+
+        Only to be used when the default data is used, eg. not in the EmailTemplateForm.
+        """
+        self.validate_message()
+        self.validate_bcc_list()
+        self.validate_recipients()
+        self.save_mail_data()
+
+    def save_mail_data(self):
+        self.mail_fields = {
+            'subject': self.subject,
+            'message': self.message,
+            'html_message': self.html_message,
+            'recipients': self.recipients,
+            'bcc_list': self.bcc_list,
+        }
+
+    def set_alternative_sender(self, from_name, from_address):
+        """
+        Set an alternative from address/name from the default values received from the json
+        config file. The arguments only take raw string data, no methods/properties!
+        """
+        self.mail_data['from_address_name'] = from_name
+        self.mail_data['from_address'] = from_address
+
+    def get_object(self, **kwargs):
+        if self.object:
+            return self.object
+        if self.instance:
+            return self.instance
+
+        if self.mail_data.get('context_object'):
+            return kwargs.get(self.mail_data['context_object'], None)
+
+    def send(self):
+        # Send the mail
+        email = EmailMultiAlternatives(
+            self.mail_fields['subject'],
+            self.mail_fields['message'],
+            '%s <%s>' % (self.mail_data.get('from_address_name', 'SciPost'),
+                         self.mail_data.get('from_address', 'no-reply@scipost.org')),  # From
+            self.mail_fields['recipients'],  # To
+            bcc=self.mail_fields['bcc_list'],
+            reply_to=[self.mail_data.get('from_address', 'no-reply@scipost.org')])
+        email.attach_alternative(self.mail_fields['html_message'], 'text/html')
+        email.send(fail_silently=False)
+        if self.object and hasattr(self.object, 'mail_sent'):
+            self.object.mail_sent()
diff --git a/mails/models.py b/mails/models.py
index 71a836239075aa6e6e4ecb700e9c42c95c022d91..f532cd406d7e4948bab885a923f6962d4c94fdff 100644
--- a/mails/models.py
+++ b/mails/models.py
@@ -1,3 +1,38 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
+from django.contrib.postgres.fields import ArrayField
+
+from .managers import MailLogQuerySet
+
+
+class MailLog(models.Model):
+    """
+    The MailLog table is meant as a container of mails. Mails are not directly send, but first
+    added to this table. Using a cronjob, the unsend messages are really being send using
+    the chosen MailBackend.
+    """
+    processed = models.BooleanField(default=False)
+
+    body = models.TextField()
+    body_html = models.TextField(blank=True)
+
+    to_recipients = ArrayField(
+        models.EmailField(),
+        blank=True, null=True)
+    bcc_recipients = ArrayField(
+        models.EmailField(),
+        blank=True, null=True)
+
+    from_email = models.CharField(max_length=254, blank=True)
+    subject = models.CharField(max_length=254, blank=True)
+
+    objects = MailLogQuerySet.as_manager()
 
-# Create your models here.
+    def __str__(self):
+        return '{id}. {subject} ({count} recipients)'.format(
+            id=self.id,
+            subject=self.subject[:30],
+            count=len(self.to_recipients) + len(self.bcc_recipients))
diff --git a/mails/templates/mail_templates/citation_notification.html b/mails/templates/mail_templates/citation_notification.html
new file mode 100644
index 0000000000000000000000000000000000000000..1bbf37624a29775f7becb39f6089ddc46312da17
--- /dev/null
+++ b/mails/templates/mail_templates/citation_notification.html
@@ -0,0 +1,65 @@
+
+Dear {{ notification.get_title }} {{ notification.last_name }},
+
+<br>
+<br>
+
+<p>
+    We would like to notify you that your work has been cited in
+
+    {% if notification.related_notifications.for_publications %}
+        {% if notification.related_notifications.for_publications|length > 1 %}{{ notification.related_notifications.for_publications|length }} papers{% else %}a paper{% endif %}
+        published by SciPost:
+
+        <ul>
+            {% for notification in notification.related_notifications.for_publications %}
+                <li>
+                    <a href="https://doi.org/{{ notification.publication.doi_label }}">{{ notification.publication.citation }}</a>
+                    <br>
+                    {{ notification.publication.title }}
+                    <br>
+                    <i>by {{ notification.publication.author_list }}</i>
+                </li>
+            {% endfor %}
+        </ul>
+    {% endif %}
+
+    {% if notification.related_notifications.for_submissions %}
+        {% if notification.related_notifications.for_submissions|length > 1 %}{{ notification.related_notifications.for_submissions|length }} manuscripts{% else %}a manuscript{% endif %}
+        submitted to SciPost,
+
+        <ul>
+            {% for notification in notification.related_notifications.for_submissions %}
+                <li>
+                    {{ notification.submission.title }}
+                    <br>
+                    <i>by {{ notification.submission.author_list }}</i>
+                    <br>
+                    <a href="https://scipost.org/{{ notification.submission.get_absolute_url }}">View the submission's page</a>
+                </li>
+            {% endfor %}
+        </ul>
+    {% endif %}
+</p>
+
+{% if notification.related_notifications.for_publications %}
+    <p>We hope you will find this paper of interest to your own research.</p>
+{% else %}
+    <p>You might for example consider reporting or commenting on the above submission before the refereeing deadline.</p>
+{% endif %}
+
+<p>
+    Best regards,
+    <br>
+    The SciPost Team
+</p>
+
+{% if notification.get_first_related_contributor and notification.get_first_related_contributor.activation_key %}
+    <p style="font-size: 10px;">
+        Don\'t want to receive such emails? <a href="https://scipost.org/{% url 'scipost:unsubscribe' notification.get_first_related_contributor.id notification.get_first_related_contributor.activation_key %}">Unsubscribe</a>
+    </p>
+{% endif %}
+
+
+
+{% include 'email/_footer.html' %}
diff --git a/mails/templates/mail_templates/citation_notification.json b/mails/templates/mail_templates/citation_notification.json
new file mode 100644
index 0000000000000000000000000000000000000000..a9314819355439cff7eb54d7fae2942f9b647524
--- /dev/null
+++ b/mails/templates/mail_templates/citation_notification.json
@@ -0,0 +1,8 @@
+{
+    "subject": "SciPost: citation notification",
+    "to_address": "email",
+    "bcc_to": "admin@scipost.org",
+    "from_address_name": "SciPost Admin",
+    "from_address": "admin@scipost.org",
+    "context_object": "notification"
+}
diff --git a/mails/templates/mail_templates/publication_ready.html b/mails/templates/mail_templates/publication_ready.html
new file mode 100644
index 0000000000000000000000000000000000000000..a3ebebbd5a05a8bd1103ead6d5db36f23ee1d4ca
--- /dev/null
+++ b/mails/templates/mail_templates/publication_ready.html
@@ -0,0 +1,14 @@
+<p>
+    The following Publication is drafted and ready for publication.
+</p>
+<p>
+    <a href="https://scipost.org/{{ publication.get_absolute_url }}">{{ publication.title }}</a><br>
+    by {{ publication.author_list }}
+</p>
+<p>
+    Please review the Publication and proceed with the publication process.
+</p>
+
+<p>
+    <em>This mail is automatically generated from the SciPost platform</em>.
+</p>
diff --git a/mails/templates/mail_templates/publication_ready.json b/mails/templates/mail_templates/publication_ready.json
new file mode 100644
index 0000000000000000000000000000000000000000..fed59bff8e9546c56590e69f485cb82051b81119
--- /dev/null
+++ b/mails/templates/mail_templates/publication_ready.json
@@ -0,0 +1,5 @@
+{
+    "subject": "SciPost: manuscript ready for publication",
+    "to_address": "admin@scipost.org",
+    "context_object": "publication"
+}
diff --git a/mails/templates/mail_templates/registration_invitation.html b/mails/templates/mail_templates/registration_invitation.html
new file mode 100644
index 0000000000000000000000000000000000000000..fceaa5f9956115a983731e522ee8a74e28fb4f16
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation.html
@@ -0,0 +1,204 @@
+{% if invitation.invitation_type == 'F' %}
+    <strong>RE: Invitation to join the Editorial College of SciPost</strong>
+    <br>
+{% endif %}
+
+Dear {% if invitation.message_style == 'F' %}{{ invitation.get_title_display }} {{ invitation.last_name }}{% else %}{{ invitation.first_name }}{% endif %},
+
+<br><br>
+
+{% if invitation.personal_message %}
+    {{ invitation.personal_message|linebreaksbr }}
+    <br>
+{% endif %}
+
+
+{% if invitation.invitation_type == 'R' %}
+    {# Referee invite #}
+    <p>
+        We would hereby like to cordially invite you to become a Contributor on SciPost (this is required in order to deliver reports; our records show that you are not yet registered);
+        for your convenience, we have prepared a pre-filled <a href="https://scipost.org/invitation/{{ invitation.invitation_key }}">registration form</a> for you.
+        After activation of your registration, you will be allowed to contribute, in particular by providing referee reports.
+    </p>
+    <p>
+        To ensure timely processing of the submission (out of respect for the authors),
+        we would appreciate a quick accept/decline response from you, ideally within the next 2 days.
+    </p>
+    <p>
+        If you are <strong>not</strong> able to provide a Report, you can let us know by simply <a href="https://scipost.org/submissions/decline_ref_invitation/{{ invitation.invitation_key }}"> clicking here</a>.
+    </p>
+    <p>
+        If you are able to provide a Report, you can confirm this after registering and logging in (you will automatically be prompted for a confirmation).
+    </p>
+    <p>
+        We very much hope that we can count on your expertise,
+        <br>
+        Many thanks in advance,
+        <br>
+        The SciPost Team
+    </p>
+
+{% elif invitation.invitation_type == 'C' %}
+    {# "Regular" invite #}
+    {% if invitation.citation_notifications.for_publications %}
+        <p>
+            Your work has been cited in
+            {% if invitation.citation_notifications.for_publications|length > 1 %}{{ invitation.citation_notifications.for_publications|length }} papers{% else %}a paper{% endif %}
+            published by SciPost:
+        </p>
+
+        <ul>
+            {% for notification in invitation.citation_notifications.for_publications %}
+                <li>
+                    <a href="https://doi.org/{{ notification.publication.doi_label }}">{{ notification.publication.citation }}</a>
+                    <br>
+                    {{ notification.publication.title }}
+                    <br>
+                    <i>by {{ notification.publication.author_list }}</i>
+                </li>
+            {% endfor %}
+        </ul>
+    {% endif %}
+
+    {% if invitation.citation_notifications.for_submissions %}
+        <p>
+            Your work has been cited in
+            {% if invitation.citation_notifications.for_submissions|length > 1 %}{{ invitation.citation_notifications.for_submissions|length }} manuscripts{% else %}a manuscript{% endif %}
+            submitted to SciPost,
+        </p>
+
+        <ul>
+            {% for notification in invitation.citation_notifications.for_submissions %}
+                <li>
+                    {{ notification.submission.title }}
+                    <br>
+                    <i>by {{ notification.submission.author_list }}</i>
+                    <br>
+                    <a href="https://scipost.org/{{ notification.submission.get_absolute_url }}">View the submission's page</a>
+                </li>
+            {% endfor %}
+        </ul>
+    {% endif %}
+    <p>
+        I would hereby like to use this opportunity to quickly introduce you to the SciPost initiative, and to invite you to become an active Contributor.
+    </p>
+    <p>
+        In summary, SciPost.org is a publication portal managed by
+        professional scientists, offering (among others) high-quality
+        Open Access journals with innovative forms of refereeing, and a
+        means of commenting on all existing literature. SciPost is established as
+        a not-for-profit foundation devoted to serving the interests of the
+        international scientific community.
+    </p>
+    <p>
+        The site is anchored at <a href="https://scipost.org">scipost.org</a>.
+        Many further details about SciPost, its principles, ideals and implementation can be found at
+        the <a href="https://scipost.org/about">about</a>
+        and <a href="https://scipost.org/FAQ">FAQ</a> pages.</p>
+        <p>As a professional academic, you can register at the
+        <a href="https://scipost.org/register">registration page</a>,
+        enabling you to contribute to the site's contents, for example by offering submissions, reports and comments.
+    </p>
+    <p>
+        For your convenience, a partly pre-filled <a href="https://scipost.org/invitation/{{ invitation.invitation_key }}">registration form</a>
+        has been prepared for you (you can in any case still register at the
+        <a href="https://scipost.org/register">registration page</a>).
+    </p>
+    <p>
+        If you do develop sympathy for the initiative, besides participating in the
+        online platform, we would be very grateful if you considered submitting a
+        publication to one of the journals within the near future, in order to help
+        establish their reputation. We'll also be looking forward to your reaction,
+        comments and suggestions about the initiative, which we hope you will find
+        useful to your work as a professional scientist.
+    </p>
+    <p>
+        Many thanks in advance for taking a few minutes to look into it,
+        <br>
+        On behalf of the SciPost Foundation,
+        <br>
+        <br>
+        {{ invitation.invited_by.contributor.get_title_display }} {{ invitation.invited_by.first_name }} {{ invitation.invited_by.last_name }}
+    </p>
+{% elif invitation.invitation_type == 'F' %}
+    {# Fellow invite #}
+    <p>
+        You will perhaps have already heard about SciPost, a publication
+        portal established by and for professional scientists.
+    </p>
+    <p>
+        SciPost.org is legally based on a not-for-profit foundation and will
+        operate in perpetuity as a non-commercial entity at the exclusive service
+        of the academic sector, bringing a cost-slashing alternative to existing practices.
+    </p>
+    <p>
+        SciPost offers a collection of two-way open
+        access (no subscription fees, no author fees) journals with extremely
+        stringent (peer-witnessed) refereeing, overseen by
+        our Editorial College (exclusively composed
+        of established, professionally practising scientists). The whole process is
+        designed to ensure the highest achievable scientific quality while making the
+        editorial workflow as light and efficient as possible.
+    </p>
+    <p>
+        To go straight to the point, on behalf of the SciPost Foundation
+        and in view of your professional expertise, I hereby would
+        like to invite you to become an Editorial Fellow and thus join the
+        Editorial College of SciPost Physics.
+    </p>
+    <p>
+        Please note that only well-known and respected senior academics are
+        being contacted for this purpose. Academic reputation and involvement
+        in the community are the most important criteria guiding our
+        considerations of who should belong to the Editorial College.
+    </p>
+    <p>
+        To help you in considering this, it would be best if you were to take
+        the time to look at the website itself, which is anchored at scipost.org.
+        Besides looking around the site, you can also personally register
+        (to become a Contributor, without necessarily committing to membership
+        of the Editorial College, this to be discussed separately) by visiting
+        the following <a href="https://scipost.org/invitation/{{ invitation.cited_in_publication.citation }}">
+        single-use link</a>, containing a partly pre-filled form for your convenience.
+    </p>
+    <p>
+        Many details about the initiative
+        can then be found at scipost.org/about and at scipost.org/FAQ.
+        Functioning of the College will proceed according to the by-laws set
+        out in scipost.org/EdCol_by-laws.
+    </p>
+    <p>
+        Since the success of this initiative is dependent on the involvement of
+        the very people it is meant to serve, we'd be very grateful if you were
+        to give due consideration to this proposal. We would expect you to
+        commit just 2-4 hours per month to help perform Editorial duties; we will
+        constantly adjust the number of Editorial Fellows to ensure this is the case. You
+        could try it out for 6 months or a year, and of course you could quit
+        any time you wished.
+    </p>
+    <p>
+        I'd be happy to provide you with more information, should you require
+        it. In view of our development plans, I would be grateful if you could
+        react (by replying to this email) within the next two or three weeks,
+        if possible. I'll be looking forward to your reaction, your comments
+        and suggestions, be they positive or negative. If you need more time
+        to consider, that's also fine; just let me know.
+    </p>
+    <p>
+        On behalf of the SciPost Foundation,<br>
+        <br>
+        <br>
+        <br>Prof. dr Jean-Sébastien Caux
+        <br>---------------------------------------------
+        <br>Institute for Theoretial Physics
+        <br>University of Amsterdam
+        <br>Science Park 904
+        <br>1098 XH Amsterdam
+        <br>The Netherlands
+        <br>---------------------------------------------
+        <br>tel.: +31 (0)20 5255775\nfax: +31 (0)20 5255778
+        <br>---------------------------------------------
+    </p>
+{% endif %}
+
+{% include 'email/_footer.html' %}
diff --git a/mails/templates/mail_templates/registration_invitation.json b/mails/templates/mail_templates/registration_invitation.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c7426326117b5a762f1fc57575eb9f1954c3fa3
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation.json
@@ -0,0 +1,8 @@
+{
+    "subject": "SciPost: invitation",
+    "to_address": "email",
+    "bcc_to": "invited_by.email,admin@scipost.org",
+    "from_address_name": "SciPost Registration",
+    "from_address": "registration@scipost.org",
+    "context_object": "invitation"
+}
diff --git a/mails/templates/mail_templates/registration_invitation_refereeing.html b/mails/templates/mail_templates/registration_invitation_refereeing.html
new file mode 100644
index 0000000000000000000000000000000000000000..d2a7bab355309db97057dace4508e5a435f1dddf
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation_refereeing.html
@@ -0,0 +1,36 @@
+Dear {{ invitation.get_title_display }} {{ invitation.last_name }},
+
+<br><br>
+
+
+<p>
+    On behalf of the Editor-in-charge {{ invitation.submission.editor_in_charge.get_title_display }} {{ invitation.submission.editor_in_charge.user.last_name }}, we would like to invite you to referee a Submission to {{ invitation.submission.get_submitted_to_journal_display }}, namely<br>
+    <br>
+    {{ invitation.submission.title }}<br>
+    by {{ invitation.submission.author_list }}<br>
+    (see https://scipost.org{{ invitation.submission.get_absolute_url }}).
+</p>
+<p>
+    We would hereby like to cordially invite you to become a Contributor on SciPost (this is required in order to deliver reports; our records show that you are not yet registered);
+    for your convenience, we have prepared a pre-filled <a href="https://scipost.org/invitation/{{ invitation.invitation_key }}">registration form</a> for you.
+    After activation of your registration, you will be allowed to contribute, in particular by providing referee reports.
+</p>
+<p>
+    To ensure timely processing of the submission (out of respect for the authors),
+    we would appreciate a quick accept/decline response from you, ideally within the next 2 days.
+</p>
+<p>
+    If you are <strong>not</strong> able to provide a Report, you can let us know by simply <a href="https://scipost.org/submissions/decline_ref_invitation/{{ invitation.invitation_key }}"> clicking here</a>.
+</p>
+<p>
+    If you are able to provide a Report, you can confirm this after registering and logging in (you will automatically be prompted for a confirmation).
+</p>
+<p>
+    We very much hope that we can count on your expertise,
+    <br>
+    Many thanks in advance,
+    <br>
+    The SciPost Team
+</p>
+
+{% include 'email/_footer.html' %}
diff --git a/mails/templates/mail_templates/registration_invitation_refereeing.json b/mails/templates/mail_templates/registration_invitation_refereeing.json
new file mode 100644
index 0000000000000000000000000000000000000000..7623f59ab523020b8df56d4c8d1712fdba7125af
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation_refereeing.json
@@ -0,0 +1,8 @@
+{
+    "subject": "SciPost: referee and registration invitation",
+    "to_address": "email_address",
+    "bcc_to": "invited_by.email,admin@scipost.org",
+    "from_address_name": "SciPost Refereeing",
+    "from_address": "refereeing@scipost.org",
+    "context_object": "invitation"
+}
diff --git a/mails/templates/mail_templates/registration_invitation_reminder.html b/mails/templates/mail_templates/registration_invitation_reminder.html
new file mode 100644
index 0000000000000000000000000000000000000000..586e34be8c6596c7a31b793dfc74e116407c45dc
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation_reminder.html
@@ -0,0 +1,4 @@
+<strong>Reminder: Invitation to SciPost</strong>
+<br>
+<br>
+{% include 'mail_templates/registration_invitation.html' %}
diff --git a/mails/templates/mail_templates/registration_invitation_reminder.json b/mails/templates/mail_templates/registration_invitation_reminder.json
new file mode 100644
index 0000000000000000000000000000000000000000..6ed2b96fe650b6de07b9b38e8ae29bbfedc1462e
--- /dev/null
+++ b/mails/templates/mail_templates/registration_invitation_reminder.json
@@ -0,0 +1,8 @@
+{
+    "subject": "RE: SciPost: invitation",
+    "to_address": "email",
+    "bcc_to": "invited_by.email,admin@scipost.org",
+    "from_address_name": "SciPost Registration",
+    "from_address": "registration@scipost.org",
+    "context_object": "invitation"
+}
diff --git a/mails/templates/mail_templates/registration_invitation_renewal.html b/mails/templates/mail_templates/registration_invitation_renewal.html
deleted file mode 100644
index 1456cda9998e5d04cd4325fbabe39009cde14a1a..0000000000000000000000000000000000000000
--- a/mails/templates/mail_templates/registration_invitation_renewal.html
+++ /dev/null
@@ -1,287 +0,0 @@
-{% if invitation.nr_reminders > 0 %}
-    <p><strong>Reminder: Invitation to SciPost</strong></p>
-{% endif %}
-
-{% if invitation.invitation_type == 'F' %}
-    <p><strong>RE: Invitation to join the Editorial College of SciPost</strong></p>
-{% endif %}
-
-
-<p>
-    Dear
-    {% if invitation.message_style == 'F' %}
-        {{ invitation.get_title_display }} {{ invitation.last_name }},
-    {% else %}
-        {{ invitation.first_name }},
-    {% endif %}
-</p>
-
-
-{% if invitation.invitation_type == 'R' %}
-    <p>
-        We would hereby like to cordially invite you
-        to become a Contributor on SciPost
-        (this is required in order to deliver reports;
-        our records show that you are not yet registered);
-        for your convenience, we have prepared a pre-filled
-        <a href="https://scipost.org/invitation/{{ invitation.invitation_key }}">registration form</a>
-        for you. After activation of your registration, you will be allowed to contribute,
-        in particular by providing referee reports.
-    </p>
-    <p>
-        To ensure timely processing of the submission (out of respect for the authors),
-        we would appreciate a quick accept/decline
-        response from you, ideally within the next 2 days.
-    </p>
-    <p>If you are <strong>not</strong> able to provide a Report, you can let us know by simply
-        <a href="https://scipost.org/submissions/decline_ref_invitation/{{ invitation.invitation_key }}">
-        clicking here</a>.
-    </p>
-    <p>
-        If you are able to provide a Report, you can confirm this after registering
-        and logging in (you will automatically be prompted for a confirmation).
-    </p>
-    <p>We very much hope that we can count on your expertise,</p>
-    <p>Many thanks in advance,</p>
-    <p>The SciPost Team</p>
-{% elif invitation.invitation_type == 'ci' %}
-<p>
-        Your work has been cited in a manuscript submitted to SciPost, {{ invitation.cited_in_submission.title }} <br>by {{ invitation.cited_in_submission.author_list }}, <br>
-        which you can find online at the
-        <a href="https://scipost.org/submission/{{ invitation.cited_in_submission.arxiv_identifier_w_vn_nr }}">
-        submission's page</a>.
-    </p>
-    <p>
-        I would hereby like to use this opportunity to quickly introduce
-        you to the SciPost initiative, and to invite you to become an active
-        Contributor to the site. You might for example consider reporting or
-        commenting on the above submission before the refereeing deadline.
-    </p>
-
-
-    <p>
-        In summary, SciPost.org is a publication portal managed by
-        professional scientists, offering (among others) high-quality
-        Open Access journals with innovative forms of refereeing, and a
-        means of commenting on all existing literature. SciPost is established as
-        a not-for-profit foundation devoted to serving the interests of the
-        international scientific community.
-    </p>
-    <p>
-        The site is anchored at <a href="https://scipost.org">scipost.org</a>.
-        Many further details
-        about SciPost, its principles, ideals and implementation can be found at
-        the <a href="https://scipost.org/about">about</a>
-        and <a href="https://scipost.org/FAQ">FAQ</a> pages.
-    </p>
-    <p>
-        As a professional academic, you can register at the
-        <a href="https://scipost.org/register">registration page</a>,
-        enabling you to contribute to the site's
-        contents, for example by offering submissions, reports and comments.
-    </p>
-    <p>
-        For your convenience, a partly pre-filled
-        <a href="https://scipost.org/invitation/{{ invitation_key }}">registration form</a>
-         has been prepared for you (you can in any case still register at the
-        <a href="https://scipost.org/register">registration page</a>).
-    </p>
-    <p>
-        If you do develop sympathy for the initiative, besides participating in the
-        online platform, we would be very grateful if you considered submitting a
-        publication to one of the journals within the near future, in order to help
-        establish their reputation. We'll also be looking forward to your reaction,
-        comments and suggestions about the initiative, which we hope you will find
-        useful to your work as a professional scientist.
-    </p>
-    <p>Many thanks in advance for taking a few minutes to look into it,</p>
-    <p>On behalf of the SciPost Foundation,</p>
-    <p>{{ invitation.invited_by.get_title_display }} {{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</p>
-
-{% elif invitation.invitation_type == 'cp' %}
-<p>
-  I hereby wanted to remind you of an invitation sent to you a while back, originating from the fact that your work was cited in a publication in a SciPost journal (see details below).
-</p>
-<p>
-  In case you are not yet familiar with SciPost, please have a look at the site https://scipost.org. You will hopefully feel sympathy for this by-and-for-scientists initiative aiming to bring much needed reform to the world of scientific publishing.
-</p>
-<p>
-  Your registration as a Contributor to SciPost would be most welcome, as well as your submissions to our emerging journals.
-</p>
-<p>All the best,</p>
-<p>Prof. J.-S. Caux on behalf of the SciPost Team</p>
-<br/>
-<hr/>
-    <p>Your work has been cited in a paper published by SciPost,</p>
-    <p>
-        {{ invitation.cited_in_publication.title }}</p> <p>by {{ invitation.cited_in_publication.author_list }} (published as <a href="https://scipost.org/{{ invitation.cited_in_publication.doi_label }}">{{ invitation.cited_in_publication.citation }}</a>).
-    </p>
-    <p>
-        I would hereby like to use this opportunity to quickly introduce
-        you to the SciPost initiative, and to invite you to become an active
-        Contributor to the site.
-    </p>
-
-
-    <p>
-        In summary, SciPost.org is a publication portal managed by
-        professional scientists, offering (among others) high-quality
-        Open Access journals with innovative forms of refereeing, and a
-        means of commenting on all existing literature. SciPost is established as
-        a not-for-profit foundation devoted to serving the interests of the
-        international scientific community.
-    </p>
-    <p>
-        The site is anchored at <a href="https://scipost.org">scipost.org</a>.
-        Many further details
-        about SciPost, its principles, ideals and implementation can be found at
-        the <a href="https://scipost.org/about">about</a>
-        and <a href="https://scipost.org/FAQ">FAQ</a> pages.
-    </p>
-    <p>
-        As a professional academic, you can register at the
-        <a href="https://scipost.org/register">registration page</a>,
-        enabling you to contribute to the site's
-        contents, for example by offering submissions, reports and comments.
-    </p>
-    <p>
-        For your convenience, a partly pre-filled
-        <a href="https://scipost.org/invitation/{{ invitation_key }}">registration form</a>
-         has been prepared for you (you can in any case still register at the
-        <a href="https://scipost.org/register">registration page</a>).
-    </p>
-    <p>
-        If you do develop sympathy for the initiative, besides participating in the
-        online platform, we would be very grateful if you considered submitting a
-        publication to one of the journals within the near future, in order to help
-        establish their reputation. We'll also be looking forward to your reaction,
-        comments and suggestions about the initiative, which we hope you will find
-        useful to your work as a professional scientist.
-    </p>
-    <p>Many thanks in advance for taking a few minutes to look into it,</p>
-    <p>On behalf of the SciPost Foundation,</p>
-    <p>{{ invitation.invited_by.get_title_display }} {{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</p>
-
-{% elif invitation.invitation_type == 'C' %}
-    <p>
-        I would hereby like to quickly introduce
-        you to a scientific publishing initiative
-        called SciPost, and to invite you to become an active Contributor.
-    </p>
-
-
-    <p>
-        In summary, SciPost.org is a publication portal managed by
-        professional scientists, offering (among others) high-quality
-        Open Access journals with innovative forms of refereeing, and a
-        means of commenting on all existing literature. SciPost is established as
-        a not-for-profit foundation devoted to serving the interests of the
-        international scientific community.
-    </p>
-    <p>
-        The site is anchored at <a href="https://scipost.org">scipost.org</a>.
-        Many further details
-        about SciPost, its principles, ideals and implementation can be found at
-        the <a href="https://scipost.org/about">about</a>
-        and <a href="https://scipost.org/FAQ">FAQ</a> pages.
-    </p>
-    <p>
-        As a professional academic, you can register at the
-        <a href="https://scipost.org/register">registration page</a>,
-        enabling you to contribute to the site's
-        contents, for example by offering submissions, reports and comments.
-    </p>
-    <p>
-        For your convenience, a partly pre-filled
-        <a href="https://scipost.org/invitation/{{ invitation_key }}">registration form</a>
-         has been prepared for you (you can in any case still register at the
-        <a href="https://scipost.org/register">registration page</a>.
-    </p>
-    <p>
-        If you do develop sympathy for the initiative, besides participating in the
-        online platform, we would be very grateful if you considered submitting a
-        publication to one of the journals within the near future, in order to help
-        establish their reputation. We'll also be looking forward to your reaction,
-        comments and suggestions about the initiative, which we hope you will find
-        useful to your work as a professional scientist.
-    </p>
-    <p>Many thanks in advance for taking a few minutes to look into it,</p>
-    <p>On behalf of the SciPost Foundation,</p>
-    <p>{{ invitation.invited_by.get_title_display }} {{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</p>
-
-{% elif invitation.invitation_type == 'F' %}
-    <p>
-        You will perhaps have already heard about SciPost, a publication
-        portal established by and for professional scientists.
-    </p>
-    <p>
-        SciPost.org is legally based on a not-for-profit foundation and will
-        operate in perpetuity as a non-commercial entity at the exclusive service
-        of the academic sector, bringing a cost-slashing alternative to existing
-        practices.
-    </p>
-    <p>
-        SciPost offers a collection of two-way open
-        access (no subscription fees, no author fees) journals with extremely
-        stringent (peer-witnessed) refereeing, overseen by
-        our Editorial College (exclusively composed
-        of established, professionally practising scientists). The whole process is
-        designed to ensure the highest achievable scientific quality while making the
-        editorial workflow as light and efficient as possible.</p>
-    <p>
-        To go straight to the point, on behalf of the SciPost Foundation
-        and in view of your professional expertise, I hereby would
-        ike to invite you to become an Editorial Fellow and thus join the
-        Editorial College of SciPost Physics.
-    </p>
-    <p>
-        Please note that only well-known and respected senior academics are
-        being contacted for this purpose. Academic reputation and involvement
-        in the community are the most important criteria guiding our
-        considerations of who should belong to the Editorial College.
-    </p>
-    <p>
-        To help you in considering this, it would be best if you were to take
-        the time to look at the website itself, which is anchored at scipost.org.
-        Besides looking around the site, you can also personally register
-        (to become a Contributor, without necessarily committing to membership
-        of the Editorial College, this to be discussed separately) by visiting
-        the following <a href="https://scipost.org/invitation/{{ invitation.invitation_key }}">
-        single-use link</a>, containing a partly pre-filled form for
-        your convenience.</p>
-    <p>
-        Many details about the initiative
-        can then be found at <a href="https://scipost.org/about">SciPost About</a> and at <a href="https://scipost.org/FAQ">SciPost FAQ</a>.
-        Functioning of the College will proceed according to the by-laws set
-        out in <a href="https://scipost.org/EdCol_by-laws">the by-laws</a>.
-    </p>
-    <p>
-        Since the success of this initiative is dependent on the involvement of
-        the very people it is meant to serve, we'd be very grateful if you were
-        to give due consideration to this proposal. We would expect you to
-        commit just 2-4 hours per month to help perform Editorial duties; we will
-        constantly adjust the number of Editorial Fellows to ensure this is the case. You
-        could try it out for 6 months or a year, and of course you could quit
-        any time you wished.
-    </p>
-    <p>
-        I'd be happy to provide you with more information, should you require
-        it. In view of our development plans, I would be grateful if you could
-        react (by replying to this email) within the next two or three weeks,
-        if possible. I'll be looking forward to your reaction, your comments
-        and suggestions, be they positive or negative. If you need more time
-        to consider, that's also fine; just let me know.
-    </p>
-
-    <p>On behalf of the SciPost Foundation,
-        <br/>Prof. dr Jean-Sébastien Caux
-        <br/>---------------------------------------------
-        <br/>Institute for Theoretial Physics
-        <br/>University of Amsterdam
-        <br/>Science Park 904<br/>1098 XH Amsterdam<br/>The Netherlands
-        <br/>---------------------------------------------
-        <br/>tel.: +31 (0)20 5255775
-	<bf/>fax: +31 (0)20 5255778
-        <br/>---------------------------------------------
-    </p>
-{% endif %}
diff --git a/mails/templates/mail_templates/registration_invitation_renewal.json b/mails/templates/mail_templates/registration_invitation_renewal.json
deleted file mode 100644
index 9941b614623cf8f70ca83bcfbf4f934307d93b3f..0000000000000000000000000000000000000000
--- a/mails/templates/mail_templates/registration_invitation_renewal.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-    "subject": "SciPost: invitation",
-    "to_address": "email",
-    "bcc_to": "invited_by.user.email",
-    "from_address_name": "J-S Caux",
-    "from_address": "jscaux@scipost.org",
-    "context_object": "invitation"
-}
diff --git a/mails/templates/mail_templates/submissions_referee_invite.html b/mails/templates/mail_templates/submissions_referee_invite.html
index 2c2bd80595864b3e4319ea9d3586af21533b0b62..27ac15c1b3bfd5284f046491a34074b8ab0aab51 100644
--- a/mails/templates/mail_templates/submissions_referee_invite.html
+++ b/mails/templates/mail_templates/submissions_referee_invite.html
@@ -4,8 +4,9 @@
 
 <p>
     We have received a Submission to SciPost which, in view of your expertise and on behalf of the Editor-in-charge {{invitation.submission.editor_in_charge.get_title_display}} {{invitation.submission.editor_in_charge.user.last_name}}, we would like to invite you to referee:
-    <br>
-    <a href="https://scipost.org{{invitation.submission.get_absolute_url}}">{{invitation.submission.title}} by {{invitation.submission.author_list}}</a>.
+    <br><br>
+    <a href="https://scipost.org{{invitation.submission.get_absolute_url}}">{{invitation.submission.title}}</a>
+    <br>by {{invitation.submission.author_list}}.
 </p>
 
 <p>
diff --git a/mails/templates/mail_templates/submissions_referee_invite.json b/mails/templates/mail_templates/submissions_referee_invite.json
index a5d6803a492d16ba59c1f6bd4062ae8183597f90..c1495012e13e12c449a53bf25d853a139487af0e 100644
--- a/mails/templates/mail_templates/submissions_referee_invite.json
+++ b/mails/templates/mail_templates/submissions_referee_invite.json
@@ -1,7 +1,7 @@
 {
     "subject": "SciPost: refereeing request",
     "to_address": "referee.user.email",
-    "bcc_to": "submission.editor_in_charge.user.email",
+    "bcc_to": "submission.editor_in_charge.user.email,admin@scipost.org",
     "from_address_name": "SciPost Refereeing",
     "from_address": "refereeing@scipost.org",
     "context_object": "invitation"
diff --git a/mails/templates/mails/mail_form.html b/mails/templates/mails/mail_form.html
index fbb170d4dcffc6286e03a3737fdc24d8eef863dc..f1afc1a879536a84a3fe69de45cb7930ce025d19 100644
--- a/mails/templates/mails/mail_form.html
+++ b/mails/templates/mails/mail_form.html
@@ -11,11 +11,12 @@
 
     <form enctype="multipart/form-data" method="post">
         {% csrf_token %}
+        {% if transfer_data_form %}{{ transfer_data_form }}{% endif %}
         {{ form|bootstrap }}
         <div class="form-group row">
             <div class="offset-md-2 col-md-10">
-                <input class="btn btn-secondary mr-2" type="reset" value="Reset to default">
-                <input class="btn btn-primary mr-2" type="submit" value="Send mail">
+                <input class="btn btn-outline-secondary mr-2" type="reset" value="Reset to default">
+                <button class="btn btn-primary mr-2" type="submit" name="save" value="send_from_editor">Send mail</button>
             </div>
         </div>
     </form>
diff --git a/mails/tests.py b/mails/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/mails/tests.py
+++ b/mails/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/mails/utils.py b/mails/utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..da6cfb7bd58fce44fe65ea094a56614f4ba46660
--- /dev/null
+++ b/mails/utils.py
@@ -0,0 +1,18 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from .mixins import MailUtilsMixin
+
+
+class DirectMailUtil(MailUtilsMixin):
+    """
+    Same templates and json files as the form EmailTemplateForm, but this will directly send
+    the mails out, without intercepting and showing the mail editor to the user.
+    """
+
+    def __init__(self, mail_code, instance, *args, **kwargs):
+        kwargs['mail_code'] = mail_code
+        kwargs['instance'] = instance
+        super().__init__(*args, **kwargs)
+        self.validate()
diff --git a/mails/views.py b/mails/views.py
index f7fedc01ded99d81c6f90b0d33f17e8489024ca9..6132d392342310e7dff63ef38295450998d5f0f7 100644
--- a/mails/views.py
+++ b/mails/views.py
@@ -1,9 +1,16 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib import messages
 from django.shortcuts import render
 
-from .forms import EmailTemplateForm
+from .forms import EmailTemplateForm, HiddenDataForm
 
 
 class MailEditingSubView(object):
+    alternative_from_address = None  # Tuple: ('from_name', 'from_address')
+
     def __init__(self, request, mail_code, **kwargs):
         self.request = request
         self.context = kwargs.get('context', {})
@@ -14,12 +21,90 @@ class MailEditingSubView(object):
     def recipients_string(self):
         return ', '.join(getattr(self.mail_form, 'mail_fields', {}).get('recipients', ['']))
 
+    def add_form(self, form):
+        self.context['transfer_data_form'] = HiddenDataForm(form)
+
+    def set_alternative_sender(self, from_name, from_address):
+        self.alternative_from_address = (from_name, from_address)
+
     def is_valid(self):
         return self.mail_form.is_valid()
 
     def send(self):
+        if self.alternative_from_address:
+            self.mail_form.set_alternative_sender(
+                self.alternative_from_address[0], self.alternative_from_address[1])
         return self.mail_form.send()
 
     def return_render(self):
         self.context['form'] = self.mail_form
         return render(self.request, self.template_name, self.context)
+
+
+class MailEditorMixin:
+    """
+    Use MailEditorMixin in edit CBVs to automatically implement the mail editor as
+    a post-form_valid hook.
+
+    The view must specify the `mail_code` variable.
+    """
+    object = None
+    mail_form = None
+    has_permission_to_send_mail = True
+    alternative_from_address = None  # Tuple: ('from_name', 'from_address')
+
+    def __init__(self, *args, **kwargs):
+        if not self.mail_code:
+            raise AttributeError(self.__class__.__name__ + ' object has no attribute `mail_code`')
+        super().__init__(*args, **kwargs)
+
+    def get_template_names(self):
+        """
+        The mail editor form has its own template.
+        """
+        if self.mail_form and not self.mail_form.is_valid():
+            return ['mails/mail_form.html']
+        return super().get_template_names()
+
+    def post(self, request, *args, **kwargs):
+        """
+        Handle POST requests, but interpect the data if the mail form data isn't valid.
+        """
+        if not self.has_permission_to_send_mail:
+            # Don't use the mail form; don't send out the mail.
+            return super().post(request, *args, **kwargs)
+        self.object = self.get_object()
+        form = self.get_form()
+        if form.is_valid():
+            self.mail_form = EmailTemplateForm(request.POST or None, mail_code=self.mail_code,
+                                               instance=self.object)
+            if self.mail_form.is_valid():
+                return self.form_valid(form)
+
+            return self.render_to_response(
+                self.get_context_data(form=self.mail_form,
+                                      transfer_data_form=HiddenDataForm(form)))
+        else:
+            return self.form_invalid(form)
+
+    def form_valid(self, form):
+        """
+        If both the regular form and mailing form are valid, save the form and run the mail form.
+        """
+        # Don't use the mail form; don't send out the mail.
+        if not self.has_permission_to_send_mail:
+            return super().form_valid(form)
+
+        if self.alternative_from_address:
+            # Set different from address if given.
+            self.mail_form.set_alternative_sender(
+                self.alternative_from_address[0], self.alternative_from_address[1])
+
+        response = super().form_valid(form)
+        try:
+            self.mail_form.send()
+        except AttributeError:
+            # self.mail_form is None
+            raise AttributeError('Did you check the order in which MailEditorMixin is used?')
+        messages.success(self.request, 'Mail sent')
+        return response
diff --git a/mails/widgets.py b/mails/widgets.py
index 1754950616856af0813450a14037a0cdc95760b2..f9cfaf114b35723693da4d54e6d187cd2967829a 100644
--- a/mails/widgets.py
+++ b/mails/widgets.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import json
 
 from django.core.urlresolvers import reverse, NoReverseMatch
@@ -47,8 +51,9 @@ class SummernoteEditor(widgets.Textarea):
 
     def trigger_summernote(self, el_id, options):
         str = """
-        <script>
-            $(function(){
+        <script type='text/javascript'>
+            var $ = jQuery;
+            $(document).ready(function() {
                 $('#%s').summernote(%s)
             });
         </script>""" % (el_id, options)
diff --git a/news/admin.py b/news/admin.py
index 6b8247d5b8259ff183cad3368b21c1724ab9be10..2d5777a2aea2ac99d90e58d872fc73833d3a516b 100644
--- a/news/admin.py
+++ b/news/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import NewsItem
diff --git a/news/apps.py b/news/apps.py
index 5a7b92d0f844e1bd89c73e7bba369b07298ae70a..273ff7682af3cc14e87213b7696a58c233930fa8 100644
--- a/news/apps.py
+++ b/news/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/news/factories.py b/news/factories.py
index 74dcad74481d0c0de0e9dfeaabba153673a29723..30ad31ce31db873c0640e3da17b378358b271faf 100644
--- a/news/factories.py
+++ b/news/factories.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 
 from .models import NewsItem
@@ -7,8 +11,8 @@ class NewsItemFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = NewsItem
 
-    date = factory.Faker('date_time')
-    headline = factory.Faker('sentence', nb_words=6)
-    blurb = factory.Faker('text', max_nb_chars=200)
-    followup_link = factory.Faker('url')
+    date = factory.Faker('date_this_year')
+    headline = factory.Faker('sentence')
+    blurb = factory.Faker('paragraph', nb_sentences=8)
+    followup_link = factory.Faker('uri')
     followup_link_text = factory.Faker('sentence', nb_words=4)
diff --git a/news/management/__init__.py b/news/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/news/management/commands/__init__.py b/news/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/news/management/commands/create_news.py b/news/management/commands/create_news.py
new file mode 100644
index 0000000000000000000000000000000000000000..1bb10186202cf5030814cfc0b2d145dc60b96814
--- /dev/null
+++ b/news/management/commands/create_news.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from news import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random News Item objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of News items to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_news_items(kwargs['number'])
+
+    def create_news_items(self, n):
+        factories.NewsItemFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} News Items.'.format(n=n)))
diff --git a/news/managers.py b/news/managers.py
index 456c26cacb4156cba454993f05a37c30dd36d267..0d2cab82c54d403ed909aa19c10b97b06d11f689 100644
--- a/news/managers.py
+++ b/news/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 
diff --git a/news/models.py b/news/models.py
index 0ead952d1cbeccba08572b13757b529a68c43e73..3bfdbdbd4c57fbd38c12e8bdd4d4b39512b29519 100644
--- a/news/models.py
+++ b/news/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.db import models
 
diff --git a/news/serializers.py b/news/serializers.py
index b15e000ef0734648b5370535df4021654b924db7..4ac02815d0bc1757a85f99bc9d7b0a3552c01ae3 100644
--- a/news/serializers.py
+++ b/news/serializers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from rest_framework import serializers
 
 from .models import NewsItem
diff --git a/news/tests.py b/news/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/news/tests.py
+++ b/news/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/news/urls.py b/news/urls.py
index 039616e4e21fa70543e8320d79a6601f495e906f..ac389a486a4510055bbf3b83eb7ecf24248121f8 100644
--- a/news/urls.py
+++ b/news/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/news/views.py b/news/views.py
index d1b9f775678f474db67de2e18a5b90dd9e32f4a6..f56a846d3b60bed5b5348ddf47f9d8ed739ba295 100644
--- a/news/views.py
+++ b/news/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.views.generic.list import ListView
 
 from .models import NewsItem
diff --git a/news/viewsets.py b/news/viewsets.py
index 0c6cab7e44a4aaf307b63dc363abf9afa1b6f30c..118d614882b86de21647d48396f9a3fac4fe0ac0 100644
--- a/news/viewsets.py
+++ b/news/viewsets.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.http import Http404
 
 from rest_framework import viewsets, renderers
diff --git a/notifications/__init__.py b/notifications/__init__.py
index d51321cada927770a881312f84365d972e19b924..f9eafdc9ae454a919ceb9917143b3cdcb44b90f7 100644
--- a/notifications/__init__.py
+++ b/notifications/__init__.py
@@ -1 +1,5 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 default_app_config = 'notifications.apps.NotificationsConfig'
diff --git a/notifications/admin.py b/notifications/admin.py
index 247e0620f5986d20ab061e97750e1053eb4ca53a..fcdd8edafb96ad31f36211518b7a63e33081ffb1 100644
--- a/notifications/admin.py
+++ b/notifications/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 from .models import Notification
 
diff --git a/notifications/apps.py b/notifications/apps.py
index 5a0aef11beb47c7407ecf968d3eab794db559274..e41c5bec7b1e69ab21a41b68d1de2dc7fd51aee8 100644
--- a/notifications/apps.py
+++ b/notifications/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/notifications/constants.py b/notifications/constants.py
index d160034357dfbda4f17bda8cb90a1eab3f2b34ae..52871544a54425a7d5e603e1fffd0a8b947cab25 100644
--- a/notifications/constants.py
+++ b/notifications/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 NOTIFICATION_REFEREE_DEADLINE = 'referee_task_deadline'
 NOTIFICATION_REFEREE_OVERDUE = 'referee_task_overdue'
 
diff --git a/notifications/managers.py b/notifications/managers.py
index 1ac9a2e2e0a9f527127475ed4906cdca2477b07c..5f4447eb7890b24ccd7591271d261f3a95173fb4 100644
--- a/notifications/managers.py
+++ b/notifications/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 
diff --git a/notifications/models.py b/notifications/models.py
index e05b53710ade32063ef292107119e6f9b0d4835c..3f0d1dd553cfac820324b9030c688b2d5558b251 100644
--- a/notifications/models.py
+++ b/notifications/models.py
@@ -1,9 +1,12 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.core.urlresolvers import reverse
 from django.conf import settings
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.contenttypes.fields import GenericForeignKey
-from django.utils import timezone
 
 from .constants import NOTIFICATION_TYPES
 from .managers import NotificationQuerySet
@@ -107,21 +110,14 @@ class Notification(models.Model):
 
     def mark_toggle(self):
         if self.pseudo_unread:
-            self.unread = False
-            self.pseudo_unread = False
+            self.mark_as_read()
         else:
-            self.unread = True
-            self.pseudo_unread = True
-        self.save()
+            self.mark_as_unread()
 
     def mark_as_read(self):
         if self.unread or self.pseudo_unread:
-            self.unread = False
-            self.pseudo_unread = False
-            self.save()
+            Notification.objects.filter(id=self.id).update(unread=False, pseudo_unread=False)
 
     def mark_as_unread(self):
         if not self.unread or not self.pseudo_unread:
-            self.unread = True
-            self.pseudo_unread = True
-            self.save()
+            Notification.objects.filter(id=self.id).update(unread=True, pseudo_unread=True)
diff --git a/notifications/signals.py b/notifications/signals.py
index 94355790559049e14241f89fb8c4cddd8d65f779..24aa4da23d2135412f4412e672610f4804f45889 100644
--- a/notifications/signals.py
+++ b/notifications/signals.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.dispatch import receiver, Signal
 
 from .models import Notification
diff --git a/notifications/templates/notifications/partials/notification_list_popover.html b/notifications/templates/notifications/partials/notification_list_popover.html
new file mode 100644
index 0000000000000000000000000000000000000000..89f08094fdb87affd7f7d7f830c5695c988ffe0a
--- /dev/null
+++ b/notifications/templates/notifications/partials/notification_list_popover.html
@@ -0,0 +1,52 @@
+{% load request_filters %}
+
+<div class="popover-template">
+    <div class="popover notifications" role="tooltip">
+        <div class="arrow"></div>
+        {% if user.contributor %}
+            <div class="header">
+                <h3>{{ user.contributor.get_title_display }} {{ user.first_name }} {{ user.last_name }}</h3>
+                <a class="item" href="{% url 'scipost:update_personal_data' %}"><i class="fa fa-gear"></i> Update personal data</a>
+            </div>
+            {% if not user.contributor.is_currently_available %}
+                <div class="unavailable">
+                    <div class="head">You are currently unavailable</div>
+                    <div class="text">Check your availability in your personal page if this should not be the case.</div>
+                </div>
+            {% endif %}
+        {% else %}
+            <div class="header">
+                <h3>{{ user.first_name }} {{ user.last_name }}</h3>
+            </div>
+        {% endif %}
+
+        <div class="links">
+            <a class="item {% active 'scipost:personal_page' %}" href="{% url 'scipost:personal_page' %}">Personal Page</a>
+            {% if user.partner_contact or perms.scipost.can_read_partner_page %}
+                  <a class="item {% active 'partners:dashboard' %}" href="{% url 'partners:dashboard' %}">Partner Page</a>
+            {% endif %}
+
+            {% if perms.scipost.can_view_timesheets %}
+                <a class="item {% active 'finances:finance' %}" href="{% url 'finances:finance' %}">Financial Administration</a>
+            {% endif %}
+
+            {% if perms.scipost.can_view_all_funding_info %}
+                <a class="item {% active 'funders:funders' %}" href="{% url 'funders:funders' %}">Funders</a>
+            {% endif %}
+
+            {% if perms.scipost.can_view_production %}
+                <a class="item {% active 'production:production' %}" href="{% url 'production:production' %}">Production</a>
+            {% endif %}
+
+            {% if perms.scipost.can_view_pool %}
+                <a class="item {% active 'submissions:pool' %}" href="{% url 'submissions:pool' %}">Submissions Pool</a>
+            {% endif %}
+
+            <a class="item" href="{% url 'scipost:logout' %}">Logout</a>
+        </div>
+
+        <h4 class="inbox-header">Inbox</h4>
+        <div class="live_notify_list"></div>
+    </div>
+    <div class="popover-body"></div>
+</div>
diff --git a/notifications/templatetags/notifications_tags.py b/notifications/templatetags/notifications_tags.py
index 8d8bccd2402cd1f213000b4597ba82bc67390833..5694968bd269a2c50b8da240e7a89ef8e48da3d7 100644
--- a/notifications/templatetags/notifications_tags.py
+++ b/notifications/templatetags/notifications_tags.py
@@ -1,6 +1,10 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # -*- coding: utf-8 -*-
-from django.core.urlresolvers import reverse
 from django.template import Library
+from django.template.loader import render_to_string
 from django.utils.html import format_html
 
 register = Library()
@@ -18,44 +22,12 @@ def live_notify_list(context):
     if not user:
         return ''
 
-    html = '<div class="popover-template popover">'
-    html += '<div class="popover notifications" role="tooltip">'
-
-    # User default links
-    html += '<h6 class="header">Welcome {first_name} {last_name}</h6>'.format(
-        first_name=user.first_name, last_name=user.last_name)
-
-    if hasattr(user, 'contributor'):
-        html += '<a class="item" href="{url}">Personal Page</a>'.format(
-            url=reverse('scipost:personal_page'))
-
-    # User specific links
-    if user.has_perm('scipost.can_read_partner_page'):
-        html += '<a class="item" href="{url}">Partner Page</a>'.format(
-            url=reverse('partners:dashboard'))
-    if user.has_perm('scipost.can_view_timesheets'):
-        html += '<a class="item" href="{url}">Financial Administration</a>'.format(
-            url=reverse('finances:finance'))
-    if user.has_perm('scipost.can_view_all_funding_info'):
-        html += '<a class="item" href="{url}">Funders</a>'.format(
-            url=reverse('funders:funders'))
-    if user.has_perm('scipost.can_view_production'):
-        html += '<a class="item" href="{url}">Production</a>'.format(
-            url=reverse('production:production'))
-    if user.has_perm('scipost.can_view_pool'):
-        html += '<a class="item" href="{url}">Submission Pool</a>'.format(
-            url=reverse('submissions:pool'))
-
-    # Logout links
-    html += '<div class="divider"></div>'
-    html += '<a class="item" href="{url}">Logout</a>'.format(
-        url=reverse('scipost:logout'))
-
-    # Notifications
-    html += '<div class="divider"></div><h6 class="header">Inbox</h6>'
-    html += '<div class="live_notify_list"></div></div>'
-    html += '<div class="popover-body"></div></div>'
-    return format_html(html)
+    request = context['request']
+    context = {
+        'user': user,
+    }
+    return render_to_string('notifications/partials/notification_list_popover.html',
+                            context, request=request)
 
 
 def user_context(context):
diff --git a/notifications/tests.py b/notifications/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/notifications/tests.py
+++ b/notifications/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/notifications/urls.py b/notifications/urls.py
index a80a7a6769ffa3f1c17e446232a00976a5840819..1779d14ba7e8c12b3e1c09caa5eb16f362b831f0 100644
--- a/notifications/urls.py
+++ b/notifications/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/notifications/utils.py b/notifications/utils.py
index 9f80b64365f8d617a8b0d6a3787f0b6b360df25e..d5407524b4df9877b1b20fffa3cf7bcd3f5bb249 100644
--- a/notifications/utils.py
+++ b/notifications/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 def slug2id(slug):
     return int(slug) - 9631
 
diff --git a/notifications/views.py b/notifications/views.py
index b36eaab4806253da91d5c18cfc1aa033983249b9..8fdb0ac508309cf437ebabbc9b5abaf2acbe0cc6 100644
--- a/notifications/views.py
+++ b/notifications/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.decorators import login_required, user_passes_test
 from django.contrib.auth.models import User
 from django.forms import model_to_dict
@@ -60,7 +64,7 @@ def live_notification_list(request):
 
     try:
         # Default to 5 as a max number of notifications
-        num_to_fetch = max(int(request.GET.get('max', 5)), 1)
+        num_to_fetch = max(int(request.GET.get('max', 10)), 1)
         num_to_fetch = min(num_to_fetch, 100)
     except ValueError:
         num_to_fetch = 5
diff --git a/package.json b/package.json
index 9e3d508dcb107b4bbfa981744c683f1089a08a11..27c87b864b31e483f9dfb6fea3e702ab646d9d36 100644
--- a/package.json
+++ b/package.json
@@ -19,7 +19,7 @@
   "homepage": "https://www.scipost.org",
   "devDependencies": {
     "ajv": "^5.2.2",
-    "bootstrap": "^4.0.0-beta",
+    "bootstrap": "^4.0.0",
     "bootstrap-loader": "^2.1.0",
     "clean-webpack-plugin": "^0.1.15",
     "css-loader": "^0.28.4",
@@ -28,10 +28,11 @@
     "extract-text-webpack-plugin": "^3.0.0",
     "file-loader": "^0.11.2",
     "imports-loader": "^0.7.1",
-    "jquery": "^2.2.0",
+    "jquery": "^3.3.1",
+    "jquery-ui": "^1.12.1",
     "node-loader": "^0.6.0",
     "node-sass": "^4.4.0",
-    "popper.js": "^1.11.1",
+    "popper.js": "^1.14.1",
     "postcss-load-config": "^1.2.0",
     "postcss-loader": "^2.0.6",
     "resolve-url-loader": "^1.6.1",
diff --git a/partners/admin.py b/partners/admin.py
index 057cd39487465a435361cfafbb2488b833cb0e8b..4c52ca531bfbe9a37bb67c8c80c0fba8bf741fc6 100644
--- a/partners/admin.py
+++ b/partners/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Contact, Partner, Consortium, Institution,\
diff --git a/partners/apps.py b/partners/apps.py
index 22e6fe3bc79c57abf3a8a51ccf4f6dc9ca1ff251..86ba2ccad86184d379dc6a63fc52c4437aa028a9 100644
--- a/partners/apps.py
+++ b/partners/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/partners/constants.py b/partners/constants.py
index 6aeb94d3c9aabf5a3af07b190c2838f74c9e7e09..02a5e5da0d48941562a34f07c819af79968cf471 100644
--- a/partners/constants.py
+++ b/partners/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 
diff --git a/partners/decorators.py b/partners/decorators.py
index cbfeffd3505e34cb9ab77443cdac4f57a798e18d..282c911031c5c40e4d80a4ef10c5995d8ad4813a 100644
--- a/partners/decorators.py
+++ b/partners/decorators.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from .models import Contact
 
 
diff --git a/partners/forms.py b/partners/forms.py
index 597203298097fd6bab5434278956ff93c80b47f9..d44fdf8dbd2a5c3a12ba25535140c70bf53efd78 100644
--- a/partners/forms.py
+++ b/partners/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.contrib.auth.models import User, Group
 from django.contrib.auth.password_validation import validate_password
diff --git a/partners/managers.py b/partners/managers.py
index f73ee7e896b6f7ca2a62f0ee95e597c8f159f12c..f969cd45188399844ba6c04e8eb1607eb7d43861 100644
--- a/partners/managers.py
+++ b/partners/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.utils import timezone
 
diff --git a/partners/models.py b/partners/models.py
index 0bd8987374d29ede28ed6f078efaf2e03f2539c7..966a782317001e39eb221f954b9a3b4e03110657 100644
--- a/partners/models.py
+++ b/partners/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 import hashlib
 import random
diff --git a/partners/templates/partners/_prospective_partner_card.html b/partners/templates/partners/_prospective_partner_card.html
index 5ab2d85a1d11e9292d97d516f9fac472b24f7288..48c903504c317ae88d07ef63fdbd60c621bbd770 100644
--- a/partners/templates/partners/_prospective_partner_card.html
+++ b/partners/templates/partners/_prospective_partner_card.html
@@ -67,7 +67,7 @@
       <form class="d-block mt-2 mb-3" action="{% url 'partners:add_prospartner_event' prospartner_id=pp.id %}" method="post">
         {% csrf_token %}
         {{ ppevent_form|bootstrap }}
-        <input type="submit" name="submit" value="Submit" class="btn btn-secondary">
+        <input type="submit" name="submit" value="Submit" class="btn btn-outline-secondary">
       </form>
 
       <h3>Partner status</h3>
diff --git a/partners/templates/partners/dashboard.html b/partners/templates/partners/dashboard.html
index e99dd7b9629655d3c64698e8b5e4f03708525e7b..7ba9733e3ad8c27c4cb43afbdf5bd852e37aae87 100644
--- a/partners/templates/partners/dashboard.html
+++ b/partners/templates/partners/dashboard.html
@@ -20,20 +20,20 @@
             <div class="tab-nav-inner">
                 <!-- Nav tabs -->
                 <ul class="nav btn-group personal-page-nav" role="tablist">
-                  <li class="nav-item btn btn-secondary">
+                  <li class="nav-item btn btn-outline-secondary">
                     <a href="#account" class="nav-link active" data-toggle="tab">Account</a>
                   </li>
-                  <li class="nav-item btn btn-secondary">
+                  <li class="nav-item btn btn-outline-secondary">
                     <a href="#agreements" class="nav-link" data-toggle="tab">Membership Agreements</a>
                   </li>
                   {% if perms.scipost.can_manage_SPB %}
-                    <li class="nav-item btn btn-secondary">
+                    <li class="nav-item btn btn-outline-secondary">
                         <a href="#prospartners" class="nav-link" data-toggle="tab">Prospective Partners</a>
                     </li>
-                    <li class="nav-item btn btn-secondary">
+                    <li class="nav-item btn btn-outline-secondary">
                         <a href="#partners" class="nav-link" data-toggle="tab">Partners</a>
                     </li>
-                    <li class="nav-item btn btn-secondary">
+                    <li class="nav-item btn btn-outline-secondary">
                         <a href="#global_agreements" class="nav-link" data-toggle="tab">Agreements</a>
                     </li>
                   {% endif %}
diff --git a/partners/templatetags/partners_extras.py b/partners/templatetags/partners_extras.py
index 5bdea03aca97fa8a75cb4f9a5dcb16293ef998a7..9abcc6c3db3cc9fe593637dc478e0dd050487926 100644
--- a/partners/templatetags/partners_extras.py
+++ b/partners/templatetags/partners_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from ..constants import PROSPECTIVE_PARTNER_REQUESTED,\
diff --git a/partners/tests.py b/partners/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/partners/tests.py
+++ b/partners/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/partners/urls.py b/partners/urls.py
index a4ca9e619da3b462aed692fca659be4e5893aec6..a11e5d3d9d9f1ab4a66370bb4ca3556ddee8fb80 100644
--- a/partners/urls.py
+++ b/partners/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/partners/utils.py b/partners/utils.py
index 809d580e46d9025249301ed625f98a4fb1cff684..9b872f9a5976bdd6601a354ce3c311b2575f6d9c 100644
--- a/partners/utils.py
+++ b/partners/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from common.utils import BaseMailUtil
 
 
diff --git a/partners/views.py b/partners/views.py
index 577e824c1db8ac0408a6d146cdf1a54a76470bea..a17405729386aea2af58cb53b24854e185c9e4d0 100644
--- a/partners/views.py
+++ b/partners/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import mimetypes
 
 from django.contrib import messages
diff --git a/petitions/admin.py b/petitions/admin.py
index 9dfc9a12a52b0499c25a0d85f0fc1b588520ed48..826a4485ef9e8220849c1a0597a8bc9e76aa3a84 100644
--- a/petitions/admin.py
+++ b/petitions/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Petition, PetitionSignatory
diff --git a/petitions/apps.py b/petitions/apps.py
index aef02c09b06a79f8743cfb740c788fecf73c1d01..28e7539a61200db641fbb833c32c14de5c11e663 100644
--- a/petitions/apps.py
+++ b/petitions/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/petitions/forms.py b/petitions/forms.py
index 7321a5178d4cf265d135995e3bc15234147d439c..a201f06bbb2d4c5d89b89d9adbe77c8c1ac631b4 100644
--- a/petitions/forms.py
+++ b/petitions/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 
 from captcha.fields import ReCaptchaField
diff --git a/petitions/managers.py b/petitions/managers.py
index e21badb0810bd0be41432dc5b49eabdd007f4704..6e53a4337763fae2af9ef0aaca1c57d83d155b45 100644
--- a/petitions/managers.py
+++ b/petitions/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 
diff --git a/petitions/models.py b/petitions/models.py
index fec56dbd666f2f6bfc7dfec414c436132da14f03..a5d16160bc9b0b5c3d1b7503cdcc292ca89415a0 100644
--- a/petitions/models.py
+++ b/petitions/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.contrib.auth.models import User
 from django.db import models
diff --git a/petitions/tests.py b/petitions/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/petitions/tests.py
+++ b/petitions/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/petitions/urls.py b/petitions/urls.py
index 7175ce752a716d15049fcfbcbb7608bd0f510601..e77d597e06c8be5a399a975d95c273c274c163b8 100644
--- a/petitions/urls.py
+++ b/petitions/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/petitions/utils.py b/petitions/utils.py
index 8adeca9b6e618a13bbdb5943a0ef9bb4801e152a..792e406002bbf339abdcd8bfacb9c41d31f6499b 100644
--- a/petitions/utils.py
+++ b/petitions/utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from common.utils import BaseMailUtil
 
 
diff --git a/petitions/views.py b/petitions/views.py
index 662dc0774df2d0f75b77760951480c9522eafdc0..7656b2fa78d00aac817c8db82dd3a6709d517484 100644
--- a/petitions/views.py
+++ b/petitions/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import hashlib
 import random
 import string
diff --git a/proceedings/admin.py b/proceedings/admin.py
index 67d87120b6087ac7fe9e8825899d9311b5c0e8ed..21dcca4d719214ebbacd30755f81c34aecb5e686 100644
--- a/proceedings/admin.py
+++ b/proceedings/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from .models import Proceedings
diff --git a/proceedings/apps.py b/proceedings/apps.py
index dd2aa26255e92b46cce1f14e6677000b9f6023e7..1470c75a69652af7d9e283103915ae6f2c1774cb 100644
--- a/proceedings/apps.py
+++ b/proceedings/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/proceedings/forms.py b/proceedings/forms.py
index f72822659eaaa1470c4deda196bce17d95ebf927..179305ab8fa74fcd7658b19aa632a96a5b3e500f 100644
--- a/proceedings/forms.py
+++ b/proceedings/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 
 from .models import Proceedings
diff --git a/proceedings/managers.py b/proceedings/managers.py
index e6658b7a6ae8d7c3fb02c526f3720a9f1e7f5fd2..1a2eed24891c1c07a1e2a6fb5f6055765f87d89e 100644
--- a/proceedings/managers.py
+++ b/proceedings/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.utils import timezone
 
diff --git a/proceedings/models.py b/proceedings/models.py
index c0a55c6822570949635051a0f0c38aa0422cbc81..c2809ff46a4af2a3678de994ae03da01c89380c7 100644
--- a/proceedings/models.py
+++ b/proceedings/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.db import models
 from django.utils import timezone
diff --git a/proceedings/tests.py b/proceedings/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/proceedings/tests.py
+++ b/proceedings/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/proceedings/urls.py b/proceedings/urls.py
index 1f51ce041cb7d6b89feb0fdad2d7eff10376864e..a7aa88c1d86ace1a1502a2fe8ee1953d0cc4c0b7 100644
--- a/proceedings/urls.py
+++ b/proceedings/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/proceedings/views.py b/proceedings/views.py
index d2db1c612dc05c19bc59dfa538a63cfe36854bb5..e73802fa18e32ed72994f04d126bd7d0ec42b9e6 100644
--- a/proceedings/views.py
+++ b/proceedings/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.decorators import login_required, permission_required
 from django.shortcuts import get_object_or_404, render
 from django.views.generic.edit import CreateView, UpdateView
diff --git a/production/__init__.py b/production/__init__.py
index 2418e502e4286e2cfcb4845419fa9fee9ea0e4cb..5c140973e992e3925e8989a6b1ba635ff101c918 100644
--- a/production/__init__.py
+++ b/production/__init__.py
@@ -1 +1,5 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 default_app_config = 'production.apps.ProductionConfig'
diff --git a/production/admin.py b/production/admin.py
index e0452b589e599e8d32bf05776fe9668fa0c5bf92..a0dff4a66aeb6f772e10de0010b56477d035297e 100644
--- a/production/admin.py
+++ b/production/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from guardian.admin import GuardedModelAdmin
diff --git a/production/apps.py b/production/apps.py
index c7df2ea8326bea092da1a6f5ce4562710650dafd..8521e98d50d09fc2c9ffe66a0cdeb65841a33331 100644
--- a/production/apps.py
+++ b/production/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 from django.db.models.signals import post_save
 
diff --git a/production/constants.py b/production/constants.py
index 291bdc7ed06bc34034017caee5b35c1ee36415dd..26fc4d0ec9d57282e6f72c6af1e3d4fc5b44764e 100644
--- a/production/constants.py
+++ b/production/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 PRODUCTION_STREAM_INITIATED = 'initiated'
 PRODUCTION_STREAM_COMPLETED = 'completed'
 PROOFS_TASKED = 'tasked'
diff --git a/production/forms.py b/production/forms.py
index dabd1d19de44952673b90a7206f8439a361b0a91..07b9b20af7e26bf8a05050e0ce61333f9f0006ca 100644
--- a/production/forms.py
+++ b/production/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django import forms
diff --git a/production/managers.py b/production/managers.py
index fb0788d60275ad02710acd2a94f315f89cfc8375..5595eb6b3aeb44c19f90d667394e76d03b185e98 100644
--- a/production/managers.py
+++ b/production/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 from . import constants
diff --git a/production/models.py b/production/models.py
index 54becc09e16102a0bb5115c3d14f5bfc672303e0..30b7a3c5bfdf7eb355d736d73de3304509bc73e9 100644
--- a/production/models.py
+++ b/production/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.contrib.contenttypes.fields import GenericRelation
 from django.core.urlresolvers import reverse
diff --git a/production/permissions.py b/production/permissions.py
index 54012de7d339d7367a33dc9e62187e45402fa1d1..a6eb4a9fdb38c29407b6303ab9d51594c86081fc 100644
--- a/production/permissions.py
+++ b/production/permissions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.decorators import user_passes_test
 
 
diff --git a/production/signals.py b/production/signals.py
index c712528527cec7aace9a12f535cbac956a7e2f6e..5aad5d05f4c193c83a56564aee40781138daa8b9 100644
--- a/production/signals.py
+++ b/production/signals.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.models import Group
 
 from .import constants
diff --git a/production/templates/production/partials/production_stream_card.html b/production/templates/production/partials/production_stream_card.html
index 1637b4bfe06682c252a2b3e733a99d74db397785..7b75318c930ea9102b4bb31fe9ae7ab41656be08 100644
--- a/production/templates/production/partials/production_stream_card.html
+++ b/production/templates/production/partials/production_stream_card.html
@@ -14,7 +14,7 @@
     <form action="{% url 'production:add_event' stream_id=stream.id %}" method="post" class="mb-2">
         {% csrf_token %}
         {{ prodevent_form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" name="submit" value="Submit">
+        <input type="submit" class="btn btn-outline-secondary" name="submit" value="Submit">
     </form>
   {% endif %}
 
@@ -26,7 +26,7 @@
             <form id="log_form" style="display: none;" action="{% url 'production:add_work_log' stream_id=stream.id %}" method="post" class="mb-2">
                 {% csrf_token %}
                 {{ work_log_form|bootstrap }}
-                <input type="submit" class="btn btn-secondary" name="submit" value="Log">
+                <input type="submit" class="btn btn-outline-secondary" name="submit" value="Log">
             </form>
         </li>
     </ul>
@@ -99,11 +99,11 @@
               {% endif %}
 
               {% if perms.scipost.can_publish_accepted_submission %}
-                  {% if not stream.submission.publication %}
-                    <li><a href="{% url 'journals:initiate_publication' %}">Initiate the publication process</a></li>
-                  {% endif %}
                     <li><a href="{% url 'production:mark_as_completed' stream_id=stream.id %}">Mark this stream as completed</a></li>
               {% endif %}
+              {% if perms.scipost.can_draft_publication and stream.status == 'accepted' %}
+                    <li><a href="{% url 'journals:update_publication' stream.submission.arxiv_identifier_w_vn_nr %}">Draft Publication</a></li>
+              {% endif %}
           </ul>
     {% endif %}
 {% endblock %}
diff --git a/production/templates/production/partials/production_stream_card_completed.html b/production/templates/production/partials/production_stream_card_completed.html
index 38f1c7fa637e5fafee9117caf225492c8dad3abb..555799b9e3d39eb0c5b124c9664f98351774fe0c 100644
--- a/production/templates/production/partials/production_stream_card_completed.html
+++ b/production/templates/production/partials/production_stream_card_completed.html
@@ -8,6 +8,9 @@
     {% include 'partials/submissions/submission_card_content.html' with submission=stream.submission %}
 </div>
 <div class="card-body">
+      {% if perms.scipost.can_draft_publication and stream.status == 'accepted' %}
+        <p>The proofs have been accepted. Please start <a href="{% url 'journals:update_publication' stream.submission.arxiv_identifier_w_vn_nr %}">drafting the Publication here</a>.</p>
+      {% endif %}
       <h3>Stream details</h3>
       <ul>
           <li>Status: <span class="label label-secondary label-sm">{{ stream.get_status_display }}</span></li>
diff --git a/production/templates/production/production.html b/production/templates/production/production.html
index 8198157beb4b015e49f7dfe0da807d4fda991e46..4740ab7b5688055a0048b7b7420430cbf170996b 100644
--- a/production/templates/production/production.html
+++ b/production/templates/production/production.html
@@ -23,14 +23,14 @@
     <div class="tab-nav-container">
       <div class="tab-nav-inner">
 	<ul class="nav btn-group personal-page-nav" role="tablist">
-	  <li class="nav-item btn btn-secondary">
+	  <li class="nav-item btn btn-outline-secondary">
 	    <a href="#streams" class="nav-link active" data-toggle="tab">{{ perms.scipost.can_assign_production_officer|yesno:"Streams,My Streams" }}</a>
 	  </li>
-	  <li class="nav-item btn btn-secondary">
+	  <li class="nav-item btn btn-outline-secondary">
 	    <a href="#mytimesheet" class="nav-link" data-toggle="tab">My Timesheet</a>
 	  </li>
       {% if perms.scipost.can_promote_user_to_production_officer %}
-          <li class="nav-item btn btn-secondary">
+          <li class="nav-item btn btn-outline-secondary">
             <a href="#officers" class="nav-link" data-toggle="tab">Production Team</a>
           </li>
       {% endif %}
@@ -62,6 +62,7 @@
                                     Officer: {% if stream.officer %}{{ stream.officer.user.first_name }} {{ stream.officer.user.last_name }}{% else %}<em>Unassigned</em>{% endif %}
                                 "></i>
                                 {% if stream.supervisor.user == request.user %}
+                                    <br>
                                     <i class="fa fa-info-circle" data-toggle="tooltip" data-html="true" title="" data-original-title="You are assigned as supervisor"></i>
                                 {% endif %}
                             </div>
diff --git a/production/templates/production/productionevent_form.html b/production/templates/production/productionevent_form.html
index 854949c7c79d35ecc6bbe178227d58327091d369..5d89f7a75a031c69f612d0c22d519ef9ed66e831 100644
--- a/production/templates/production/productionevent_form.html
+++ b/production/templates/production/productionevent_form.html
@@ -20,7 +20,7 @@
       <form method="post">
         {% csrf_token %}
         {{ form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" name="submit" value="Submit">
+        <input type="submit" class="btn btn-outline-secondary" name="submit" value="Submit">
       </form>
     </ul>
   </div>
diff --git a/production/templates/production/upload_proofs.html b/production/templates/production/upload_proofs.html
index 55efa68990e527c266748dbedc5dea085a9a4714..88289ff5915d0cdc623e60bc65d832182f1fa372 100644
--- a/production/templates/production/upload_proofs.html
+++ b/production/templates/production/upload_proofs.html
@@ -20,7 +20,7 @@
       <form method="post" enctype="multipart/form-data">
         {% csrf_token %}
         {{ form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" name="submit" value="Upload">
+        <input type="submit" class="btn btn-outline-secondary" name="submit" value="Upload">
       </form>
     </ul>
   </div>
diff --git a/production/tests.py b/production/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/production/tests.py
+++ b/production/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/production/urls.py b/production/urls.py
index f1419f395e8ee04d6b8c5d307f67b715139ae25f..4f7f713055a9f959c834326365128329a6313827 100644
--- a/production/urls.py
+++ b/production/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from production import views as production_views
diff --git a/production/utils.py b/production/utils.py
index 12d31bc778752d05ce0ed9d39cb549bb34c5dfc2..9e2b31de48d0109d0bb9e3e50bce8c8bb2bd29eb 100644
--- a/production/utils.py
+++ b/production/utils.py
@@ -1,6 +1,45 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from common.utils import BaseMailUtil
+
+
 def proofs_id_to_slug(id):
     return int(id) + 8932
 
 
 def proofs_slug_to_id(slug):
     return int(slug) - 8932
+
+
+class ProductionUtils(BaseMailUtil):
+    mail_sender = 'no-reply@scipost.org'
+    mail_sender_title = 'SciPost Production'
+
+    @classmethod
+    def email_assigned_invitation_officer(cls):
+        """
+        Email invitation officer about his/her new assigned stream.
+        """
+        cls._send_mail(cls, 'email_assigned_invitation_officer',
+                       [cls._context['stream'].invitations_officer.user.email],
+                       'SciPost: you have a new task')
+
+    @classmethod
+    def email_assigned_production_officer(cls):
+        """
+        Email production officer about his/her new assigned stream.
+        """
+        cls._send_mail(cls, 'email_assigned_production_officer',
+                       [cls._context['stream'].officer.user.email],
+                       'SciPost: you have a new task')
+
+    @classmethod
+    def email_assigned_supervisor(cls):
+        """
+        Email production officer about his/her new assigned stream.
+        """
+        cls._send_mail(cls, 'email_assigned_supervisor',
+                       [cls._context['stream'].supervisor.user.email],
+                       'SciPost: you have a new supervisory task')
diff --git a/production/views.py b/production/views.py
index 52dc38d1669f07c93c894e0c11f3de82527d05bb..5bf1670802217ee777288b223d7bf01fbd0ef20b 100644
--- a/production/views.py
+++ b/production/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import mimetypes
 
 from django.contrib import messages
@@ -25,7 +29,7 @@ from .forms import ProductionEventForm, AssignOfficerForm, UserToOfficerForm,\
                    AssignInvitationsOfficerForm
 from .permissions import is_production_user
 from .signals import notify_stream_status_change,  notify_new_stream_assignment
-from .utils import proofs_slug_to_id
+from .utils import proofs_slug_to_id, ProductionUtils
 
 
 ######################
@@ -248,6 +252,11 @@ def add_officer(request, stream_id):
             noted_to=officer,
             noted_by=request.user.production_user)
         event.save()
+
+        # Temp fix.
+        # TODO: Implement proper email
+        ProductionUtils.load({'stream': stream})
+        ProductionUtils.email_assigned_production_officer()
     else:
         for key, error in form.errors.items():
             messages.warning(request, error[0])
@@ -278,6 +287,11 @@ def add_invitations_officer(request, stream_id):
             noted_to=officer,
             noted_by=request.user.production_user)
         event.save()
+
+        # Temp fix.
+        # TODO: Implement proper email
+        ProductionUtils.load({'stream': stream})
+        ProductionUtils.email_assigned_invitation_officer()
     else:
         for key, error in form.errors.items():
             messages.warning(request, error[0])
@@ -349,6 +363,11 @@ def add_supervisor(request, stream_id):
 
         assign_perm('can_work_for_stream', supervisor.user, stream)
         assign_perm('can_perform_supervisory_actions', supervisor.user, stream)
+
+        # Temp fix.
+        # TODO: Implement proper email
+        ProductionUtils.load({'stream': stream})
+        ProductionUtils.email_assigned_supervisor()
     else:
         for key, error in form.errors.items():
             messages.warning(request, error[0])
diff --git a/requirements.txt b/requirements.txt
index 06a89cb118d90135ec6df59ed088cf743c168f6f..6d5976cccefd45eaa777b50320e911296a0cbb99 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -20,12 +20,12 @@ django-guardian==1.4.9
 django-mathjax==0.0.5  # This thing looks dead as well
 django-mptt==0.8.6  # Dead
 django-sphinxdoc==1.5.1
+django-silk==2.0.0
 django-recaptcha==1.3.1
 django-webpack-loader==0.5
 
 
 # Documentation Packages
-alabaster==0.7.10  # Sphinx theme
 docutils==0.12  # What's this thing?
 Pygments==2.2.0  # Syntax highlighter
 Sphinx==1.4.9
@@ -33,13 +33,12 @@ sphinx-rtd-theme==0.1.9  # Sphinx theme
 
 
 # Testing
-factory-boy==2.9.2
-Faker==0.7.18
-fake-factory==0.7.2  # Old version of Faker package
+factory-boy==2.10.0
+Faker==0.8.12
 
 
 # Django Utils
-django-haystack==2.5.1  # Check if this is really used. Package is not up-to-date
+django-haystack==2.5.1
 Whoosh==2.7.4  # Directly related to Haystack.
 
 
diff --git a/scipost/admin.py b/scipost/admin.py
index 3b8059b73e28851d0ebc3e071091ae2b846fc0b2..e964c159c348844eac1f3c92c8ab277718e7d365 100644
--- a/scipost/admin.py
+++ b/scipost/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 from django import forms
 
@@ -5,12 +9,9 @@ from django.contrib.auth.admin import UserAdmin
 from django.contrib.auth.models import User, Permission
 
 from scipost.models import Contributor, Remark,\
-                           DraftInvitation,\
-                           RegistrationInvitation,\
                            AuthorshipClaim, PrecookedEmail,\
                            EditorialCollege, EditorialCollegeFellowship, UnavailabilityPeriod
 
-from journals.models import Publication
 from partners.admin import ContactToUserInline
 from production.admin import ProductionUserInline
 from submissions.models import Submission
@@ -25,7 +26,7 @@ class ContributorAdmin(admin.ModelAdmin):
         'user__last_name',
         'user__email',
         'orcid_id',
-        'affiliation']
+        'affiliations__institution__name']
 
 
 class ContributorInline(admin.StackedInline):
@@ -122,49 +123,6 @@ class RemarkAdmin(admin.ModelAdmin):
 admin.site.register(Remark, RemarkAdmin)
 
 
-class DraftInvitationAdminForm(forms.ModelForm):
-    cited_in_submission = forms.ModelChoiceField(
-        required=False,
-        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
-    cited_in_publication = forms.ModelChoiceField(
-        required=False,
-        queryset=Publication.objects.order_by('-publication_date'))
-
-    class Meta:
-        model = DraftInvitation
-        fields = '__all__'
-
-
-class DraftInvitationAdmin(admin.ModelAdmin):
-    search_fields = ['first_name', 'last_name', 'email', 'processed']
-    form = DraftInvitationAdminForm
-
-
-admin.site.register(DraftInvitation, DraftInvitationAdmin)
-
-
-class RegistrationInvitationAdminForm(forms.ModelForm):
-    cited_in_submission = forms.ModelChoiceField(
-        required=False,
-        queryset=Submission.objects.order_by('-arxiv_identifier_w_vn_nr'))
-    cited_in_publication = forms.ModelChoiceField(
-        required=False,
-        queryset=Publication.objects.order_by('-publication_date'))
-
-    class Meta:
-        model = RegistrationInvitation
-        fields = '__all__'
-
-
-class RegistrationInvitationAdmin(admin.ModelAdmin):
-    search_fields = ['first_name', 'last_name', 'email', 'invitation_key']
-    list_display = ['__str__', 'invitation_type', 'invited_by', 'responded']
-    list_filter = ['invitation_type', 'message_style', 'responded', 'declined']
-    date_hierarchy = 'date_sent'
-    form = RegistrationInvitationAdminForm
-
-
-admin.site.register(RegistrationInvitation, RegistrationInvitationAdmin)
 admin.site.register(AuthorshipClaim)
 admin.site.register(Permission)
 
diff --git a/scipost/behaviors.py b/scipost/behaviors.py
index 7904262e934152b73b11ce7374c979ee55b02c1f..c7771e7ec60f87407bac5ed143d27c40a5a0651f 100644
--- a/scipost/behaviors.py
+++ b/scipost/behaviors.py
@@ -1,4 +1,9 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
+from django.core.validators import RegexValidator
 from django.utils import timezone
 
 from .db.fields import AutoDateTimeField
@@ -15,3 +20,7 @@ class TimeStampedModel(models.Model):
 
     class Meta:
         abstract = True
+
+
+orcid_validator = RegexValidator(r'^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[0-9X]{1}$',
+                                 'Please follow the ORCID format, e.g.: 0000-0001-2345-6789')
diff --git a/scipost/constants.py b/scipost/constants.py
index 07c873c85863224471c0a4b8c839fd6295728176..dd7a72d42083715dfc7d0fa3db8fbca06b4c86f1 100644
--- a/scipost/constants.py
+++ b/scipost/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 DISCIPLINE_PHYSICS = 'physics'
 DISCIPLINE_ASTROPHYSICS = 'astrophysics'
 DISCIPLINE_MATH = 'mathematics'
@@ -25,8 +29,7 @@ SCIPOST_SUBJECT_AREAS = (
         ('Phys:NE', 'Nuclear Physics - Experiment'),
         ('Phys:NT', 'Nuclear Physics - Theory'),
         ('Phys:QP', 'Quantum Physics'),
-        ('Phys:SM', 'Statistical and Soft Matter Physics'),
-        )
+        ('Phys:SM', 'Statistical and Soft Matter Physics'))
      ),
     ('Astrophysics', (
         ('Astro:GA', 'Astrophysics of Galaxies'),
@@ -34,8 +37,7 @@ SCIPOST_SUBJECT_AREAS = (
         ('Astro:EP', 'Earth and Planetary Astrophysics'),
         ('Astro:HE', 'High Energy Astrophysical Phenomena'),
         ('Astro:IM', 'Instrumentation and Methods for Astrophysics'),
-        ('Astro:SR', 'Solar and Stellar Astrophysics'),
-        )
+        ('Astro:SR', 'Solar and Stellar Astrophysics'))
      ),
     ('Mathematics', (
         ('Math:AG', 'Algebraic Geometry'),
@@ -69,8 +71,7 @@ SCIPOST_SUBJECT_AREAS = (
         ('Math:RA', 'Rings and Algebras'),
         ('Math:SP', 'Spectral Theory'),
         ('Math:ST', 'Statistics Theory'),
-        ('Math:SG', 'Symplectic Geometry'),
-        )
+        ('Math:SG', 'Symplectic Geometry'))
      ),
     ('Computer Science', (
         ('Comp:AI', 'Artificial Intelligence'),
@@ -111,9 +112,8 @@ SCIPOST_SUBJECT_AREAS = (
         ('Comp:SE', 'Software Engineering'),
         ('Comp:SD', 'Sound'),
         ('Comp:SC', 'Symbolic Computation'),
-        ('Comp:SY', 'Systems and Control'),
-        )
-     ),
+        ('Comp:SY', 'Systems and Control'))
+     )
 )
 subject_areas_raw_dict = dict(SCIPOST_SUBJECT_AREAS)
 
@@ -122,25 +122,20 @@ subject_areas_dict = {}
 for k in subject_areas_raw_dict.keys():
     subject_areas_dict.update(dict(subject_areas_raw_dict[k]))
 
-CONTRIBUTOR_NEWLY_REGISTERED = 0
-CONTRIBUTOR_NORMAL = 1
-CONTRIBUTOR_STATUS = (
-    # status determine the type of Contributor:
-    # 0: newly registered (unverified; not allowed to submit, comment or vote)
-    # 1: contributor has been vetted through
-    #
-    # Negative status denotes rejected requests or:
-    # -1: not a professional scientist (>= PhD student in known university)
-    # -2: other account already exists for this person
-    # -3: barred from SciPost (abusive behaviour)
-    # -4: disabled account (deceased)
-    (CONTRIBUTOR_NEWLY_REGISTERED, 'newly registered'),
-    (CONTRIBUTOR_NORMAL, 'normal user'),
-    (-1, 'not a professional scientist'),  # Soon to be deprecated
-    (-2, 'other account already exists'),
-    (-3, 'barred from SciPost'),
-    (-4, 'account disabled'),
-    )
+# Contributor types
+NEWLY_REGISTERED, NORMAL_CONTRIBUTOR = 'newly_registered', 'normal'
+NO_SCIENTIST, DOUBLE_ACCOUNT, OUT_OF_ACADEMIA = 'no_scientist', 'double_account', 'out_of_academia'
+BARRED, DISABLED, DECEASED = 'barred', 'disabled', 'deceased'
+CONTRIBUTOR_STATUSES = (
+    (NEWLY_REGISTERED, 'Newly registered'),
+    (NORMAL_CONTRIBUTOR, 'Normal user'),
+    (NO_SCIENTIST, 'Not a professional scientist'),
+    (DOUBLE_ACCOUNT, 'Other account already exists'),
+    (OUT_OF_ACADEMIA, 'Out of academia'),
+    (BARRED, 'Barred from SciPost'),
+    (DISABLED, 'Account disabled'),
+    (DECEASED, 'Person deceased')
+)
 
 TITLE_CHOICES = (
     ('PR', 'Prof.'),
diff --git a/scipost/db/fields.py b/scipost/db/fields.py
index ebbd6e74100d71dbb5985cb9692f76c10fd13b8d..bfff08b23e7e8072389e3ca1e3546d40598eb31e 100644
--- a/scipost/db/fields.py
+++ b/scipost/db/fields.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.utils import timezone
 
diff --git a/scipost/decorators.py b/scipost/decorators.py
index 7f0ab750e58d257dcb4db82c2acd67422bde0bec..fea4dc361ee19a9b8c0909cdea45f6be1b3074ff 100644
--- a/scipost/decorators.py
+++ b/scipost/decorators.py
@@ -1,10 +1,25 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib.auth.decorators import user_passes_test
+
 from .models import Contributor
 
 
 def has_contributor(user):
-    """Requires user to be related to any Contributor."""
+    """Require user to be related to any Contributor."""
     try:
         user.contributor
         return True
     except Contributor.DoesNotExist:
         return False
+
+
+def is_contributor_user():
+    """Dceorator checking if user is related to any Contributor."""
+    def test(u):
+        if u.is_authenticated():
+            return has_contributor(u)
+        return False
+    return user_passes_test(test)
diff --git a/scipost/factories.py b/scipost/factories.py
index 67cb4e2df31821db68e780bbf44fef72d83636c2..d058e515701c72e7a0229d2e79af31867d51fd55 100644
--- a/scipost/factories.py
+++ b/scipost/factories.py
@@ -1,34 +1,43 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 import random
 
 from django.contrib.auth import get_user_model
 from django.contrib.auth.models import Group
 
+from common.helpers import generate_orcid
 from submissions.models import Submission
 
 from .models import Contributor, EditorialCollege, EditorialCollegeFellowship, Remark
 from .constants import TITLE_CHOICES, SCIPOST_SUBJECT_AREAS
 
-from django_countries.data import COUNTRIES
-from faker import Faker
-
 
 class ContributorFactory(factory.django.DjangoModelFactory):
-    title = random.choice(list(dict(TITLE_CHOICES).keys()))
+    title = factory.Iterator(TITLE_CHOICES, getter=lambda c: c[0])
     user = factory.SubFactory('scipost.factories.UserFactory', contributor=None)
-    status = 1  # normal user
-    vetted_by = factory.SubFactory('scipost.factories.ContributorFactory', vetted_by=None)
-    personalwebpage = factory.Faker('url')
-    country_of_employment = factory.Iterator(list(COUNTRIES))
-    affiliation = factory.Faker('company')
+    status = 'normal'  # normal user
+    vetted_by = factory.Iterator(Contributor.objects.all())
+    personalwebpage = factory.Faker('uri')
     expertises = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: [c[0]])
-    personalwebpage = factory.Faker('domain_name')
+    orcid_id = factory.lazy_attribute(lambda n: generate_orcid())
     address = factory.Faker('address')
+    invitation_key = factory.Faker('md5')
+    activation_key = factory.Faker('md5')
+    key_expires = factory.Faker('future_datetime')
 
     class Meta:
         model = Contributor
         django_get_or_create = ('user',)
 
+    @factory.post_generation
+    def add_to_vetting_editors(self, create, extracted, **kwargs):
+        if create:
+            from affiliations.factories import AffiliationFactory
+            AffiliationFactory(contributor=self)
+
 
 class VettingEditorFactory(ContributorFactory):
     @factory.post_generation
@@ -69,7 +78,7 @@ class EditorialCollegeFactory(factory.django.DjangoModelFactory):
 
     class Meta:
         model = EditorialCollege
-        django_get_or_create = ('discipline', )
+        django_get_or_create = ('discipline',)
 
 
 class EditorialCollegeFellowshipFactory(factory.django.DjangoModelFactory):
@@ -85,7 +94,7 @@ class SubmissionRemarkFactory(factory.django.DjangoModelFactory):
     contributor = factory.Iterator(Contributor.objects.all())
     submission = factory.Iterator(Submission.objects.all())
     date = factory.Faker('date_time_this_decade')
-    remark = factory.lazy_attribute(lambda x: Faker().paragraph())
+    remark = factory.Faker('paragraph')
 
     class Meta:
         model = Remark
diff --git a/scipost/feeds.py b/scipost/feeds.py
index 738a1c9567a60b8004ad3fba2f543edec9056c6e..e5426b9bf44f00ca6709654d9637da739cc56dea 100644
--- a/scipost/feeds.py
+++ b/scipost/feeds.py
@@ -1,16 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.contrib.syndication.views import Feed
+from django.http import Http404
 from django.utils.feedgenerator import Atom1Feed
 from django.core.urlresolvers import reverse
 from django.db.models import Q
 
 from comments.models import Comment
+from commentaries.models import Commentary
 from journals.models import Publication
 from news.models import NewsItem
 from scipost.models import subject_areas_dict
 from submissions.constants import SUBMISSION_STATUS_PUBLICLY_INVISIBLE
 from submissions.models import Submission
+from theses.models import ThesisLink
 
 
 class LatestCommentsFeedRSS(Feed):
@@ -19,7 +26,7 @@ class LatestCommentsFeedRSS(Feed):
     link = "/comments/"
 
     def items(self):
-        return Comment.objects.filter(status__gte=0).order_by('-date_submitted')[:10]
+        return Comment.objects.vetted().order_by('-date_submitted')[:10]
 
     def item_title(self, item):
         return item.comment_text[:50]
@@ -28,14 +35,14 @@ class LatestCommentsFeedRSS(Feed):
         return item.comment_text[:50]
 
     def item_link(self, item):
-        if item.commentary:
+        if isinstance(item.content_object, Commentary):
             return reverse('commentaries:commentary',
-                           kwargs={'arxiv_or_DOI_string': item.commentary.arxiv_or_DOI_string})
-        elif item.submission:
+                           kwargs={'arxiv_or_DOI_string': item.content_object.arxiv_or_DOI_string})
+        elif isinstance(item.content_object, Submission):
             return reverse('submissions:submission',
                            kwargs={'arxiv_identifier_w_vn_nr':
-                                   item.submission.arxiv_identifier_w_vn_nr,})
-        elif item.thesislink:
+                                   item.content_object.arxiv_identifier_w_vn_nr})
+        elif isinstance(item.content_object, ThesisLink):
             return reverse('theses:thesis',
                            kwargs={'thesislink_id': item.thesislink.id})
         else:
@@ -142,27 +149,26 @@ class LatestPublicationsFeedRSS(Feed):
     link = "/journals/"
 
     def get_object(self, request, subject_area=''):
-        if subject_area != '':
-            queryset = Publication.objects.filter(
-                Q(subject_area=subject_area) | Q(secondary_areas__contains=[subject_area])
-            ).order_by('-publication_date')[:10]
-            queryset.subject_area = subject_area
-        else:
-            queryset = Publication.objects.order_by('-publication_date')[:10]
-            queryset.subject_area = None
-        return queryset
+        if subject_area and subject_area not in subject_areas_dict:
+            raise Http404('Invalid subject area')
+        qs = Publication.objects.published()
+        if subject_area:
+            qs = qs.filter(
+                Q(subject_area=subject_area) | Q(secondary_areas__contains=[subject_area]))
+        self.subject_area = subject_area
+        return qs.order_by('-publication_date')[:10]
 
     def title(self, obj):
         title_text = 'SciPost: Latest Publications'
-        if obj.subject_area:
-            title_text += ' in %s' % subject_areas_dict[obj.subject_area]
+        if self.subject_area:
+            title_text += ' in %s' % subject_areas_dict.get(self.subject_area)
         return title_text
 
     def description(self, obj):
         desc = 'SciPost: most recent publications'
         try:
-            if obj.subject_area:
-                desc += ' in %s' % subject_areas_dict[obj.subject_area]
+            if self.subject_area:
+                desc += ' in %s' % subject_areas_dict.get(self.subject_area)
         except KeyError:
             pass
         return desc
diff --git a/scipost/fields.py b/scipost/fields.py
index 0e42e07039b5b136dc6444913f833df822d6c635..dc3a5137a2e12b72e2b2de2a77ab8a3bc529b0e4 100644
--- a/scipost/fields.py
+++ b/scipost/fields.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.contrib.postgres.fields import ArrayField
 
diff --git a/scipost/forms.py b/scipost/forms.py
index 60c748382e617c1bc3a971b3caefdddb3ebb3f63..7beb0185ee5b3c26ef020df792e04b290ff2effd 100644
--- a/scipost/forms.py
+++ b/scipost/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django import forms
@@ -19,11 +23,12 @@ from captcha.fields import ReCaptchaField
 from ajax_select.fields import AutoCompleteSelectField
 from haystack.forms import ModelSearchForm as HayStackSearchForm
 
-from .constants import SCIPOST_DISCIPLINES, TITLE_CHOICES, SCIPOST_FROM_ADDRESSES,\
-    INVITATION_CITED_SUBMISSION, INVITATION_CITED_PUBLICATION
+from .behaviors import orcid_validator
+from .constants import (
+    SCIPOST_DISCIPLINES, TITLE_CHOICES, SCIPOST_FROM_ADDRESSES, NO_SCIENTIST, DOUBLE_ACCOUNT,
+    BARRED)
 from .decorators import has_contributor
-from .models import Contributor, DraftInvitation, RegistrationInvitation,\
-                    UnavailabilityPeriod, PrecookedEmail
+from .models import Contributor, DraftInvitation, UnavailabilityPeriod, PrecookedEmail
 
 from affiliations.models import Affiliation, Institution
 from common.forms import MonthYearWidget
@@ -35,14 +40,35 @@ from submissions.models import Report
 
 
 REGISTRATION_REFUSAL_CHOICES = (
-    (0, '-'),
-    (-1, 'not a professional scientist (>= PhD student)'),
-    (-2, 'another account already exists for this person'),
-    (-3, 'barred from SciPost (abusive behaviour)'),
-    )
+    (None, '-'),
+    (NO_SCIENTIST, 'not a professional scientist (>= PhD student)'),
+    (DOUBLE_ACCOUNT, 'another account already exists for this person'),
+    (BARRED, 'barred from SciPost (abusive behaviour)')
+)
 reg_ref_dict = dict(REGISTRATION_REFUSAL_CHOICES)
 
 
+class RequestFormMixin:
+    """
+    This mixin lets the Form accept `request` as an argument.
+    """
+    def __init__(self, *args, **kwargs):
+        self.request = kwargs.pop('request')
+        super().__init__(*args, **kwargs)
+
+
+class HttpRefererFormMixin(RequestFormMixin):
+    """
+    This mixin adds a HiddenInput to the form which tracks the previous url, which can
+    be used to redirect to.
+    """
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self.fields['http_referer'] = forms.URLField(widget=forms.HiddenInput(), required=False)
+        if self.request:
+            self.fields['http_referer'].initial = self.request.META.get('HTTP_REFERER')
+
+
 class RegistrationForm(forms.Form):
     """
     Use this form to process the registration of new accounts.
@@ -55,9 +81,10 @@ class RegistrationForm(forms.Form):
     last_name = forms.CharField(label='* Last name', max_length=100)
     email = forms.EmailField(label='* Email address')
     invitation_key = forms.CharField(max_length=40, widget=forms.HiddenInput(), required=False)
-    orcid_id = forms.CharField(label="ORCID id", max_length=20, required=False,
-                               widget=forms.TextInput(
-                                    {'placeholder': 'Recommended. Get one at orcid.org'}))
+    orcid_id = forms.CharField(
+        label="ORCID id", max_length=20, required=False, validators=[orcid_validator],
+        widget=forms.TextInput({
+            'placeholder': 'Recommended. Get one at orcid.org'}))
     discipline = forms.ChoiceField(choices=SCIPOST_DISCIPLINES, label='* Main discipline')
     country_of_employment = LazyTypedChoiceField(
         choices=countries, label='* Country of employment', initial='NL',
@@ -67,12 +94,10 @@ class RegistrationForm(forms.Form):
     affiliation = forms.CharField(label='* Affiliation', max_length=300)
     address = forms.CharField(
         label='Address', max_length=1000,
-        widget=forms.TextInput({'placeholder': 'For postal correspondence'}),
-        required=False)
+        widget=forms.TextInput({'placeholder': 'For postal correspondence'}), required=False)
     personalwebpage = forms.URLField(
-        label='Personal web page',
-        widget=forms.TextInput({'placeholder': 'full URL, e.g. http://www.[yourpage].com'}),
-        required=False)
+        label='Personal web page', required=False,
+        widget=forms.TextInput({'placeholder': 'full URL, e.g. http://www.[yourpage].com'}))
     username = forms.CharField(label='* Username', max_length=100)
     password = forms.CharField(label='* Password', widget=forms.PasswordInput())
     password_verif = forms.CharField(label='* Verify password', widget=forms.PasswordInput(),
@@ -145,8 +170,7 @@ class DraftInvitationForm(forms.ModelForm):
         model = DraftInvitation
         fields = ['title', 'first_name', 'last_name', 'email',
                   'invitation_type',
-                  'cited_in_submission', 'cited_in_publication'
-                  ]
+                  'cited_in_submission', 'cited_in_publication']
 
     def __init__(self, *args, **kwargs):
         '''
@@ -161,19 +185,14 @@ class DraftInvitationForm(forms.ModelForm):
         if self.instance.id:
             return email
 
-        if RegistrationInvitation.objects.filter(email=email).exists():
-            self.add_error('email', 'This email address has already been used for an invitation')
-        elif DraftInvitation.objects.filter(email=email).exists():
-            self.add_error('email', ('This email address has already been'
-                                     ' used for a draft invitation'))
-        elif User.objects.filter(email=email).exists():
+        if User.objects.filter(email=email).exists():
             self.add_error('email', 'This email address is already associated to a Contributor')
 
         return email
 
     def clean_invitation_type(self):
         invitation_type = self.cleaned_data['invitation_type']
-        if invitation_type == 'F' and not self.current_user.has_perm('scipost.can_invite_Fellows'):
+        if invitation_type == 'F' and not self.current_user.has_perm('scipost.can_invite_fellows'):
             self.add_error('invitation_type', ('You do not have the authorization'
                                                ' to send a Fellow-type invitation.'
                                                ' Consider Contributor, or cited (sub/pub).'))
@@ -184,95 +203,6 @@ class DraftInvitationForm(forms.ModelForm):
         return invitation_type
 
 
-class ContributorsFilterForm(forms.Form):
-    names = forms.CharField(widget=forms.Textarea())
-    include_invitations = forms.BooleanField(required=False, initial=True,
-                                             label='Include invitations in the filter.')
-
-    def filter(self):
-        names_found = []
-        names_not_found = []
-        invitations_found = []
-        r = self.cleaned_data['names'].replace('\r', '\n').split('\n')
-        include_invitations = self.cleaned_data.get('include_invitations', False)
-        for name in r:
-            last_name = name.split(',')[0]
-            if not last_name:
-                continue
-            if Contributor.objects.filter(user__last_name__istartswith=last_name).exists():
-                names_found.append(name)
-            elif include_invitations and RegistrationInvitation.objects.pending_response().filter(
-              last_name__istartswith=last_name).exists():
-                invitations_found.append(name)
-            else:
-                names_not_found.append(name)
-        return names_found, names_not_found, invitations_found
-
-
-class RegistrationInvitationForm(forms.ModelForm):
-    cited_in_submission = AutoCompleteSelectField('submissions_lookup', required=False)
-    cited_in_publication = AutoCompleteSelectField('publication_lookup', required=False)
-
-    class Meta:
-        model = RegistrationInvitation
-        fields = ['title', 'first_name', 'last_name', 'email',
-                  'invitation_type',
-                  'cited_in_submission', 'cited_in_publication',
-                  'message_style', 'personal_message'
-                  ]
-
-    def __init__(self, *args, **kwargs):
-        '''
-        This form has a required keyword argument `current_user` which is used for validation of
-        the form fields.
-        '''
-        self.current_user = kwargs.pop('current_user')
-        if kwargs.get('initial', {}).get('cited_in_submission', False):
-            kwargs['initial']['cited_in_submission'] = kwargs['initial']['cited_in_submission'].id
-        if kwargs.get('initial', {}).get('cited_in_publication', False):
-            kwargs['initial']['cited_in_publication'] = kwargs['initial']['cited_in_publication'].id
-
-        super().__init__(*args, **kwargs)
-        self.fields['personal_message'].widget.attrs.update(
-            {'placeholder': ('NOTE: a personal phrase or two.'
-                             ' The bulk of the text will be auto-generated.')})
-
-        self.fields['cited_in_publication'] = forms.ModelChoiceField(
-            queryset=Publication.objects.all().order_by('-publication_date'),
-            required=False)
-
-    def clean(self):
-        data = self.cleaned_data
-        if data.get('invitation_type') == INVITATION_CITED_SUBMISSION:
-            if not data.get('cited_in_submission'):
-                self.add_error('cited_in_submission', 'Please state the Submission cited.')
-        if data.get('invitation_type') == INVITATION_CITED_PUBLICATION:
-            if not data.get('cited_in_publication'):
-                self.add_error('cited_in_publication', 'Please state the Publication cited.')
-        return data
-
-    def clean_email(self):
-        email = self.cleaned_data['email']
-        if RegistrationInvitation.objects.filter(email=email).exists():
-            self.add_error('email', 'This email address has already been used for an invitation')
-        elif User.objects.filter(email=email).exists():
-            self.add_error('email', 'This email address is already associated to a Contributor')
-
-        return email
-
-    def clean_invitation_type(self):
-        invitation_type = self.cleaned_data['invitation_type']
-        if invitation_type == 'F' and not self.current_user.has_perm('scipost.can_invite_Fellows'):
-            self.add_error('invitation_type', ('You do not have the authorization'
-                                               ' to send a Fellow-type invitation.'
-                                               ' Consider Contributor, or cited (sub/pub).'))
-        if invitation_type == 'R':
-            self.add_error('invitation_type', ('Referee-type invitations must be made by the'
-                                               ' Editor-in-charge at the relevant Submission'
-                                               '\'s Editorial Page. '))
-        return invitation_type
-
-
 class ModifyPersonalMessageForm(forms.Form):
     personal_message = forms.CharField(widget=forms.Textarea())
 
@@ -352,8 +282,9 @@ class AuthenticationForm(forms.Form):
     next = forms.CharField(widget=forms.HiddenInput(), required=False)
 
     def user_is_inactive(self):
-        """
-        Check if the User is active but only if the password is valid, to prevent any
+        """Check if the User is active only if the password is valid.
+
+        Only check  to prevent any
         possible clue (?) of the password.
         """
         username = self.cleaned_data['username']
@@ -498,7 +429,7 @@ def get_date_filter_choices():
 
 
 class SearchForm(HayStackSearchForm):
-    # The date filters doesn't function well...
+    # The date filters don't function well...
     start = forms.DateField(widget=MonthYearWidget(), required=False)  # Month
     end = forms.DateField(widget=MonthYearWidget(end=True), required=False)  # Month
 
diff --git a/scipost/management/commands/add_groups_and_permissions.py b/scipost/management/commands/add_groups_and_permissions.py
index 36a786563117ac25975e17bc3520a63a35a04084..d8da56200da91a2974e81fab4ba6cc1f4a38a5f3 100644
--- a/scipost/management/commands/add_groups_and_permissions.py
+++ b/scipost/management/commands/add_groups_and_permissions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.management.base import BaseCommand
 
 from django.contrib.auth.models import Group, Permission
@@ -66,27 +70,20 @@ class Command(BaseCommand):
             content_type=content_type)
 
         # Registration and invitations
-        change_draft_invitation, created = Permission.objects.get_or_create(
-            codename='change_draftinvitation',
-            defaults={
-                'name': 'Can vet registration requests',
-                'content_type': content_type_draft_invitation
-            }
-        )
         can_vet_registration_requests, created = Permission.objects.get_or_create(
             codename='can_vet_registration_requests',
             name='Can vet registration requests',
             content_type=content_type)
-        can_draft_registration_invitations, created = Permission.objects.get_or_create(
-            codename='can_draft_registration_invitations',
-            name='Can draft registration invitations',
+        can_create_registration_invitations, created = Permission.objects.get_or_create(
+            codename='can_create_registration_invitations',
+            name='Can create registration invitations',
             content_type=content_type)
         can_manage_registration_invitations, created = Permission.objects.get_or_create(
             codename='can_manage_registration_invitations',
             name='Can manage registration invitations',
             content_type=content_type)
-        can_invite_Fellows, created = Permission.objects.get_or_create(
-            codename='can_invite_Fellows',
+        can_invite_fellows, created = Permission.objects.get_or_create(
+            codename='can_invite_fellows',
             name='Can invite Fellows',
             content_type=content_type)
         can_resend_registration_requests, created = Permission.objects.get_or_create(
@@ -255,6 +252,14 @@ class Command(BaseCommand):
             codename='can_view_all_funding_info',
             name='Can view all Funders info',
             content_type=content_type)
+        can_create_grants, created = Permission.objects.get_or_create(
+            codename='can_create_grants',
+            name='Can create Grant',
+            content_type=content_type)
+        can_draft_publication, created = Permission.objects.get_or_create(
+            codename='can_draft_publication',
+            name='Can draft Publication',
+            content_type=content_type)
 
         # Documentation
         can_view_docs_scipost, created = Permission.objects.get_or_create(
@@ -284,7 +289,7 @@ class Command(BaseCommand):
         SciPostAdmin.permissions.set([
             can_read_all_privacy_sensitive_data,
             can_manage_registration_invitations,
-            change_draft_invitation,
+            can_create_registration_invitations,
             can_email_group_members,
             can_email_particulars,
             can_resend_registration_requests,
@@ -315,14 +320,14 @@ class Command(BaseCommand):
 
         AdvisoryBoard.permissions.set([
             can_manage_registration_invitations,
-            change_draft_invitation,
+            can_create_registration_invitations,
             can_attend_VGMs,
             can_view_statistics,
         ])
 
         EditorialAdmin.permissions.set([
             can_view_pool,
-            can_invite_Fellows,
+            can_invite_fellows,
             can_assign_submissions,
             can_do_plagiarism_checks,
             can_oversee_refereeing,
@@ -332,7 +337,9 @@ class Command(BaseCommand):
             can_view_production,
             can_view_timesheets,
             can_publish_accepted_submission,
+            can_draft_publication,
             can_view_all_funding_info,
+            can_create_grants,
             can_attend_VGMs,
             can_manage_reports,
             can_assign_production_supervisor,
@@ -372,17 +379,19 @@ class Command(BaseCommand):
         ])
 
         Ambassadors.permissions.set([
+            can_create_registration_invitations,
             can_manage_registration_invitations,
-            change_draft_invitation,
         ])
 
         JuniorAmbassadors.permissions.set([
-            can_draft_registration_invitations,
+            can_create_registration_invitations,
         ])
 
         ProductionSupervisors.permissions.set([
             can_assign_production_officer,
             can_take_decisions_related_to_proofs,
+            # can_draft_publication,
+            # can_create_grants,
             can_view_all_production_streams,
             can_run_proofs_by_authors,
             can_view_docs_scipost,
diff --git a/scipost/management/commands/create_contributors.py b/scipost/management/commands/create_contributors.py
new file mode 100644
index 0000000000000000000000000000000000000000..0e5882da3c1da92575e920d1528a35b11d933536
--- /dev/null
+++ b/scipost/management/commands/create_contributors.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from scipost import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Contributor objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Contributors to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_contributors(kwargs['number'])
+
+    def create_contributors(self, n):
+        factories.ContributorFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Contributors.'.format(n=n)))
diff --git a/scipost/management/commands/create_remarks.py b/scipost/management/commands/create_remarks.py
new file mode 100644
index 0000000000000000000000000000000000000000..0bb05534b9ecfefe79aa31e82adb0a9f97407f82
--- /dev/null
+++ b/scipost/management/commands/create_remarks.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from scipost import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Remark objects (related to a Submission) using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Remarks to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_remarks(kwargs['number'])
+
+    def create_remarks(self, n):
+        factories.SubmissionRemarkFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Remarks.'.format(n=n)))
diff --git a/scipost/management/commands/export_contributors.py b/scipost/management/commands/export_contributors.py
index 153ace0457f0ce289e232cecbe259e0a62933075..b65133354c429690e75b3cf9427f88a0173a9252 100644
--- a/scipost/management/commands/export_contributors.py
+++ b/scipost/management/commands/export_contributors.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import csv
 from datetime import datetime
 
diff --git a/scipost/management/commands/populate_db.py b/scipost/management/commands/populate_db.py
index 4efe19d85887e5a79782a2b8defb1919286e049f..048521014d7f05c245d84666c82c8aebf48ae55e 100644
--- a/scipost/management/commands/populate_db.py
+++ b/scipost/management/commands/populate_db.py
@@ -1,34 +1,15 @@
-from django.core.management.base import BaseCommand
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
 
-from commentaries.factories import VettedCommentaryFactory
-from comments.factories import CommentaryCommentFactory, SubmissionCommentFactory,\
-                               ThesislinkCommentFactory
-from scipost.factories import SubmissionRemarkFactory
-from journals.factories import JournalFactory, VolumeFactory, IssueFactory, PublicationFactory
-from news.factories import NewsItemFactory
-from submissions.factories import EICassignedSubmissionFactory
-from theses.factories import VettedThesisLinkFactory
+from django.core.management.base import BaseCommand
 
-from ...factories import ContributorFactory, EditorialCollegeFactory,\
-                         EditorialCollegeFellowshipFactory
+from comments.factories import CommentaryCommentFactory,\
+                               ThesislinkCommentFactory, ReplyCommentFactory
 
 
 class Command(BaseCommand):
     def add_arguments(self, parser):
-        parser.add_argument(
-            '--news',
-            action='store_true',
-            dest='news',
-            default=False,
-            help='Add NewsItems',
-        )
-        parser.add_argument(
-            '--commentaries',
-            action='store_true',
-            dest='commentaries',
-            default=False,
-            help='Add 5 Commentaries',
-        )
         parser.add_argument(
             '--comments',
             action='store_true',
@@ -36,147 +17,13 @@ class Command(BaseCommand):
             default=False,
             help='Add 10 Comments',
         )
-        parser.add_argument(
-            '--contributor',
-            action='store_true',
-            dest='contributor',
-            default=False,
-            help='Add 5 Contributors',
-        )
-        parser.add_argument(
-            '--college',
-            action='store_true',
-            dest='editorial-college',
-            default=False,
-            help='Add 5 Editorial College and Fellows (Contributors required)',
-        )
-        parser.add_argument(
-            '--pubset',
-            action='store_true',
-            dest='pubset',
-            default=False,
-            help='Add 5 Issues, Volumes and Journals',
-        )
-        parser.add_argument(
-            '--issues',
-            action='store_true',
-            dest='issues',
-            default=False,
-            help='Add 5 Issues',
-        )
-        parser.add_argument(
-            '--submissions',
-            action='store_true',
-            dest='submissions',
-            default=False,
-            help='Add 5 new submissions status EIC assigned',
-        )
-        parser.add_argument(
-            '--publications',
-            action='store_true',
-            dest='publications',
-            default=False,
-            help='Add 5 Publications (includes --issues action)',
-        )
-        parser.add_argument(
-            '--remarks',
-            action='store_true',
-            dest='remarks',
-            default=False,
-            help='Add 5 new Remarks linked to Submissions',
-        )
-        parser.add_argument(
-            '--theses',
-            action='store_true',
-            dest='theses',
-            default=False,
-            help='Add 5 ThesisLinks',
-        )
-        parser.add_argument(
-            '--all',
-            action='store_true',
-            dest='all',
-            default=False,
-            help='Add all available',
-        )
 
     def handle(self, *args, **kwargs):
-        if kwargs['contributor'] or kwargs['all']:
-            n = 5
-            if kwargs['all']:
-                n += 10
-            self.create_contributors(n)
-        if kwargs['commentaries'] or kwargs['all']:
-            self.create_commentaries()
-        if kwargs['comments'] or kwargs['all']:
+        if kwargs['comments']:
             self.create_comments()
-        if kwargs['editorial-college'] or kwargs['all']:
-            self.create_editorial_college()
-            self.create_editorial_college_fellows()
-        if kwargs['news'] or kwargs['all']:
-            self.create_news_items()
-        if kwargs['submissions'] or kwargs['all']:
-            self.create_submissions()
-        if kwargs['pubset'] or kwargs['all']:
-            self.create_pubset()
-        if kwargs['issues'] or kwargs['all']:
-            self.create_issues()
-        if kwargs['publications'] or kwargs['all']:
-            self.create_publications()
-        if kwargs['remarks'] or kwargs['all']:
-            self.create_remarks()
-        if kwargs['theses'] or kwargs['all']:
-            self.create_theses()
-
-    def create_contributors(self, n=5):
-        ContributorFactory.create_batch(n)
-        self.stdout.write(self.style.SUCCESS('Successfully created %i Contributors.' % n))
-
-    def create_commentaries(self):
-        VettedCommentaryFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Commentaries.'))
 
     def create_comments(self):
         CommentaryCommentFactory.create_batch(3)
-        SubmissionCommentFactory.create_batch(4)
+        ReplyCommentFactory.create_batch(2)
         ThesislinkCommentFactory.create_batch(3)
         self.stdout.write(self.style.SUCCESS('Successfully created 10 Comments.'))
-
-    def create_editorial_college(self):
-        EditorialCollegeFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Editorial College\'s.'))
-
-    def create_editorial_college_fellows(self):
-        EditorialCollegeFellowshipFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Editorial College Fellows.'))
-
-    def create_news_items(self):
-        NewsItemFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 News items.'))
-
-    def create_submissions(self):
-        EICassignedSubmissionFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Submissions.'))
-
-    def create_pubset(self):
-        VolumeFactory.create_batch(5)
-        IssueFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS(
-                          'Successfully created 5x {Journal, Volume and Issue}.'))
-
-    def create_issues(self):
-        IssueFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS(
-                          'Successfully created 5 Issue.'))
-
-    def create_publications(self):
-        PublicationFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Publications.'))
-
-    def create_remarks(self):
-        SubmissionRemarkFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 Remarks.'))
-
-    def create_theses(self):
-        VettedThesisLinkFactory.create_batch(5)
-        self.stdout.write(self.style.SUCCESS('Successfully created 5 ThesisLinks.'))
diff --git a/scipost/management/commands/setup_contributor.py b/scipost/management/commands/setup_contributor.py
index 26e2d1a3ac72011e41781b943cedfd7e015b137d..f4b98c3abb3404ebc1730601a1417ecc482dfc82 100644
--- a/scipost/management/commands/setup_contributor.py
+++ b/scipost/management/commands/setup_contributor.py
@@ -1,6 +1,11 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.management.base import BaseCommand
 from django.contrib.auth.models import User
 
+from ...constants import NORMAL_CONTRIBUTOR
 from ...models import Contributor
 
 
@@ -12,7 +17,7 @@ class Command(BaseCommand):
 
     def create_contributor(self, username):
         user = User.objects.get(username=username)
-        contributor = Contributor(user=user, status=1, title="MR")
+        contributor = Contributor(user=user, status=NORMAL_CONTRIBUTOR, title="MR")
         contributor.vetted_by = contributor
         contributor.save()
 
diff --git a/scipost/managers.py b/scipost/managers.py
index 72557dcef9879842d124f5960986d443cdc913b0..df5a60d44e538eeee8c77149556af1af3f07822e 100644
--- a/scipost/managers.py
+++ b/scipost/managers.py
@@ -1,9 +1,12 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.db.models import Q
 from django.utils import timezone
 
-from .constants import CONTRIBUTOR_NORMAL, INVITATION_EDITORIAL_FELLOW,\
-                       CONTRIBUTOR_NEWLY_REGISTERED, AUTHORSHIP_CLAIM_PENDING
+from .constants import NORMAL_CONTRIBUTOR, NEWLY_REGISTERED, AUTHORSHIP_CLAIM_PENDING
 
 today = timezone.now().date()
 
@@ -20,42 +23,23 @@ class FellowManager(models.Manager):
 
 class ContributorQuerySet(models.QuerySet):
     def active(self):
-        return self.filter(user__is_active=True, status=CONTRIBUTOR_NORMAL)
+        return self.filter(user__is_active=True, status=NORMAL_CONTRIBUTOR)
 
     def available(self):
         return self.exclude(
             unavailability_periods__start__lte=today,
-            unavailability_periods__end__lte=today)
+            unavailability_periods__end__gte=today)
 
     def awaiting_validation(self):
-        return self.filter(user__is_active=False, status=CONTRIBUTOR_NEWLY_REGISTERED)
+        return self.filter(user__is_active=False, status=NEWLY_REGISTERED)
 
     def awaiting_vetting(self):
-        return self.filter(user__is_active=True, status=CONTRIBUTOR_NEWLY_REGISTERED)
+        return self.filter(user__is_active=True, status=NEWLY_REGISTERED)
 
     def fellows(self):
         return self.filter(user__groups__name='Editorial College')
 
 
-class RegistrationInvitationManager(models.Manager):
-    def pending_invited_fellows(self):
-        return self.filter(invitation_type=INVITATION_EDITORIAL_FELLOW,
-                           responded=False, declined=False)
-
-    def declined_invited_fellows(self):
-        return self.filter(invitation_type=INVITATION_EDITORIAL_FELLOW,
-                           responded=False, declined=True)
-
-    def declined(self):
-        return self.filter(responded=True, declined=True)
-
-    def pending_response(self):
-        return self.filter(responded=False)
-
-    def declined_or_without_response(self):
-        return self.filter(Q(responded=True, declined=True) | Q(responded=False))
-
-
 class UnavailabilityPeriodManager(models.Manager):
     def today(self):
         return self.filter(start__lte=today, end__gte=today)
diff --git a/scipost/migrations/0005_auto_20180218_1556.py b/scipost/migrations/0005_auto_20180218_1556.py
new file mode 100644
index 0000000000000000000000000000000000000000..5ac3f68be6966a91551ed637d0e0bd7f91bce982
--- /dev/null
+++ b/scipost/migrations/0005_auto_20180218_1556.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-18 14:56
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0004_auto_20180212_1932'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='first_name',
+            field=models.CharField(max_length=30),
+        ),
+        migrations.AlterField(
+            model_name='registrationinvitation',
+            name='last_name',
+            field=models.CharField(max_length=30),
+        ),
+    ]
diff --git a/scipost/migrations/0006_auto_20180220_2120.py b/scipost/migrations/0006_auto_20180220_2120.py
new file mode 100644
index 0000000000000000000000000000000000000000..7c8976a81ffaea9d2f3ad458e975ec959a1afb38
--- /dev/null
+++ b/scipost/migrations/0006_auto_20180220_2120.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-20 20:20
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0005_auto_20180218_1556'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='registrationinvitation',
+            options={},
+        ),
+    ]
diff --git a/scipost/migrations/0007_auto_20180313_1741.py b/scipost/migrations/0007_auto_20180313_1741.py
new file mode 100644
index 0000000000000000000000000000000000000000..52458aa43d658456e23bae9031676ec20541d170
--- /dev/null
+++ b/scipost/migrations/0007_auto_20180313_1741.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-13 16:41
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0006_auto_20180220_2120'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='orcid_id',
+            field=models.CharField(blank=True, max_length=20, validators=[django.core.validators.RegexValidator('^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$', 'Please follow the ORCID format, e.g.: 0000-0001-2345-6789')], verbose_name='ORCID id'),
+        ),
+    ]
diff --git a/scipost/migrations/0007_auto_20180314_1502.py b/scipost/migrations/0007_auto_20180314_1502.py
new file mode 100644
index 0000000000000000000000000000000000000000..6f5d6e3e9487a5660baf324f47590992396fcddc
--- /dev/null
+++ b/scipost/migrations/0007_auto_20180314_1502.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-14 14:02
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0006_auto_20180220_2120'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='orcid_id',
+            field=models.CharField(blank=True, max_length=20, validators=[django.core.validators.RegexValidator('^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$', 'Please follow the ORCID format, e.g.: 0000-0001-2345-6789')], verbose_name='ORCID id'),
+        ),
+    ]
diff --git a/scipost/migrations/0007_auto_20180318_1336.py b/scipost/migrations/0007_auto_20180318_1336.py
new file mode 100644
index 0000000000000000000000000000000000000000..26897d9aea5bd5ded92719f9da74421d07ec4cbe
--- /dev/null
+++ b/scipost/migrations/0007_auto_20180318_1336.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-18 12:36
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0006_auto_20180220_2120'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='orcid_id',
+            field=models.CharField(blank=True, max_length=20, validators=[django.core.validators.RegexValidator('^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$', 'Please follow the ORCID format, e.g.: 0000-0001-2345-6789')], verbose_name='ORCID id'),
+        ),
+    ]
diff --git a/scipost/migrations/0008_merge_20180322_1031.py b/scipost/migrations/0008_merge_20180322_1031.py
new file mode 100644
index 0000000000000000000000000000000000000000..941ff01d148f5afa4e40a7d1156cc2f99cf3d668
--- /dev/null
+++ b/scipost/migrations/0008_merge_20180322_1031.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-22 09:31
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0007_auto_20180318_1336'),
+        ('scipost', '0007_auto_20180314_1502'),
+    ]
+
+    operations = [
+    ]
diff --git a/scipost/migrations/0009_auto_20180327_1933.py b/scipost/migrations/0009_auto_20180327_1933.py
new file mode 100644
index 0000000000000000000000000000000000000000..1b55b8e1d8d20ef62950bab2d59a84dfba59ded4
--- /dev/null
+++ b/scipost/migrations/0009_auto_20180327_1933.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-27 17:33
+from __future__ import unicode_literals
+
+import django.core.validators
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0008_merge_20180322_1031'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='contributor',
+            name='orcid_id',
+            field=models.CharField(blank=True, max_length=20, validators=[django.core.validators.RegexValidator('^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{3}[0-9X]{1}$', 'Please follow the ORCID format, e.g.: 0000-0001-2345-6789')], verbose_name='ORCID id'),
+        ),
+    ]
diff --git a/scipost/migrations/0009_merge_20180322_2120.py b/scipost/migrations/0009_merge_20180322_2120.py
new file mode 100644
index 0000000000000000000000000000000000000000..c7b0830ad929cb1ffaf78812aff34ffae22d391a
--- /dev/null
+++ b/scipost/migrations/0009_merge_20180322_2120.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-22 20:20
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0007_auto_20180313_1741'),
+        ('scipost', '0008_merge_20180322_1031'),
+    ]
+
+    operations = [
+    ]
diff --git a/scipost/migrations/0010_merge_20180327_2022.py b/scipost/migrations/0010_merge_20180327_2022.py
new file mode 100644
index 0000000000000000000000000000000000000000..ce2c9eee3acac4d66568e54725387b5f488b43f4
--- /dev/null
+++ b/scipost/migrations/0010_merge_20180327_2022.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-27 18:22
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0009_merge_20180322_2120'),
+        ('scipost', '0009_auto_20180327_1933'),
+    ]
+
+    operations = [
+    ]
diff --git a/scipost/migrations/0011_contributor_new_status.py b/scipost/migrations/0011_contributor_new_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..7ad51995a44018ac139414bc2d66744c5dfd611b
--- /dev/null
+++ b/scipost/migrations/0011_contributor_new_status.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 20:12
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0010_merge_20180327_2022'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='contributor',
+            name='new_status',
+            field=models.CharField(choices=[('newly_registered', 'Newly registered'), ('normal', 'Normal user'), ('no_scientist', 'Not a professional scientist'), ('double_account', 'Other account already exists'), ('out_of_academia', 'Out of academia'), ('barred', 'Barred from SciPost'), ('disabled', 'Account disabled'), ('deceased', 'Person deceased')], default='newly_registered', max_length=16),
+        ),
+    ]
diff --git a/scipost/migrations/0012_auto_20180414_2212.py b/scipost/migrations/0012_auto_20180414_2212.py
new file mode 100644
index 0000000000000000000000000000000000000000..c3faed8fd33b8ffbd9a04432e42a627949b3b9ab
--- /dev/null
+++ b/scipost/migrations/0012_auto_20180414_2212.py
@@ -0,0 +1,26 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 20:12
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+def update_contributor_status_field(apps, schema_editor):
+    Contributor = apps.get_model('scipost', 'Contributor')
+
+    Contributor.objects.filter(status=-4).update(new_status='disabled')
+    Contributor.objects.filter(status=-3).update(new_status='barred')
+    Contributor.objects.filter(status=-2).update(new_status='double_account')
+    Contributor.objects.filter(status=-1).update(new_status='no_scientist')
+    Contributor.objects.filter(status=0).update(new_status='newly_registered')
+    Contributor.objects.filter(status=1).update(new_status='normal')
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0011_contributor_new_status'),
+    ]
+
+    operations = [
+        migrations.RunPython(update_contributor_status_field)
+    ]
diff --git a/scipost/migrations/0013_remove_contributor_status.py b/scipost/migrations/0013_remove_contributor_status.py
new file mode 100644
index 0000000000000000000000000000000000000000..7dfb7cc212142c45870d0fbea11d73a5f972f7cc
--- /dev/null
+++ b/scipost/migrations/0013_remove_contributor_status.py
@@ -0,0 +1,19 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 20:18
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0012_auto_20180414_2212'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='contributor',
+            name='status',
+        ),
+    ]
diff --git a/scipost/migrations/0014_auto_20180414_2218.py b/scipost/migrations/0014_auto_20180414_2218.py
new file mode 100644
index 0000000000000000000000000000000000000000..d2782391c11e94bc712aa0c98de6c7a3ee192a3c
--- /dev/null
+++ b/scipost/migrations/0014_auto_20180414_2218.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-04-14 20:18
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('scipost', '0013_remove_contributor_status'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='contributor',
+            old_name='new_status',
+            new_name='status',
+        ),
+    ]
diff --git a/scipost/mixins.py b/scipost/mixins.py
index 49dec74f4c44887c0667fbfb9caebf1128e4739b..3e9b2df5a6263534b493f92f153afc4612f22410 100644
--- a/scipost/mixins.py
+++ b/scipost/mixins.py
@@ -1,15 +1,25 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
+
 from .paginator import SciPostPaginator
 
 
-class PaginationMixin(object):
+class PermissionsMixin(LoginRequiredMixin, PermissionRequiredMixin):
+    pass
+
+
+class PaginationMixin:
     """
     Mixin for generic class-based views (e.g. django.views.generic.ListView)
     """
     paginator_class = SciPostPaginator
 
-    # def get_paginator(self, queryset, per_page, orphans=0, allow_empty_first_page=True):
-    #     # Pass the request object to the paginator to keep the parameters in the
-    #     # url querystring ("?page=2&old_param=...")
-    #     request = self.request
-    #     return self.paginator_class(queryset, per_page, orphans=orphans,
-    #                                 allow_empty_first_page=allow_empty_first_page, request=request)
+
+class RequestViewMixin:
+    def get_form_kwargs(self):
+        kwargs = super().get_form_kwargs()
+        kwargs['request'] = self.request
+        return kwargs
diff --git a/scipost/models.py b/scipost/models.py
index b217d78e78b1c207bbb7cb6aab19ae709dc0438d..d5bc608c42a3a3d4eca6b37aab37128958c259d9 100644
--- a/scipost/models.py
+++ b/scipost/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 import hashlib
 import random
@@ -10,41 +14,40 @@ from django.contrib.postgres.fields import ArrayField
 from django.db import models
 from django.utils import timezone
 
-from .behaviors import TimeStampedModel
-from .constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS,\
-                       subject_areas_dict, CONTRIBUTOR_STATUS, TITLE_CHOICES,\
-                       INVITATION_STYLE, INVITATION_TYPE,\
-                       INVITATION_CONTRIBUTOR, INVITATION_FORMAL,\
-                       AUTHORSHIP_CLAIM_PENDING, AUTHORSHIP_CLAIM_STATUS,\
-                       CONTRIBUTOR_NEWLY_REGISTERED
+from .behaviors import TimeStampedModel, orcid_validator
+from .constants import (
+    SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS, subject_areas_dict, DISABLED,
+    TITLE_CHOICES, INVITATION_STYLE, INVITATION_TYPE, INVITATION_CONTRIBUTOR, INVITATION_FORMAL,
+    AUTHORSHIP_CLAIM_PENDING, AUTHORSHIP_CLAIM_STATUS, CONTRIBUTOR_STATUSES, NEWLY_REGISTERED)
 from .fields import ChoiceArrayField
-from .managers import FellowManager, ContributorQuerySet, RegistrationInvitationManager,\
-                      UnavailabilityPeriodManager, AuthorshipClaimQuerySet
+from .managers import (
+    FellowManager, ContributorQuerySet, UnavailabilityPeriodManager, AuthorshipClaimQuerySet)
 
 today = timezone.now().date()
 
 
 def get_sentinel_user():
-    '''
-    Temporary fix: eventually the 'to-be-removed-Contributor' should be
-    status: "deactivated" and anonymized.
+    """Temporary fix to be able to delete Contributor instances.
+
+    Eventually the 'to-be-removed-Contributor' should be status: "deactivated" and anonymized.
     Fallback user for models relying on Contributor that is being deleted.
-    '''
+    """
     user, __ = get_user_model().objects.get_or_create(username='deleted')
-    return Contributor.objects.get_or_create(status=-4, user=user)[0]
+    return Contributor.objects.get_or_create(status=DISABLED, user=user)[0]
 
 
 class Contributor(models.Model):
-    """
+    """A Contributor is an academic extention of the User model.
+
     All *science* users of SciPost are Contributors.
     username, password, email, first_name and last_name are inherited from User.
     """
+
     user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.PROTECT, unique=True)
     invitation_key = models.CharField(max_length=40, blank=True)
     activation_key = models.CharField(max_length=40, blank=True)
     key_expires = models.DateTimeField(default=timezone.now)
-    status = models.SmallIntegerField(default=CONTRIBUTOR_NEWLY_REGISTERED,
-                                      choices=CONTRIBUTOR_STATUS)
+    status = models.CharField(max_length=16, choices=CONTRIBUTOR_STATUSES, default=NEWLY_REGISTERED)
     title = models.CharField(max_length=4, choices=TITLE_CHOICES)
     discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES,
                                   default='physics', verbose_name='Main discipline')
@@ -52,17 +55,13 @@ class Contributor(models.Model):
         models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS),
         blank=True, null=True)
     orcid_id = models.CharField(max_length=20, verbose_name="ORCID id",
-                                blank=True)
-    address = models.CharField(max_length=1000, verbose_name="address",
-                               blank=True)
-    personalwebpage = models.URLField(verbose_name='personal web page',
-                                      blank=True)
+                                blank=True, validators=[orcid_validator])
+    address = models.CharField(max_length=1000, verbose_name="address", blank=True)
+    personalwebpage = models.URLField(verbose_name='personal web page', blank=True)
     vetted_by = models.ForeignKey('self', on_delete=models.SET(get_sentinel_user),
-                                  related_name="contrib_vetted_by",
-                                  blank=True, null=True)
+                                  related_name="contrib_vetted_by", blank=True, null=True)
     accepts_SciPost_emails = models.BooleanField(
-        default=True,
-        verbose_name="I accept to receive SciPost emails")
+        default=True, verbose_name="I accept to receive SciPost emails")
 
     objects = ContributorQuerySet.as_manager()
 
@@ -70,48 +69,50 @@ class Contributor(models.Model):
         return '%s, %s' % (self.user.last_name, self.user.first_name)
 
     def save(self, *args, **kwargs):
+        """Generate new activitation key if not set."""
         if not self.activation_key:
             self.generate_key()
         return super().save(*args, **kwargs)
 
     def get_absolute_url(self):
+        """Return public information page url."""
         return reverse('scipost:contributor_info', args=(self.id,))
 
-    @property
-    def get_formal_display(self):
-        return '%s %s %s' % (self.get_title_display(), self.user.first_name, self.user.last_name)
-
     @property
     def is_currently_available(self):
+        """Check if Contributor is currently not marked as unavailable."""
         return not self.unavailability_periods.today().exists()
 
     def is_EdCol_Admin(self):
+        """Check if Contributor is an Editorial Administrator."""
         return (self.user.groups.filter(name='Editorial Administrators').exists()
                 or self.user.is_superuser)
 
     def is_SP_Admin(self):
+        """Check if Contributor is a SciPost Administrator."""
         return (self.user.groups.filter(name='SciPost Administrators').exists()
                 or self.user.is_superuser)
 
     def is_MEC(self):
+        """Check if Contributor is a member of the Editorial College."""
         return self.fellowships.active().exists() or self.user.is_superuser
 
     def is_VE(self):
+        """Check if Contributor is a Vetting Editor."""
         return (self.user.groups.filter(name='Vetting Editors').exists()
                 or self.user.is_superuser)
 
     def generate_key(self, feed=''):
-        """
-        Generate and save a new activation_key for the contributor, given a certain feed.
-        """
+        """Generate a new activation_key for the contributor, given a certain feed."""
         for i in range(5):
             feed += random.choice(string.ascii_letters)
         feed = feed.encode('utf8')
         salt = self.user.username.encode('utf8')
-        self.activation_key = hashlib.sha1(salt+salt).hexdigest()
+        self.activation_key = hashlib.sha1(salt + salt).hexdigest()
         self.key_expires = datetime.datetime.now() + datetime.timedelta(days=2)
 
     def expertises_as_string(self):
+        """Return joined expertises."""
         if self.expertises:
             return ', '.join([subject_areas_dict[exp].lower() for exp in self.expertises])
         return ''
@@ -189,11 +190,11 @@ class DraftInvitation(models.Model):
 
 class RegistrationInvitation(models.Model):
     """
-    Invitation to particular persons for registration
+    Deprecated: Use the `invitations` app
     """
     title = models.CharField(max_length=4, choices=TITLE_CHOICES)
-    first_name = models.CharField(max_length=30, default='')
-    last_name = models.CharField(max_length=30, default='')
+    first_name = models.CharField(max_length=30)
+    last_name = models.CharField(max_length=30)
     email = models.EmailField()
     invitation_type = models.CharField(max_length=2, choices=INVITATION_TYPE,
                                        default=INVITATION_CONTRIBUTOR)
@@ -210,7 +211,7 @@ class RegistrationInvitation(models.Model):
     invitation_key = models.CharField(max_length=40, unique=True)
     key_expires = models.DateTimeField(default=timezone.now)
     date_sent = models.DateTimeField(default=timezone.now)
-    invited_by = models.ForeignKey(Contributor,
+    invited_by = models.ForeignKey('scipost.Contributor',
                                    on_delete=models.CASCADE,
                                    blank=True, null=True)
     nr_reminders = models.PositiveSmallIntegerField(default=0)
@@ -218,29 +219,14 @@ class RegistrationInvitation(models.Model):
     responded = models.BooleanField(default=False)
     declined = models.BooleanField(default=False)
 
-    objects = RegistrationInvitationManager()
-
-    class Meta:
-        ordering = ['last_name']
-
     def __str__(self):
-        return (self.first_name + ' ' + self.last_name
-                + ' on ' + self.date_sent.strftime("%Y-%m-%d"))
-
-    def refresh_keys(self, force_new_key=False):
-        # Generate email activation key and link
-        if not self.invitation_key or force_new_key:
-            salt = ""
-            for i in range(5):
-                salt = salt + random.choice(string.ascii_letters)
-            salt = salt.encode('utf8')
-            invitationsalt = self.last_name.encode('utf8')
-            self.invitation_key = hashlib.sha1(salt + invitationsalt).hexdigest()
-        self.key_expires = timezone.now() + datetime.timedelta(days=365)
-        self.save()
+        return 'DEPRECATED'
 
 
 class CitationNotification(models.Model):
+    """
+    Deprecated: Use the `invitations` app
+    """
     contributor = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE)
     cited_in_submission = models.ForeignKey('submissions.Submission',
                                             on_delete=models.CASCADE,
@@ -250,16 +236,6 @@ class CitationNotification(models.Model):
                                              blank=True, null=True)
     processed = models.BooleanField(default=False)
 
-    def __str__(self):
-        text = str(self.contributor) + ', cited in '
-        if self.cited_in_submission:
-            text += self.cited_in_submission.arxiv_identifier_w_vn_nr
-        elif self.cited_in_publication:
-            text += self.cited_in_publication.citation()
-        if self.processed:
-            text += ' (processed)'
-        return text
-
 
 class AuthorshipClaim(models.Model):
     claimant = models.ForeignKey('scipost.Contributor',
diff --git a/scipost/paginator.py b/scipost/paginator.py
index dc253f22e00b765ea1f8fc2b8000417215ad8e0f..14cb0fb519c0cf1c5f329469b712b5c78fec3e1a 100644
--- a/scipost/paginator.py
+++ b/scipost/paginator.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.paginator import Paginator, Page
 
 PAGE_RANGE_DISPLAYED = 10
diff --git a/scipost/permissions.py b/scipost/permissions.py
index a9a936925fa6dc6560fc94c8f4d3340c2b9e6cff..65d3a751612e670be7537e23c06e328d91bd439a 100644
--- a/scipost/permissions.py
+++ b/scipost/permissions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 
 def is_tester(user):
     """
diff --git a/scipost/services.py b/scipost/services.py
index 908f731778c2fed20ab70b253a88a3819e6d2acc..e74565d481798aa827eb1862056749baaa0bf4ad 100644
--- a/scipost/services.py
+++ b/scipost/services.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # Module for making external api calls as needed in the submissions cycle
 import feedparser
 import requests
@@ -41,18 +45,18 @@ class DOICaller:
 
     def _format_data(self):
         data = self._crossref_data
-        title = data['title'][0]
+        title = data.get('title', [])[0]
 
         # author_list is given as a comma separated list of names on the relevant models
         author_list = []
-        for author in data['author']:
+        for author in data.get('author', []):
             try:
                 author_list.append('{} {}'.format(author['given'], author['family']))
             except KeyError:
                 author_list.append(author['name'])
         author_list = ', '.join(author_list)
 
-        journal = data['container-title'][0]
+        journal = data.get('container-title', [])[0]
         volume = data.get('volume', '')
         pages = self._get_pages(data)
         pub_date = self._get_pub_date(data)
@@ -129,7 +133,7 @@ class ArxivCaller:
     def _format_data(self):
         data = self._arxiv_data
         title = data['title']
-        author_list = [author['name'] for author in data['authors']]
+        author_list = [author['name'] for author in data.get('authors', [])]
         # author_list is given as a comma separated list of names on the relevant models (Commentary, Submission)
         author_list = ", ".join(author_list)
         arxiv_link = data['id']
diff --git a/scipost/static/fa/css/font-awesome.min.css b/scipost/static/fa/css/font-awesome.min.css
new file mode 100644
index 0000000000000000000000000000000000000000..540440ce89f2a408aa699b65100e18f15e0f09ca
--- /dev/null
+++ b/scipost/static/fa/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.7.0 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('../fonts/fontawesome-webfont.eot?v=4.7.0');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.7.0') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.7.0') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.7.0') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.7.0#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: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"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-vcard:before,.fa-address-card:before{content:"\f2bb"}.fa-vcard-o:before,.fa-address-card-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.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}
diff --git a/scipost/static/fa/fonts/FontAwesome.otf b/scipost/static/fa/fonts/FontAwesome.otf
new file mode 100644
index 0000000000000000000000000000000000000000..401ec0f36e4f73b8efa40bd6f604fe80d286db70
Binary files /dev/null and b/scipost/static/fa/fonts/FontAwesome.otf differ
diff --git a/scipost/static/fa/fonts/fontawesome-webfont.eot b/scipost/static/fa/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000000000000000000000000000000000000..e9f60ca953f93e35eab4108bd414bc02ddcf3928
Binary files /dev/null and b/scipost/static/fa/fonts/fontawesome-webfont.eot differ
diff --git a/scipost/static/fa/fonts/fontawesome-webfont.svg b/scipost/static/fa/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000000000000000000000000000000000000..855c845e538b65548118279537a04eab2ec6ef0d
--- /dev/null
+++ b/scipost/static/fa/fonts/fontawesome-webfont.svg
@@ -0,0 +1,2671 @@
+<?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>
+<metadata>
+Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016
+ By ,,,
+Copyright Dave Gandy 2016. All rights reserved.
+</metadata>
+<defs>
+<font id="FontAwesome" horiz-adv-x="1536" >
+  <font-face 
+    font-family="FontAwesome"
+    font-weight="400"
+    font-stretch="normal"
+    units-per-em="1792"
+    panose-1="0 0 0 0 0 0 0 0 0 0"
+    ascent="1536"
+    descent="-256"
+    bbox="-1.02083 -256.962 2304.6 1537.02"
+    underline-thickness="0"
+    underline-position="0"
+    unicode-range="U+0020-F500"
+  />
+<missing-glyph horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".notdef" horiz-adv-x="896" 
+d="M224 112h448v1312h-448v-1312zM112 0v1536h672v-1536h-672z" />
+    <glyph glyph-name=".null" horiz-adv-x="0" 
+ />
+    <glyph glyph-name="nonmarkingreturn" horiz-adv-x="597" 
+ />
+    <glyph glyph-name="space" unicode=" " horiz-adv-x="448" 
+ />
+    <glyph glyph-name="dieresis" unicode="&#xa8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="copyright" unicode="&#xa9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="registered" unicode="&#xae;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="acute" unicode="&#xb4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="AE" unicode="&#xc6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="Oslash" unicode="&#xd8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="trademark" unicode="&#x2122;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="infinity" unicode="&#x221e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="notequal" unicode="&#x2260;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="glass" 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 glyph-name="music" 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 glyph-name="search" 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 glyph-name="envelope" 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 glyph-name="heart" 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 glyph-name="star" 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 glyph-name="star_empty" 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 glyph-name="user" unicode="&#xf007;" horiz-adv-x="1280" 
+d="M1280 137q0 -109 -62.5 -187t-150.5 -78h-854q-88 0 -150.5 78t-62.5 187q0 85 8.5 160.5t31.5 152t58.5 131t94 89t134.5 34.5q131 -128 313 -128t313 128q76 0 134.5 -34.5t94 -89t58.5 -131t31.5 -152t8.5 -160.5zM1024 1024q0 -159 -112.5 -271.5t-271.5 -112.5
+t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="film" 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 glyph-name="th_large" 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 glyph-name="th" 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 glyph-name="th_list" 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 glyph-name="ok" 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 glyph-name="remove" 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 glyph-name="zoom_in" 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 glyph-name="zoom_out" 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
+" />
+    <glyph glyph-name="off" unicode="&#xf011;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5
+t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+    <glyph glyph-name="signal" unicode="&#xf012;" horiz-adv-x="1792" 
+d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="cog" unicode="&#xf013;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38
+q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13
+l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22
+q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+    <glyph glyph-name="trash" unicode="&#xf014;" horiz-adv-x="1408" 
+d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832
+q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="home" unicode="&#xf015;" horiz-adv-x="1664" 
+d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5
+l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+    <glyph glyph-name="file_alt" unicode="&#xf016;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+" />
+    <glyph glyph-name="time" unicode="&#xf017;" 
+d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="road" unicode="&#xf018;" horiz-adv-x="1920" 
+d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256
+q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+    <glyph glyph-name="download_alt" unicode="&#xf019;" horiz-adv-x="1664" 
+d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136
+q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+    <glyph glyph-name="download" unicode="&#xf01a;" 
+d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273
+t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="upload" unicode="&#xf01b;" 
+d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198
+t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="inbox" unicode="&#xf01c;" 
+d="M1023 576h316q-1 3 -2.5 8.5t-2.5 7.5l-212 496h-708l-212 -496q-1 -3 -2.5 -8.5t-2.5 -7.5h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552
+q25 -61 25 -123z" />
+    <glyph glyph-name="play_circle" unicode="&#xf01d;" 
+d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="repeat" unicode="&#xf01e;" 
+d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q15 0 25 -9
+l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+    <glyph glyph-name="refresh" unicode="&#xf021;" 
+d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117
+q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5
+q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="list_alt" unicode="&#xf022;" horiz-adv-x="1792" 
+d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z
+M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5
+t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="lock" unicode="&#xf023;" horiz-adv-x="1152" 
+d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="flag" unicode="&#xf024;" horiz-adv-x="1792" 
+d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48
+t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="headphones" unicode="&#xf025;" horiz-adv-x="1664" 
+d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78
+t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5
+t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+    <glyph glyph-name="volume_off" unicode="&#xf026;" horiz-adv-x="768" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="volume_down" unicode="&#xf027;" horiz-adv-x="1152" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+    <glyph glyph-name="volume_up" unicode="&#xf028;" horiz-adv-x="1664" 
+d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 36
+t12 56.5t-12 56.5t-29 36t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5
+t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289
+t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+    <glyph glyph-name="qrcode" unicode="&#xf029;" horiz-adv-x="1408" 
+d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z
+M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+    <glyph glyph-name="barcode" unicode="&#xf02a;" horiz-adv-x="1792" 
+d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z
+M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+    <glyph glyph-name="tag" unicode="&#xf02b;" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="tags" unicode="&#xf02c;" horiz-adv-x="1920" 
+d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5
+l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+    <glyph glyph-name="book" unicode="&#xf02d;" horiz-adv-x="1664" 
+d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23
+q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906
+q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5
+t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+    <glyph glyph-name="bookmark" unicode="&#xf02e;" horiz-adv-x="1280" 
+d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="print" unicode="&#xf02f;" horiz-adv-x="1664" 
+d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68
+v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+    <glyph glyph-name="camera" unicode="&#xf030;" horiz-adv-x="1920" 
+d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136
+q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="font" unicode="&#xf031;" horiz-adv-x="1664" 
+d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57
+q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -5 -0.5 -13.5t-0.5 -12.5q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5
+q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+    <glyph glyph-name="bold" unicode="&#xf032;" horiz-adv-x="1408" 
+d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142
+q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5
+t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68 -0.5t68 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5
+t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+    <glyph glyph-name="italic" unicode="&#xf033;" horiz-adv-x="1024" 
+d="M0 -126l17 85q22 7 61.5 16.5t72 19t59.5 23.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5
+q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+    <glyph glyph-name="text_height" unicode="&#xf034;" horiz-adv-x="1792" 
+d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2
+t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5
+q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+    <glyph glyph-name="text_width" unicode="&#xf035;" 
+d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1
+t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27
+q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5
+t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49
+t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+    <glyph glyph-name="align_left" unicode="&#xf036;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_center" unicode="&#xf037;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19
+h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_right" unicode="&#xf038;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="align_justify" unicode="&#xf039;" horiz-adv-x="1792" 
+d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45
+t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="list" unicode="&#xf03a;" horiz-adv-x="1792" 
+d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5
+t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344
+q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192
+q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_left" unicode="&#xf03b;" horiz-adv-x="1792" 
+d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="indent_right" unicode="&#xf03c;" horiz-adv-x="1792" 
+d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5
+t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088
+q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="facetime_video" unicode="&#xf03d;" horiz-adv-x="1792" 
+d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5
+q39 -17 39 -59z" />
+    <glyph glyph-name="picture" unicode="&#xf03e;" horiz-adv-x="1920" 
+d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216
+q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="pencil" unicode="&#xf040;" 
+d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38
+q53 0 91 -38l235 -234q37 -39 37 -91z" />
+    <glyph glyph-name="map_marker" unicode="&#xf041;" horiz-adv-x="1024" 
+d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+    <glyph glyph-name="adjust" unicode="&#xf042;" 
+d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="tint" unicode="&#xf043;" horiz-adv-x="1024" 
+d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362
+q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+    <glyph glyph-name="edit" unicode="&#xf044;" horiz-adv-x="1792" 
+d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92
+l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+    <glyph glyph-name="share" unicode="&#xf045;" horiz-adv-x="1664" 
+d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832
+q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5
+t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="check" unicode="&#xf046;" horiz-adv-x="1664" 
+d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832
+q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110
+q24 -24 24 -57t-24 -57z" />
+    <glyph glyph-name="move" unicode="&#xf047;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45
+t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="step_backward" unicode="&#xf048;" horiz-adv-x="1024" 
+d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19z" />
+    <glyph glyph-name="fast_backward" unicode="&#xf049;" horiz-adv-x="1792" 
+d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 10 13 19l710 710
+q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="backward" unicode="&#xf04a;" horiz-adv-x="1664" 
+d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q4 10 13 19z" />
+    <glyph glyph-name="play" unicode="&#xf04b;" horiz-adv-x="1408" 
+d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+    <glyph glyph-name="pause" unicode="&#xf04c;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="stop" unicode="&#xf04d;" 
+d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="forward" unicode="&#xf04e;" horiz-adv-x="1664" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="fast_forward" unicode="&#xf050;" horiz-adv-x="1792" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v710q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19l-710 -710
+q-19 -19 -32 -13t-13 32v710q-4 -10 -13 -19z" />
+    <glyph glyph-name="step_forward" unicode="&#xf051;" horiz-adv-x="1024" 
+d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q9 -9 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-4 -10 -13 -19z" />
+    <glyph glyph-name="eject" unicode="&#xf052;" horiz-adv-x="1538" 
+d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+    <glyph glyph-name="chevron_left" unicode="&#xf053;" horiz-adv-x="1280" 
+d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="chevron_right" unicode="&#xf054;" horiz-adv-x="1280" 
+d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+    <glyph glyph-name="plus_sign" unicode="&#xf055;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5
+t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="minus_sign" unicode="&#xf056;" 
+d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="remove_sign" unicode="&#xf057;" 
+d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19
+q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_sign" unicode="&#xf058;" 
+d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="question_sign" unicode="&#xf059;" 
+d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59
+q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="info_sign" unicode="&#xf05a;" 
+d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23
+t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="screenshot" unicode="&#xf05b;" 
+d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109
+q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143
+q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="remove_circle" unicode="&#xf05c;" 
+d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5
+t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ok_circle" unicode="&#xf05d;" 
+d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198
+t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ban_circle" unicode="&#xf05e;" 
+d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61
+t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+    <glyph glyph-name="arrow_left" unicode="&#xf060;" 
+d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5
+t32.5 -90.5z" />
+    <glyph glyph-name="arrow_right" unicode="&#xf061;" 
+d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+    <glyph glyph-name="arrow_up" unicode="&#xf062;" horiz-adv-x="1664" 
+d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651
+q37 -39 37 -91z" />
+    <glyph glyph-name="arrow_down" unicode="&#xf063;" horiz-adv-x="1664" 
+d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+    <glyph glyph-name="share_alt" unicode="&#xf064;" horiz-adv-x="1792" 
+d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22
+t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+    <glyph glyph-name="resize_full" unicode="&#xf065;" 
+d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332
+q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="resize_small" unicode="&#xf066;" 
+d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45
+t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+    <glyph glyph-name="plus" unicode="&#xf067;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="minus" unicode="&#xf068;" horiz-adv-x="1408" 
+d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="asterisk" unicode="&#xf069;" horiz-adv-x="1664" 
+d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154
+q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+    <glyph glyph-name="exclamation_sign" unicode="&#xf06a;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192
+q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+    <glyph glyph-name="gift" unicode="&#xf06b;" 
+d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320
+q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5
+t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="leaf" unicode="&#xf06c;" horiz-adv-x="1792" 
+d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268
+q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-43 0 -63.5 17.5t-45.5 59.5q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5
+t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+    <glyph glyph-name="fire" unicode="&#xf06d;" horiz-adv-x="1408" 
+d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1
+q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+    <glyph glyph-name="eye_open" unicode="&#xf06e;" horiz-adv-x="1792" 
+d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5
+t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+    <glyph glyph-name="eye_close" unicode="&#xf070;" horiz-adv-x="1792" 
+d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9
+q-106 -189 -316 -567t-315 -566l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5
+q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z
+" />
+    <glyph glyph-name="warning_sign" unicode="&#xf071;" horiz-adv-x="1792" 
+d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185
+q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+    <glyph glyph-name="plane" unicode="&#xf072;" horiz-adv-x="1408" 
+d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9
+q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+    <glyph glyph-name="calendar" unicode="&#xf073;" horiz-adv-x="1664" 
+d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z
+M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64
+q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47
+h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="random" unicode="&#xf074;" horiz-adv-x="1792" 
+d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1
+t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5
+v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111
+t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="comment" unicode="&#xf075;" horiz-adv-x="1792" 
+d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281
+q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="magnet" unicode="&#xf076;" 
+d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384
+q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="chevron_up" unicode="&#xf077;" horiz-adv-x="1792" 
+d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="chevron_down" unicode="&#xf078;" horiz-adv-x="1792" 
+d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+    <glyph glyph-name="retweet" unicode="&#xf079;" horiz-adv-x="1920" 
+d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -10 7 -21
+zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z
+" />
+    <glyph glyph-name="shopping_cart" unicode="&#xf07a;" horiz-adv-x="1664" 
+d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45
+t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="folder_close" unicode="&#xf07b;" horiz-adv-x="1664" 
+d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open" unicode="&#xf07c;" horiz-adv-x="1920" 
+d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5
+t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="resize_vertical" unicode="&#xf07d;" horiz-adv-x="768" 
+d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="resize_horizontal" unicode="&#xf07e;" horiz-adv-x="1792" 
+d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+    <glyph glyph-name="bar_chart" unicode="&#xf080;" horiz-adv-x="2048" 
+d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+    <glyph glyph-name="twitter_sign" unicode="&#xf081;" 
+d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4
+q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5
+t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="facebook_sign" unicode="&#xf082;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="camera_retro" unicode="&#xf083;" horiz-adv-x="1792" 
+d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5
+t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280
+q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="key" unicode="&#xf084;" horiz-adv-x="1792" 
+d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26
+l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5
+t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+    <glyph glyph-name="cogs" unicode="&#xf085;" horiz-adv-x="1920" 
+d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -11 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5
+l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7
+l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -8 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31
+q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20
+t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68
+q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70
+q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+    <glyph glyph-name="comments" unicode="&#xf086;" horiz-adv-x="1792" 
+d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224
+q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7
+q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+    <glyph glyph-name="thumbs_up_alt" unicode="&#xf087;" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5
+t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769
+q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128
+q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="thumbs_down_alt" unicode="&#xf088;" 
+d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 31 18 69q0 37 -17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5
+t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z
+M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5
+h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -73 49 -163z" />
+    <glyph glyph-name="star_half" unicode="&#xf089;" horiz-adv-x="896" 
+d="M832 1504v-1339l-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 41z" />
+    <glyph glyph-name="heart_empty" unicode="&#xf08a;" horiz-adv-x="1792" 
+d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559
+q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-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.5
+q224 0 351 -124t127 -344z" />
+    <glyph glyph-name="signout" unicode="&#xf08b;" horiz-adv-x="1664" 
+d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704
+q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+    <glyph glyph-name="linkedin_sign" unicode="&#xf08c;" 
+d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5
+q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="pushpin" unicode="&#xf08d;" horiz-adv-x="1152" 
+d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38
+t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+    <glyph glyph-name="external_link" unicode="&#xf08e;" horiz-adv-x="1792" 
+d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320
+q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="signin" unicode="&#xf090;" 
+d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5
+q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="trophy" unicode="&#xf091;" horiz-adv-x="1664" 
+d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91
+t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96
+q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="github_sign" unicode="&#xf092;" 
+d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4
+q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4
+t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16
+q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="upload_alt" unicode="&#xf093;" horiz-adv-x="1664" 
+d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92
+t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+    <glyph glyph-name="lemon" unicode="&#xf094;" 
+d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5
+q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44
+q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5
+q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -13 2 -25t3.5 -16.5t7.5 -20.5t8 -20q16 -40 25 -118.5t9 -136.5z" />
+    <glyph glyph-name="phone" unicode="&#xf095;" horiz-adv-x="1408" 
+d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -53 3.5t-57.5 12.5t-47 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-127 79 -264 216t-216 264q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47t-12.5 57.5t-3.5 53q0 92 51 186
+q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174q2 -1 19 -11.5t24 -14
+t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+    <glyph glyph-name="check_empty" unicode="&#xf096;" horiz-adv-x="1408" 
+d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="bookmark_empty" unicode="&#xf097;" horiz-adv-x="1280" 
+d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289
+q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+    <glyph glyph-name="phone_sign" unicode="&#xf098;" 
+d="M1280 343q0 11 -2 16t-18 16.5t-40.5 25t-47.5 26.5t-45.5 25t-28.5 15q-5 3 -19 13t-25 15t-21 5q-15 0 -36.5 -20.5t-39.5 -45t-38.5 -45t-33.5 -20.5q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170 126.5t-127 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5
+t-3.5 16.5q0 13 20.5 33.5t45 38.5t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5
+t320.5 -216.5q6 -2 30 -11t33 -12.5t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z
+" />
+    <glyph glyph-name="twitter" unicode="&#xf099;" horiz-adv-x="1664" 
+d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41
+q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+    <glyph glyph-name="facebook" unicode="&#xf09a;" horiz-adv-x="1024" 
+d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+    <glyph glyph-name="github" unicode="&#xf09b;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24
+q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5
+t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12
+q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z
+M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+    <glyph glyph-name="unlock" unicode="&#xf09c;" horiz-adv-x="1664" 
+d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5
+t316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="credit_card" unicode="&#xf09d;" horiz-adv-x="1920" 
+d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608
+q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+    <glyph glyph-name="rss" unicode="&#xf09e;" horiz-adv-x="1408" 
+d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5
+t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294
+q187 -186 294 -425.5t120 -501.5z" />
+    <glyph glyph-name="hdd" unicode="&#xf0a0;" 
+d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5
+h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75
+l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+    <glyph glyph-name="bullhorn" unicode="&#xf0a1;" horiz-adv-x="1792" 
+d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5
+t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+    <glyph glyph-name="bell" unicode="&#xf0a2;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z
+M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5
+t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="certificate" unicode="&#xf0a3;" 
+d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70
+l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70
+l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+    <glyph glyph-name="hand_right" unicode="&#xf0a4;" horiz-adv-x="1792" 
+d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106
+q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43
+q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5
+t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+    <glyph glyph-name="hand_left" unicode="&#xf0a5;" horiz-adv-x="1792" 
+d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-8 9 -12 14q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576q-50 0 -89 -38.5
+t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45z
+M1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128q0 122 81.5 189t206.5 67
+q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="hand_up" unicode="&#xf0a6;" 
+d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576
+q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5
+t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76
+q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+    <glyph glyph-name="hand_down" unicode="&#xf0a7;" 
+d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33
+t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580
+q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100
+q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+    <glyph glyph-name="circle_arrow_left" unicode="&#xf0a8;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_right" unicode="&#xf0a9;" 
+d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_up" unicode="&#xf0aa;" 
+d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="circle_arrow_down" unicode="&#xf0ab;" 
+d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="globe" unicode="&#xf0ac;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11
+q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 11t-9.5 10q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5
+q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5
+q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5
+t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-4 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3
+q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25
+q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5
+t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5
+t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10.5t17 -19.5q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21
+q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5
+q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3
+q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5
+t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q8 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5
+q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7
+q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+    <glyph glyph-name="wrench" unicode="&#xf0ad;" horiz-adv-x="1664" 
+d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5
+t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+    <glyph glyph-name="tasks" unicode="&#xf0ae;" horiz-adv-x="1792" 
+d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19
+t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="filter" unicode="&#xf0b0;" horiz-adv-x="1408" 
+d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+    <glyph glyph-name="briefcase" unicode="&#xf0b1;" horiz-adv-x="1792" 
+d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68
+t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="fullscreen" unicode="&#xf0b2;" 
+d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144
+l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z
+" />
+    <glyph glyph-name="group" unicode="&#xf0c0;" horiz-adv-x="1920" 
+d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75
+t75 -181zM1344 896q0 -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.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5
+t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+    <glyph glyph-name="link" unicode="&#xf0c1;" horiz-adv-x="1664" 
+d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26
+l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15
+t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207
+q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+    <glyph glyph-name="cloud" unicode="&#xf0c2;" horiz-adv-x="1920" 
+d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z
+" />
+    <glyph glyph-name="beaker" unicode="&#xf0c3;" horiz-adv-x="1664" 
+d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+    <glyph glyph-name="cut" unicode="&#xf0c4;" horiz-adv-x="1792" 
+d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84
+q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148
+q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108
+q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6
+q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+    <glyph glyph-name="copy" unicode="&#xf0c5;" horiz-adv-x="1792" 
+d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299
+h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+    <glyph glyph-name="paper_clip" unicode="&#xf0c6;" horiz-adv-x="1408" 
+d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181
+l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235
+z" />
+    <glyph glyph-name="save" unicode="&#xf0c7;" 
+d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5
+h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="sign_blank" unicode="&#xf0c8;" 
+d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="reorder" unicode="&#xf0c9;" 
+d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45
+t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ul" unicode="&#xf0ca;" horiz-adv-x="1792" 
+d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5
+t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z
+M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="ol" unicode="&#xf0cb;" horiz-adv-x="1792" 
+d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362
+q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5
+t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 121.5t0.5 121.5v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216
+q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+    <glyph glyph-name="strikethrough" unicode="&#xf0cc;" horiz-adv-x="1792" 
+d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 98 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6
+l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -56 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23
+l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+    <glyph glyph-name="underline" unicode="&#xf0cd;" 
+d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47
+q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41
+q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472
+q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+    <glyph glyph-name="table" unicode="&#xf0ce;" horiz-adv-x="1664" 
+d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23
+v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192
+q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192
+q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113
+z" />
+    <glyph glyph-name="magic" unicode="&#xf0d0;" horiz-adv-x="1664" 
+d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276
+l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+    <glyph glyph-name="truck" unicode="&#xf0d1;" horiz-adv-x="1792" 
+d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5
+t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38
+t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="pinterest" unicode="&#xf0d2;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134
+q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33
+q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="pinterest_sign" unicode="&#xf0d3;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5
+t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5
+t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+    <glyph glyph-name="google_plus_sign" unicode="&#xf0d4;" 
+d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585
+h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="google_plus" unicode="&#xf0d5;" horiz-adv-x="2304" 
+d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62
+q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+    <glyph glyph-name="money" unicode="&#xf0d6;" horiz-adv-x="1920" 
+d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384
+v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_down" unicode="&#xf0d7;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="caret_up" unicode="&#xf0d8;" horiz-adv-x="1024" 
+d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="caret_left" unicode="&#xf0d9;" horiz-adv-x="640" 
+d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+    <glyph glyph-name="caret_right" unicode="&#xf0da;" horiz-adv-x="640" 
+d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="columns" unicode="&#xf0db;" horiz-adv-x="1664" 
+d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="sort" unicode="&#xf0dc;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="sort_down" unicode="&#xf0dd;" horiz-adv-x="1024" 
+d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="sort_up" unicode="&#xf0de;" horiz-adv-x="1024" 
+d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+    <glyph glyph-name="envelope_alt" unicode="&#xf0e0;" horiz-adv-x="1792" 
+d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123
+q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+    <glyph glyph-name="linkedin" unicode="&#xf0e1;" 
+d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329
+q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+    <glyph glyph-name="undo" unicode="&#xf0e2;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+    <glyph glyph-name="legal" unicode="&#xf0e3;" horiz-adv-x="1792" 
+d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5
+t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14
+q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28
+q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+    <glyph glyph-name="dashboard" unicode="&#xf0e4;" horiz-adv-x="1792" 
+d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5
+t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5
+t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29
+q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="comment_alt" unicode="&#xf0e5;" horiz-adv-x="1792" 
+d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640
+q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5
+t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="comments_alt" unicode="&#xf0e6;" horiz-adv-x="1792" 
+d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257
+t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5
+t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129
+q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+    <glyph glyph-name="bolt" unicode="&#xf0e7;" horiz-adv-x="896" 
+d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+    <glyph glyph-name="sitemap" unicode="&#xf0e8;" horiz-adv-x="1792" 
+d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320
+q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="umbrella" unicode="&#xf0e9;" horiz-adv-x="1664" 
+d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97
+q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69
+q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+    <glyph glyph-name="paste" unicode="&#xf0ea;" horiz-adv-x="1792" 
+d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28
+h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+    <glyph glyph-name="light_bulb" unicode="&#xf0eb;" horiz-adv-x="1024" 
+d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134
+q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47
+q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5
+t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+    <glyph glyph-name="exchange" unicode="&#xf0ec;" horiz-adv-x="1792" 
+d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9
+q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+    <glyph glyph-name="cloud_download" unicode="&#xf0ed;" horiz-adv-x="1920" 
+d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="cloud_upload" unicode="&#xf0ee;" horiz-adv-x="1920" 
+d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088
+q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+    <glyph glyph-name="user_md" unicode="&#xf0f0;" horiz-adv-x="1408" 
+d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56
+t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68
+t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="stethoscope" unicode="&#xf0f1;" horiz-adv-x="1408" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48
+t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252
+t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="suitcase" unicode="&#xf0f2;" horiz-adv-x="1792" 
+d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66
+t66 -158z" />
+    <glyph glyph-name="bell_alt" unicode="&#xf0f3;" horiz-adv-x="1792" 
+d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5
+t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+    <glyph glyph-name="coffee" unicode="&#xf0f4;" horiz-adv-x="1920" 
+d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45
+t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="food" unicode="&#xf0f5;" horiz-adv-x="1408" 
+d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45
+t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="file_text_alt" unicode="&#xf0f6;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704
+q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+    <glyph glyph-name="building" unicode="&#xf0f7;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="hospital" unicode="&#xf0f8;" horiz-adv-x="1408" 
+d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z
+M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5
+t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320
+v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="ambulance" unicode="&#xf0f9;" horiz-adv-x="1920" 
+d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152
+q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="medkit" unicode="&#xf0fa;" horiz-adv-x="1792" 
+d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32
+q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="fighter_jet" unicode="&#xf0fb;" horiz-adv-x="1920" 
+d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96
+q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q128 -28 200 -52t80 -34z" />
+    <glyph glyph-name="beer" unicode="&#xf0fc;" horiz-adv-x="1664" 
+d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+    <glyph glyph-name="h_sign" unicode="&#xf0fd;" 
+d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="f0fe" unicode="&#xf0fe;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="double_angle_left" unicode="&#xf100;" horiz-adv-x="1024" 
+d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_right" unicode="&#xf101;" horiz-adv-x="1024" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23
+l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_up" unicode="&#xf102;" horiz-adv-x="1152" 
+d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393
+q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="double_angle_down" unicode="&#xf103;" horiz-adv-x="1152" 
+d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23
+t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_left" unicode="&#xf104;" horiz-adv-x="640" 
+d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="angle_right" unicode="&#xf105;" horiz-adv-x="640" 
+d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_up" unicode="&#xf106;" horiz-adv-x="1152" 
+d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+    <glyph glyph-name="angle_down" unicode="&#xf107;" horiz-adv-x="1152" 
+d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+    <glyph glyph-name="desktop" unicode="&#xf108;" horiz-adv-x="1920" 
+d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19
+t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="laptop" unicode="&#xf109;" horiz-adv-x="1920" 
+d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z
+M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+    <glyph glyph-name="tablet" unicode="&#xf10a;" horiz-adv-x="1152" 
+d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832
+q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="mobile_phone" unicode="&#xf10b;" horiz-adv-x="768" 
+d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136
+q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="circle_blank" unicode="&#xf10c;" 
+d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103
+t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="quote_left" unicode="&#xf10d;" horiz-adv-x="1664" 
+d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z
+M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="quote_right" unicode="&#xf10e;" horiz-adv-x="1664" 
+d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216
+v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+    <glyph glyph-name="spinner" unicode="&#xf110;" horiz-adv-x="1792" 
+d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z
+M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5
+q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="circle" unicode="&#xf111;" 
+d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="reply" unicode="&#xf112;" horiz-adv-x="1792" 
+d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19
+l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+    <glyph glyph-name="github_alt" unicode="&#xf113;" horiz-adv-x="1664" 
+d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320
+q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86
+t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218
+q0 -87 -27 -168q136 -160 136 -398z" />
+    <glyph glyph-name="folder_close_alt" unicode="&#xf114;" horiz-adv-x="1664" 
+d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320
+q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+    <glyph glyph-name="folder_open_alt" unicode="&#xf115;" horiz-adv-x="1920" 
+d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68
+v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z
+" />
+    <glyph glyph-name="expand_alt" unicode="&#xf116;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="collapse_alt" unicode="&#xf117;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="smile" unicode="&#xf118;" 
+d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5
+t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="frown" unicode="&#xf119;" 
+d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204
+t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="meh" unicode="&#xf11a;" 
+d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="gamepad" unicode="&#xf11b;" horiz-adv-x="1920" 
+d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150
+t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+    <glyph glyph-name="keyboard" unicode="&#xf11c;" horiz-adv-x="1920" 
+d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16
+h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16
+h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96
+q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896
+h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="flag_alt" unicode="&#xf11d;" horiz-adv-x="1792" 
+d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9
+h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102
+q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="flag_checkered" unicode="&#xf11e;" horiz-adv-x="1792" 
+d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2
+q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266
+q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8
+q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+    <glyph glyph-name="terminal" unicode="&#xf120;" horiz-adv-x="1664" 
+d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="code" unicode="&#xf121;" horiz-adv-x="1920" 
+d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5
+l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+    <glyph glyph-name="reply_all" unicode="&#xf122;" horiz-adv-x="1792" 
+d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1
+q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+    <glyph glyph-name="star_half_empty" unicode="&#xf123;" horiz-adv-x="1664" 
+d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5
+l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+    <glyph glyph-name="location_arrow" unicode="&#xf124;" horiz-adv-x="1408" 
+d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+    <glyph glyph-name="crop" unicode="&#xf125;" horiz-adv-x="1664" 
+d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="code_fork" unicode="&#xf126;" horiz-adv-x="1024" 
+d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5
+q-2 -287 -226 -414q-67 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497
+q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="unlink" unicode="&#xf127;" horiz-adv-x="1664" 
+d="M439 265l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320
+q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18
+l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9
+t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="question" unicode="&#xf128;" horiz-adv-x="1024" 
+d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5
+t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+    <glyph glyph-name="_279" unicode="&#xf129;" horiz-adv-x="640" 
+d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192
+q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="exclamation" unicode="&#xf12a;" horiz-adv-x="640" 
+d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+    <glyph glyph-name="superscript" unicode="&#xf12b;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1534 846v-206h-514l-3 27q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5
+t-65.5 -51.5t-30.5 -63h232v80h126z" />
+    <glyph glyph-name="subscript" unicode="&#xf12c;" 
+d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3q-1 -3 -2.5 -6.5t-3.5 -8t-3 -6.5q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109z
+M1536 -50v-206h-514l-4 27q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73
+h232v80h126z" />
+    <glyph glyph-name="_283" unicode="&#xf12d;" horiz-adv-x="1920" 
+d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+    <glyph glyph-name="puzzle_piece" unicode="&#xf12e;" horiz-adv-x="1664" 
+d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5
+t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89
+q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117
+q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+    <glyph glyph-name="microphone" unicode="&#xf130;" horiz-adv-x="1152" 
+d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5
+t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+    <glyph glyph-name="microphone_off" unicode="&#xf131;" horiz-adv-x="1408" 
+d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128
+q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23
+t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+    <glyph glyph-name="shield" unicode="&#xf132;" horiz-adv-x="1280" 
+d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150
+t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="calendar_empty" unicode="&#xf133;" horiz-adv-x="1664" 
+d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="fire_extinguisher" unicode="&#xf134;" horiz-adv-x="1408" 
+d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800
+q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113
+q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+    <glyph glyph-name="rocket" unicode="&#xf135;" horiz-adv-x="1664" 
+d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1
+q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+    <glyph glyph-name="maxcdn" unicode="&#xf136;" horiz-adv-x="1792" 
+d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+    <glyph glyph-name="chevron_sign_left" unicode="&#xf137;" 
+d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_right" unicode="&#xf138;" 
+d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_up" unicode="&#xf139;" 
+d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="chevron_sign_down" unicode="&#xf13a;" 
+d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5
+t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="html5" unicode="&#xf13b;" horiz-adv-x="1408" 
+d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+    <glyph glyph-name="css3" unicode="&#xf13c;" horiz-adv-x="1792" 
+d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+    <glyph glyph-name="anchor" unicode="&#xf13d;" horiz-adv-x="1792" 
+d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352
+q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19
+t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="unlock_alt" unicode="&#xf13e;" horiz-adv-x="1152" 
+d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181
+v-320h736z" />
+    <glyph glyph-name="bullseye" unicode="&#xf140;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 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.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150
+t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640
+q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="ellipsis_horizontal" unicode="&#xf141;" horiz-adv-x="1408" 
+d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="ellipsis_vertical" unicode="&#xf142;" horiz-adv-x="384" 
+d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192
+q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+    <glyph glyph-name="_303" unicode="&#xf143;" 
+d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 233 -176.5 396.5t-396.5 176.5q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128
+q13 0 23 10t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="play_sign" unicode="&#xf144;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56
+q16 -8 32 -8q17 0 32 9z" />
+    <glyph glyph-name="ticket" unicode="&#xf145;" horiz-adv-x="1792" 
+d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136
+t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+    <glyph glyph-name="minus_sign_alt" unicode="&#xf146;" 
+d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="check_minus" unicode="&#xf147;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5
+t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="level_up" unicode="&#xf148;" horiz-adv-x="1024" 
+d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+    <glyph glyph-name="level_down" unicode="&#xf149;" horiz-adv-x="1024" 
+d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+    <glyph glyph-name="check_sign" unicode="&#xf14a;" 
+d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5
+t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="edit_sign" unicode="&#xf14b;" 
+d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_312" unicode="&#xf14c;" 
+d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960
+q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="share_sign" unicode="&#xf14d;" 
+d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q11 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5
+t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="compass" unicode="&#xf14e;" 
+d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="collapse" unicode="&#xf150;" 
+d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="collapse_top" unicode="&#xf151;" 
+d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_317" unicode="&#xf152;" 
+d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="eur" unicode="&#xf153;" horiz-adv-x="1024" 
+d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9
+t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26
+l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+    <glyph glyph-name="gbp" unicode="&#xf154;" horiz-adv-x="1024" 
+d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7
+q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+    <glyph glyph-name="usd" unicode="&#xf155;" horiz-adv-x="1024" 
+d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43
+t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5
+t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50
+t53 -63.5t31.5 -76.5t13 -94z" />
+    <glyph glyph-name="inr" unicode="&#xf156;" horiz-adv-x="898" 
+d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102
+q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="jpy" unicode="&#xf157;" horiz-adv-x="1027" 
+d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61
+l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+    <glyph glyph-name="rub" unicode="&#xf158;" horiz-adv-x="1280" 
+d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128
+q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+    <glyph glyph-name="krw" unicode="&#xf159;" horiz-adv-x="1792" 
+d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23
+t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28
+q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="btc" unicode="&#xf15a;" horiz-adv-x="1280" 
+d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164
+l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30
+t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+    <glyph glyph-name="file" unicode="&#xf15b;" 
+d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+    <glyph glyph-name="file_text" unicode="&#xf15c;" 
+d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+    <glyph glyph-name="sort_by_alphabet" unicode="&#xf15d;" horiz-adv-x="1664" 
+d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23
+v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162
+l230 -662h70z" />
+    <glyph glyph-name="_329" unicode="&#xf15e;" horiz-adv-x="1664" 
+d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150
+v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248
+v119h121z" />
+    <glyph glyph-name="sort_by_attributes" unicode="&#xf160;" horiz-adv-x="1792" 
+d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832
+q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_attributes_alt" unicode="&#xf161;" horiz-adv-x="1792" 
+d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192
+q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="sort_by_order" unicode="&#xf162;" 
+d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23
+zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5
+t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+    <glyph glyph-name="sort_by_order_alt" unicode="&#xf163;" 
+d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9
+t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13
+q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+    <glyph glyph-name="_334" unicode="&#xf164;" horiz-adv-x="1664" 
+d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76
+q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5
+t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+    <glyph glyph-name="_335" unicode="&#xf165;" horiz-adv-x="1664" 
+d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135
+t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121
+t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+    <glyph glyph-name="youtube_sign" unicode="&#xf166;" 
+d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 17 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15
+q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38
+q21 -29 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5
+q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78q7 -23 23 -69l24 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38
+q-51 0 -78 -38q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5
+h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube" unicode="&#xf167;" 
+d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73
+q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51
+q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99
+q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-38 -51 -106 -51q-67 0 -105 51
+q-28 38 -28 118v175q0 80 28 117q38 51 105 51q68 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+    <glyph glyph-name="xing" unicode="&#xf168;" horiz-adv-x="1408" 
+d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942
+q25 45 64 45h241q22 0 31 -15z" />
+    <glyph glyph-name="xing_sign" unicode="&#xf169;" 
+d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1
+l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="youtube_play" unicode="&#xf16a;" horiz-adv-x="1792" 
+d="M711 408l484 250l-484 253v-503zM896 1270q168 0 324.5 -4.5t229.5 -9.5l73 -4q1 0 17 -1.5t23 -3t23.5 -4.5t28.5 -8t28 -13t31 -19.5t29 -26.5q6 -6 15.5 -18.5t29 -58.5t26.5 -101q8 -64 12.5 -136.5t5.5 -113.5v-40v-136q1 -145 -18 -290q-7 -55 -25 -99.5t-32 -61.5
+l-14 -17q-14 -15 -29 -26.5t-31 -19t-28 -12.5t-28.5 -8t-24 -4.5t-23 -3t-16.5 -1.5q-251 -19 -627 -19q-207 2 -359.5 6.5t-200.5 7.5l-49 4l-36 4q-36 5 -54.5 10t-51 21t-56.5 41q-6 6 -15.5 18.5t-29 58.5t-26.5 101q-8 64 -12.5 136.5t-5.5 113.5v40v136
+q-1 145 18 290q7 55 25 99.5t32 61.5l14 17q14 15 29 26.5t31 19.5t28 13t28.5 8t23.5 4.5t23 3t17 1.5q251 18 627 18z" />
+    <glyph glyph-name="dropbox" unicode="&#xf16b;" horiz-adv-x="1792" 
+d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+    <glyph glyph-name="stackexchange" unicode="&#xf16c;" 
+d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+    <glyph glyph-name="instagram" unicode="&#xf16d;" 
+d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270
+q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5
+t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317
+q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+    <glyph glyph-name="flickr" unicode="&#xf16e;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150
+t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+    <glyph glyph-name="adn" unicode="&#xf170;" 
+d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f171" unicode="&#xf171;" horiz-adv-x="1408" 
+d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22
+t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18
+t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5
+t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+    <glyph glyph-name="bitbucket_sign" unicode="&#xf172;" 
+d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5
+t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z
+M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120
+v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="tumblr" unicode="&#xf173;" horiz-adv-x="1024" 
+d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14
+q78 2 134 29z" />
+    <glyph glyph-name="tumblr_sign" unicode="&#xf174;" 
+d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="long_arrow_down" unicode="&#xf175;" horiz-adv-x="768" 
+d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+    <glyph glyph-name="long_arrow_up" unicode="&#xf176;" horiz-adv-x="768" 
+d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+    <glyph glyph-name="long_arrow_left" unicode="&#xf177;" horiz-adv-x="1792" 
+d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="long_arrow_right" unicode="&#xf178;" horiz-adv-x="1792" 
+d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+    <glyph glyph-name="apple" unicode="&#xf179;" horiz-adv-x="1408" 
+d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q113 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65
+q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+    <glyph glyph-name="windows" unicode="&#xf17a;" horiz-adv-x="1664" 
+d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+    <glyph glyph-name="android" unicode="&#xf17b;" horiz-adv-x="1408" 
+d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30
+t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5
+h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+    <glyph glyph-name="linux" unicode="&#xf17c;" 
+d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-10 -11 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z
+M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7
+q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15
+q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5
+t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19
+q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63
+q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18q-2 -1 -4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92
+q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152
+q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-6 0 -8 -2t0 -4
+t5 -3q14 -4 18 -31q0 -3 8 2q2 2 2 3zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5
+t-30 -18.5t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43
+q-19 4 -51 9.5t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49
+t-14 -48q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54
+q110 143 124 195q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5
+t-40.5 -33.5t-61 -14q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5
+t15.5 47.5q1 -31 8 -56.5t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+    <glyph glyph-name="dribble" unicode="&#xf17d;" 
+d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81
+t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19
+q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -5 6.5 -17t7.5 -17q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6
+t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="skype" unicode="&#xf17e;" 
+d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5
+t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5
+q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80
+q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+    <glyph glyph-name="foursquare" unicode="&#xf180;" horiz-adv-x="1280" 
+d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z
+M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324
+l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+    <glyph glyph-name="trello" unicode="&#xf181;" 
+d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408
+q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="female" unicode="&#xf182;" horiz-adv-x="1280" 
+d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43
+q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="male" unicode="&#xf183;" horiz-adv-x="1024" 
+d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z
+M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="gittip" unicode="&#xf184;" 
+d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="sun" unicode="&#xf185;" horiz-adv-x="1792" 
+d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4
+l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94
+q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+    <glyph glyph-name="_366" unicode="&#xf186;" 
+d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61
+t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+    <glyph glyph-name="archive" unicode="&#xf187;" horiz-adv-x="1792" 
+d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536
+q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="bug" unicode="&#xf188;" horiz-adv-x="1664" 
+d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207
+q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19
+t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+    <glyph glyph-name="vk" unicode="&#xf189;" horiz-adv-x="1920" 
+d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-40 -51 -55 -72t-30.5 -49.5t-12 -42t13 -34.5t32.5 -43t57 -53q4 -2 5 -4q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58
+t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6
+q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q16 19 38 30q53 26 239 24
+q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2
+q39 5 64 -2.5t31 -16.5z" />
+    <glyph glyph-name="weibo" unicode="&#xf18a;" horiz-adv-x="1792" 
+d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12
+q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422
+q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178
+q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z
+M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+    <glyph glyph-name="renren" unicode="&#xf18b;" 
+d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495
+q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+    <glyph glyph-name="_372" unicode="&#xf18c;" horiz-adv-x="1408" 
+d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5
+t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56
+t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -4 1 -50t-1 -72q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5
+t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+    <glyph glyph-name="stack_exchange" unicode="&#xf18d;" horiz-adv-x="1280" 
+d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z
+" />
+    <glyph glyph-name="_374" unicode="&#xf18e;" 
+d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="arrow_circle_alt_left" unicode="&#xf190;" 
+d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198
+t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_376" unicode="&#xf191;" 
+d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z
+M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="dot_circle_alt" unicode="&#xf192;" 
+d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5
+t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_378" unicode="&#xf193;" horiz-adv-x="1664" 
+d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128
+q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 17 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+    <glyph glyph-name="vimeo_square" unicode="&#xf194;" 
+d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179
+q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_380" unicode="&#xf195;" horiz-adv-x="1152" 
+d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160
+q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="plus_square_o" unicode="&#xf196;" horiz-adv-x="1408" 
+d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832
+q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_382" unicode="&#xf197;" horiz-adv-x="2176" 
+d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40
+t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29
+q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+    <glyph glyph-name="_383" unicode="&#xf198;" horiz-adv-x="1664" 
+d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9
+q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102
+t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+    <glyph glyph-name="_384" unicode="&#xf199;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69
+q-47 32 -142 92.5t-142 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13
+t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+    <glyph glyph-name="_385" unicode="&#xf19a;" horiz-adv-x="1792" 
+d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5
+t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21
+t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286
+t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273
+t273 -182.5t331.5 -68z" />
+    <glyph glyph-name="_386" unicode="&#xf19b;" horiz-adv-x="1792" 
+d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+    <glyph glyph-name="_387" unicode="&#xf19c;" horiz-adv-x="2048" 
+d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64
+q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+    <glyph glyph-name="_388" unicode="&#xf19d;" horiz-adv-x="2304" 
+d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433
+q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+    <glyph glyph-name="_389" unicode="&#xf19e;" 
+d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q44 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0
+q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+    <glyph glyph-name="uniF1A0" unicode="&#xf1a0;" 
+d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5
+t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+    <glyph glyph-name="f1a1" unicode="&#xf1a1;" horiz-adv-x="1792" 
+d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26
+t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37
+q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191
+t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_392" unicode="&#xf1a2;" 
+d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54
+q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83
+q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_393" unicode="&#xf1a3;" 
+d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150
+v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103
+t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="f1a4" unicode="&#xf1a4;" horiz-adv-x="1920" 
+d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328
+v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+    <glyph glyph-name="_395" unicode="&#xf1a5;" 
+d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="_396" unicode="&#xf1a6;" horiz-adv-x="2048" 
+d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123
+v-369h123z" />
+    <glyph glyph-name="_397" unicode="&#xf1a7;" 
+d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101
+v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960
+q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_398" unicode="&#xf1a8;" horiz-adv-x="2038" 
+d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14
+q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24
+q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33
+q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5
+t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43
+q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5
+t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13
+t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+    <glyph glyph-name="_399" unicode="&#xf1a9;" 
+d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10
+q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14
+q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14
+t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44
+q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+    <glyph glyph-name="_400" unicode="&#xf1aa;" 
+d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z
+M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5
+t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5
+q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126
+t135.5 51q85 0 145 -60.5t60 -145.5z" />
+    <glyph glyph-name="f1ab" unicode="&#xf1ab;" 
+d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5
+q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28
+q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z
+M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11
+q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q107 36 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5
+q20 0 20 -21v-418z" />
+    <glyph glyph-name="_402" unicode="&#xf1ac;" horiz-adv-x="1792" 
+d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48
+l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23
+t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128
+q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128
+q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+    <glyph glyph-name="_403" unicode="&#xf1ad;" 
+d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9
+t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9
+t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64
+q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64
+q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9
+t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+    <glyph glyph-name="_404" unicode="&#xf1ae;" horiz-adv-x="1280" 
+d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68q29 28 68.5 28t67.5 -28l228 -228h368l228 228q28 28 68 28t68 -28q28 -29 28 -68.5t-28 -67.5zM864 1152
+q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="uniF1B1" unicode="&#xf1b0;" horiz-adv-x="1664" 
+d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5
+q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819
+q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5
+t100.5 134t141.5 55.5z" />
+    <glyph glyph-name="_406" unicode="&#xf1b1;" horiz-adv-x="768" 
+d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+    <glyph glyph-name="_407" unicode="&#xf1b2;" horiz-adv-x="1792" 
+d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z
+" />
+    <glyph glyph-name="_408" unicode="&#xf1b3;" horiz-adv-x="2304" 
+d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67
+t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-4 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70
+v-400l434 -186q36 -16 57 -48t21 -70z" />
+    <glyph glyph-name="_409" unicode="&#xf1b4;" horiz-adv-x="2048" 
+d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658
+q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204
+q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+    <glyph glyph-name="_410" unicode="&#xf1b5;" 
+d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5
+t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217
+t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+    <glyph glyph-name="_411" unicode="&#xf1b6;" horiz-adv-x="1792" 
+d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5
+q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89
+q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+    <glyph glyph-name="_412" unicode="&#xf1b7;" 
+d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5
+q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5
+q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z
+" />
+    <glyph glyph-name="_413" unicode="&#xf1b8;" horiz-adv-x="1792" 
+d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188
+l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5
+t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1
+q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+    <glyph glyph-name="_414" unicode="&#xf1b9;" horiz-adv-x="2048" 
+d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384
+q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5
+l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_415" unicode="&#xf1ba;" horiz-adv-x="2048" 
+d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5
+t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z
+M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+    <glyph glyph-name="_416" unicode="&#xf1bb;" 
+d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384
+q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+    <glyph glyph-name="_417" unicode="&#xf1bc;" 
+d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64
+q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37
+q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_418" unicode="&#xf1bd;" horiz-adv-x="1024" 
+d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+    <glyph glyph-name="_419" unicode="&#xf1be;" horiz-adv-x="2304" 
+d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11
+q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245
+q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785
+l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242
+q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236
+q0 -11 -8 -19t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786
+q-13 2 -22 11t-9 22v899q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+    <glyph glyph-name="uniF1C0" unicode="&#xf1c0;" 
+d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127
+t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5
+t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+    <glyph glyph-name="uniF1C1" unicode="&#xf1c1;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197
+q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8
+q-1 1 -1 2q-1 2 -1 3q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+    <glyph glyph-name="_422" unicode="&#xf1c2;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4q0 3 -0.5 6.5t-1.5 8t-1 6.5q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5
+t-3.5 -21.5l-4 -21h-4l-2 21q-2 26 -7 46l-99 438h90v107h-300z" />
+    <glyph glyph-name="_423" unicode="&#xf1c3;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107
+h-290v-107h68l189 -272l-194 -283h-68z" />
+    <glyph glyph-name="_424" unicode="&#xf1c4;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+    <glyph glyph-name="_425" unicode="&#xf1c5;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+    <glyph glyph-name="_426" unicode="&#xf1c6;" 
+d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400
+v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79
+q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+    <glyph glyph-name="_427" unicode="&#xf1c7;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5
+q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+    <glyph glyph-name="_428" unicode="&#xf1c8;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+    <glyph glyph-name="_429" unicode="&#xf1c9;" 
+d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z
+M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243
+l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+    <glyph glyph-name="_430" unicode="&#xf1ca;" 
+d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406
+q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+    <glyph glyph-name="_431" unicode="&#xf1cb;" horiz-adv-x="1792" 
+d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546
+q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+    <glyph glyph-name="_432" unicode="&#xf1cc;" horiz-adv-x="2048" 
+d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94
+q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55
+t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97l93 -108q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5t-85 -189.5z" />
+    <glyph glyph-name="_433" unicode="&#xf1cd;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194
+q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5
+t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+    <glyph glyph-name="_434" unicode="&#xf1ce;" horiz-adv-x="1792" 
+d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5
+t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+    <glyph glyph-name="uniF1D0" unicode="&#xf1d0;" horiz-adv-x="1792" 
+d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41
+t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170
+t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136
+q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+    <glyph glyph-name="uniF1D1" unicode="&#xf1d1;" horiz-adv-x="1792" 
+d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251
+l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162
+q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33
+q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5
+t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF1D2" unicode="&#xf1d2;" 
+d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85
+q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392
+q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072
+q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_438" unicode="&#xf1d3;" horiz-adv-x="1792" 
+d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58
+q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47
+q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171
+v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+    <glyph glyph-name="_439" unicode="&#xf1d4;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF1D5" unicode="&#xf1d5;" horiz-adv-x="1280" 
+d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5
+t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153
+t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+    <glyph glyph-name="uniF1D6" unicode="&#xf1d6;" horiz-adv-x="1792" 
+d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5
+q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20
+t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5
+t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+    <glyph glyph-name="uniF1D7" unicode="&#xf1d7;" horiz-adv-x="2048" 
+d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25
+q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5
+q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109
+q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+    <glyph glyph-name="_443" unicode="&#xf1d8;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+    <glyph glyph-name="_444" unicode="&#xf1d9;" horiz-adv-x="1792" 
+d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137
+l863 639l-478 -797z" />
+    <glyph glyph-name="_445" unicode="&#xf1da;" 
+d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5
+t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23
+t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_446" unicode="&#xf1db;" 
+d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103
+t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_447" unicode="&#xf1dc;" horiz-adv-x="1792" 
+d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15
+t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2
+t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160
+q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5
+q0 -26 -12 -48t-36 -22z" />
+    <glyph glyph-name="_448" unicode="&#xf1dd;" horiz-adv-x="1280" 
+d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179
+q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+    <glyph glyph-name="_449" unicode="&#xf1de;" 
+d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256
+q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+    <glyph glyph-name="uniF1E0" unicode="&#xf1e0;" 
+d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5
+t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+    <glyph glyph-name="_451" unicode="&#xf1e1;" 
+d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5
+t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_452" unicode="&#xf1e2;" horiz-adv-x="1792" 
+d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5
+t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91
+q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9
+t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+    <glyph glyph-name="_453" unicode="&#xf1e3;" horiz-adv-x="1792" 
+d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323
+l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+    <glyph glyph-name="_454" unicode="&#xf1e4;" horiz-adv-x="1792" 
+d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23
+v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192
+q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23
+zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5
+t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+    <glyph glyph-name="_455" unicode="&#xf1e5;" horiz-adv-x="1792" 
+d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z
+M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_456" unicode="&#xf1e6;" horiz-adv-x="1792" 
+d="M1755 1083q37 -38 37 -90.5t-37 -90.5l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234
+l401 400q38 37 91 37t90 -37z" />
+    <glyph glyph-name="_457" unicode="&#xf1e7;" horiz-adv-x="1792" 
+d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5
+t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z
+M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q4 -2 11.5 -7
+t10.5 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+    <glyph glyph-name="_458" unicode="&#xf1e8;" horiz-adv-x="1792" 
+d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+    <glyph glyph-name="_459" unicode="&#xf1e9;" 
+d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36
+q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q71 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5
+t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87
+q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+    <glyph glyph-name="_460" unicode="&#xf1ea;" horiz-adv-x="2048" 
+d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19
+t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+    <glyph glyph-name="_461" unicode="&#xf1eb;" horiz-adv-x="2048" 
+d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121
+q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z
+M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+    <glyph glyph-name="_462" unicode="&#xf1ec;" horiz-adv-x="1792" 
+d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5
+t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5
+t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38
+h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_463" unicode="&#xf1ed;" 
+d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246
+q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598
+q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+    <glyph glyph-name="_464" unicode="&#xf1ee;" horiz-adv-x="1792" 
+d="M441 864q33 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640
+q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+    <glyph glyph-name="uniF1F0" unicode="&#xf1f0;" horiz-adv-x="2304" 
+d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27
+q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128
+q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_466" unicode="&#xf1f1;" horiz-adv-x="2304" 
+d="M1119 1195q-128 85 -281 85q-103 0 -197.5 -40.5t-162.5 -108.5t-108.5 -162t-40.5 -197q0 -104 40.5 -198t108.5 -162t162 -108.5t198 -40.5q153 0 281 85q-131 107 -178 265.5t0.5 316.5t177.5 265zM1152 1171q-126 -99 -172 -249.5t-0.5 -300.5t172.5 -249
+q127 99 172.5 249t-0.5 300.5t-172 249.5zM1185 1195q130 -107 177.5 -265.5t0.5 -317t-178 -264.5q128 -85 281 -85q104 0 198 40.5t162 108.5t108.5 162t40.5 198q0 103 -40.5 197t-108.5 162t-162.5 108.5t-197.5 40.5q-153 0 -281 -85zM1926 473h7v3h-17v-3h7v-17h3v17z
+M1955 456h4v20h-5l-6 -13l-6 13h-5v-20h3v15l6 -13h4l5 13v-15zM1947 16v-2h-2h-3v3h3h2v-1zM1947 7h3l-4 5h2l1 1q1 1 1 3t-1 3l-1 1h-3h-6v-13h3v5h1zM685 75q0 19 11 31t30 12q18 0 29 -12.5t11 -30.5q0 -19 -11 -31t-29 -12q-19 0 -30 12t-11 31zM1158 119q30 0 35 -32
+h-70q5 32 35 32zM1514 75q0 19 11 31t29 12t29.5 -12.5t11.5 -30.5q0 -19 -11 -31t-30 -12q-18 0 -29 12t-11 31zM1786 75q0 18 11.5 30.5t29.5 12.5t29.5 -12.5t11.5 -30.5q0 -19 -11.5 -31t-29.5 -12t-29.5 12.5t-11.5 30.5zM1944 3q-2 0 -4 1q-1 0 -3 2t-2 3q-1 2 -1 4
+q0 3 1 4q0 2 2 4l1 1q2 0 2 1q2 1 4 1q3 0 4 -1l4 -2l2 -4v-1q1 -2 1 -3l-1 -1v-3t-1 -1l-1 -2q-2 -2 -4 -2q-1 -1 -4 -1zM599 7h30v85q0 24 -14.5 38.5t-39.5 15.5q-32 0 -47 -24q-14 24 -45 24q-24 0 -39 -20v16h-30v-135h30v75q0 36 33 36q30 0 30 -36v-75h29v75
+q0 36 33 36q30 0 30 -36v-75zM765 7h29v68v67h-29v-16q-17 20 -43 20q-29 0 -48 -20t-19 -51t19 -51t48 -20q28 0 43 20v-17zM943 48q0 34 -47 40l-14 2q-23 4 -23 14q0 15 25 15q23 0 43 -11l12 24q-22 14 -55 14q-26 0 -41 -12t-15 -32q0 -33 47 -39l13 -2q24 -4 24 -14
+q0 -17 -31 -17q-25 0 -45 14l-13 -23q25 -17 58 -17q29 0 45.5 12t16.5 32zM1073 14l-8 25q-13 -7 -26 -7q-19 0 -19 22v61h48v27h-48v41h-30v-41h-28v-27h28v-61q0 -50 47 -50q21 0 36 10zM1159 146q-29 0 -48 -20t-19 -51q0 -32 19.5 -51.5t49.5 -19.5q33 0 55 19l-14 22
+q-18 -15 -39 -15q-34 0 -41 33h101v12q0 32 -18 51.5t-46 19.5zM1318 146q-23 0 -35 -20v16h-30v-135h30v76q0 35 29 35q10 0 18 -4l9 28q-9 4 -21 4zM1348 75q0 -31 19.5 -51t52.5 -20q29 0 48 16l-14 24q-18 -13 -35 -12q-18 0 -29.5 12t-11.5 31t11.5 31t29.5 12
+q19 0 35 -12l14 24q-20 16 -48 16q-33 0 -52.5 -20t-19.5 -51zM1593 7h30v68v67h-30v-16q-15 20 -42 20q-29 0 -48.5 -20t-19.5 -51t19.5 -51t48.5 -20q28 0 42 20v-17zM1726 146q-23 0 -35 -20v16h-29v-135h29v76q0 35 29 35q10 0 18 -4l9 28q-8 4 -21 4zM1866 7h29v68v122
+h-29v-71q-15 20 -43 20t-47.5 -20.5t-19.5 -50.5t19.5 -50.5t47.5 -20.5q29 0 43 20v-17zM1944 27l-2 -1h-3q-2 -1 -4 -3q-3 -1 -3 -4q-1 -2 -1 -6q0 -3 1 -5q0 -2 3 -4q2 -2 4 -3t5 -1q4 0 6 1q0 1 2 2l2 1q1 1 3 4q1 2 1 5q0 4 -1 6q-1 1 -3 4q0 1 -2 2l-2 1q-1 0 -3 0.5
+t-3 0.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_467" unicode="&#xf1f2;" horiz-adv-x="2304" 
+d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42
+q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604
+v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569
+q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73
+t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+    <glyph glyph-name="f1f3" unicode="&#xf1f3;" horiz-adv-x="2304" 
+d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z
+M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260
+l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279
+v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040
+q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168
+q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5
+t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21
+h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5
+t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+    <glyph glyph-name="_469" unicode="&#xf1f4;" horiz-adv-x="2304" 
+d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16
+t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76
+q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59
+t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489
+l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66
+q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_470" unicode="&#xf1f5;" horiz-adv-x="2304" 
+d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109
+q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118
+q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151
+q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31
+q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_471" unicode="&#xf1f6;" horiz-adv-x="2048" 
+d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5
+l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5
+l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_472" unicode="&#xf1f7;" horiz-adv-x="2048" 
+d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128
+q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161
+q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+    <glyph glyph-name="_473" unicode="&#xf1f8;" horiz-adv-x="1408" 
+d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167
+q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_474" unicode="&#xf1f9;" 
+d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5
+t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5
+t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_475" unicode="&#xf1fa;" 
+d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53
+q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24
+t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61
+t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+    <glyph glyph-name="_476" unicode="&#xf1fb;" horiz-adv-x="1792" 
+d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10
+t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+    <glyph glyph-name="f1fc" unicode="&#xf1fc;" horiz-adv-x="1792" 
+d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5
+t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+    <glyph glyph-name="_478" unicode="&#xf1fd;" horiz-adv-x="1792" 
+d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11q24 0 44 -7t31 -15t33 -27q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5
+t47 37.5q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-24 0 -44 7t-31 15t-33 27q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38
+t-58 27t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448
+h256v448h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5
+q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+    <glyph glyph-name="_479" unicode="&#xf1fe;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+    <glyph glyph-name="_480" unicode="&#xf200;" horiz-adv-x="1792" 
+d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_481" unicode="&#xf201;" horiz-adv-x="2048" 
+d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9
+t9 -23z" />
+    <glyph glyph-name="_482" unicode="&#xf202;" horiz-adv-x="1792" 
+d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20
+q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50
+t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1
+q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+    <glyph glyph-name="_483" unicode="&#xf203;" 
+d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73
+q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110
+q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960
+q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_484" unicode="&#xf204;" horiz-adv-x="2048" 
+d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5
+t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5
+t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+    <glyph glyph-name="_485" unicode="&#xf205;" horiz-adv-x="2048" 
+d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5
+t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+    <glyph glyph-name="_486" unicode="&#xf206;" horiz-adv-x="2304" 
+d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94
+q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469
+q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400
+q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+    <glyph glyph-name="_487" unicode="&#xf207;" 
+d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5
+h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5
+t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+    <glyph glyph-name="_488" unicode="&#xf208;" horiz-adv-x="2048" 
+d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327
+q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5
+q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+    <glyph glyph-name="_489" unicode="&#xf209;" horiz-adv-x="1280" 
+d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q17 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119
+t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5
+t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14
+q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88
+q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5
+t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+    <glyph glyph-name="_490" unicode="&#xf20a;" horiz-adv-x="2048" 
+d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206
+q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307
+t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14
+t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+    <glyph glyph-name="_491" unicode="&#xf20b;" 
+d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5
+t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="_492" unicode="&#xf20c;" 
+d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55
+q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410
+q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+    <glyph glyph-name="_493" unicode="&#xf20d;" 
+d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+    <glyph glyph-name="_494" unicode="&#xf20e;" horiz-adv-x="2048" 
+d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335
+q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5
+q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360l15 -6l188 199v347l-187 194q-13 -8 -29 -10zM986 1438
+h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13zM552 226h402l64 66
+l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224l213 -225zM1023 946
+l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196l-48 -227l130 227h-82
+zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+    <glyph glyph-name="f210" unicode="&#xf210;" 
+d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+    <glyph glyph-name="_496" unicode="&#xf211;" 
+d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384
+q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+    <glyph glyph-name="f212" unicode="&#xf212;" horiz-adv-x="2048" 
+d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021
+q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25
+q209 0 374 -102q172 107 374 102z" />
+    <glyph glyph-name="_498" unicode="&#xf213;" horiz-adv-x="2048" 
+d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101
+q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284
+q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+    <glyph glyph-name="_499" unicode="&#xf214;" 
+d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34
+l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114
+v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z
+M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378
+v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51
+h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5
+t-43 -34t-16.5 -53.5z" />
+    <glyph glyph-name="_500" unicode="&#xf215;" horiz-adv-x="2048" 
+d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832
+q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+    <glyph glyph-name="_501" unicode="&#xf216;" horiz-adv-x="2048" 
+d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126t-103.5 132.5t-108.5 126.5t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5
+t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113
+t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5
+q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+    <glyph glyph-name="_502" unicode="&#xf217;" horiz-adv-x="1664" 
+d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_503" unicode="&#xf218;" horiz-adv-x="1664" 
+d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5
+t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920
+q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="_504" unicode="&#xf219;" horiz-adv-x="2048" 
+d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20
+l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+    <glyph glyph-name="_505" unicode="&#xf21a;" horiz-adv-x="2048" 
+d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83
+q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314
+v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83
+q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+    <glyph glyph-name="_506" unicode="&#xf21b;" 
+d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14
+t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5
+q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31
+t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+    <glyph glyph-name="_507" unicode="&#xf21c;" horiz-adv-x="2304" 
+d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5
+t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105
+l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226
+t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+    <glyph glyph-name="_508" unicode="&#xf21d;" 
+d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12
+q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384
+q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5
+t158.5 -65.5t65.5 -158.5z" />
+    <glyph glyph-name="_509" unicode="&#xf21e;" horiz-adv-x="1792" 
+d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221
+q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 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 -124
+t127 -344z" />
+    <glyph glyph-name="venus" unicode="&#xf221;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292
+q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+    <glyph glyph-name="_511" unicode="&#xf222;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5
+q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_512" unicode="&#xf223;" horiz-adv-x="1280" 
+d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5
+t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_513" unicode="&#xf224;" 
+d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_514" unicode="&#xf225;" horiz-adv-x="1792" 
+d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64
+q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9
+t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_515" unicode="&#xf226;" horiz-adv-x="1792" 
+d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23
+t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391
+q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391
+q0 -226 -154 -391q103 -57 218 -57z" />
+    <glyph glyph-name="_516" unicode="&#xf227;" horiz-adv-x="1920" 
+d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230
+q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9
+t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128
+q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -28 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+    <glyph glyph-name="_517" unicode="&#xf228;" horiz-adv-x="2048" 
+d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23
+t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9
+t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5
+t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+    <glyph glyph-name="_518" unicode="&#xf229;" 
+d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5
+t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5
+t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_519" unicode="&#xf22a;" horiz-adv-x="1280" 
+d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22
+t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5
+t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_520" unicode="&#xf22b;" horiz-adv-x="2048" 
+d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5
+t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5
+t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_521" unicode="&#xf22c;" horiz-adv-x="1280" 
+d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5
+t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+    <glyph glyph-name="_522" unicode="&#xf22d;" horiz-adv-x="1280" 
+d="M1024 576q0 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.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123
+t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+    <glyph glyph-name="_523" unicode="&#xf22e;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_524" unicode="&#xf22f;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_525" unicode="&#xf230;" 
+d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+    <glyph glyph-name="_526" unicode="&#xf231;" horiz-adv-x="1280" 
+d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5
+l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5
+q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+    <glyph glyph-name="_527" unicode="&#xf232;" 
+d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5
+t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233
+l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+    <glyph glyph-name="_528" unicode="&#xf233;" horiz-adv-x="1792" 
+d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216
+q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+    <glyph glyph-name="_529" unicode="&#xf234;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5
+t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5
+t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+    <glyph glyph-name="_530" unicode="&#xf235;" horiz-adv-x="2048" 
+d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136
+q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69
+t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+    <glyph glyph-name="_531" unicode="&#xf236;" horiz-adv-x="2048" 
+d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704
+q-26 0 -45 -19t-19 -45v-384h1152z" />
+    <glyph glyph-name="_532" unicode="&#xf237;" 
+d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+    <glyph glyph-name="_533" unicode="&#xf238;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56
+t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+    <glyph glyph-name="_534" unicode="&#xf239;" 
+d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47
+t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+    <glyph glyph-name="_535" unicode="&#xf23a;" horiz-adv-x="1792" 
+d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116
+q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+    <glyph glyph-name="_536" unicode="&#xf23b;" 
+d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+    <glyph glyph-name="_537" unicode="&#xf23c;" horiz-adv-x="2296" 
+d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5
+q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5
+q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42
+q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37
+q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5
+q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139
+q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 5 5 8q16 18 60 23h13q5 18 19 30t33 8
+t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132
+q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132
+q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z
+M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-105 2 -211 0v1q-1 -27 2.5 -86
+t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103
+q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34q0 2 0.5 3.5t1.5 3t1 2.5v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4
+l-10 -2.5t-12 -2l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-6 -1 -9 -1q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130
+t-73 70q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -1 -1 -4t-1 -5q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150
+q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12
+q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+    <glyph glyph-name="_538" unicode="&#xf23d;" horiz-adv-x="2304" 
+d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5
+t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5
+t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+    <glyph glyph-name="_539" unicode="&#xf23e;" horiz-adv-x="1792" 
+d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348
+t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23
+t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96
+q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512
+q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+    <glyph glyph-name="_540" unicode="&#xf240;" horiz-adv-x="2304" 
+d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113
+v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+    <glyph glyph-name="_541" unicode="&#xf241;" horiz-adv-x="2304" 
+d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_542" unicode="&#xf242;" horiz-adv-x="2304" 
+d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_543" unicode="&#xf243;" horiz-adv-x="2304" 
+d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9
+h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_544" unicode="&#xf244;" horiz-adv-x="2304" 
+d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23
+v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+    <glyph glyph-name="_545" unicode="&#xf245;" horiz-adv-x="1280" 
+d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+    <glyph glyph-name="_546" unicode="&#xf246;" horiz-adv-x="1024" 
+d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+    <glyph glyph-name="_547" unicode="&#xf247;" horiz-adv-x="2048" 
+d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128
+h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+    <glyph glyph-name="_548" unicode="&#xf248;" horiz-adv-x="2304" 
+d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256
+v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+    <glyph glyph-name="_549" unicode="&#xf249;" 
+d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+    <glyph glyph-name="_550" unicode="&#xf24a;" 
+d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68
+z" />
+    <glyph glyph-name="_551" unicode="&#xf24b;" horiz-adv-x="2304" 
+d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5
+t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88
+t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90
+t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_552" unicode="&#xf24c;" horiz-adv-x="2304" 
+d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294
+t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z
+M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_553" unicode="&#xf24d;" horiz-adv-x="1792" 
+d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113
+zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_554" unicode="&#xf24e;" horiz-adv-x="2304" 
+d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91
+t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5
+t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+    <glyph glyph-name="_555" unicode="&#xf250;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5
+t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_556" unicode="&#xf251;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+    <glyph glyph-name="_557" unicode="&#xf252;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+    <glyph glyph-name="_558" unicode="&#xf253;" 
+d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9
+t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196
+h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+    <glyph glyph-name="_559" unicode="&#xf254;" 
+d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87
+t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9
+h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+    <glyph glyph-name="_560" unicode="&#xf255;" 
+d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25
+q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27
+t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21
+q72 69 174 69z" />
+    <glyph glyph-name="_561" unicode="&#xf256;" horiz-adv-x="1792" 
+d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33
+t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52
+h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+    <glyph glyph-name="_562" unicode="&#xf257;" horiz-adv-x="1792" 
+d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668
+q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17
+t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5
+t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5
+q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+    <glyph glyph-name="_563" unicode="&#xf258;" horiz-adv-x="2048" 
+d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32
+q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68
+q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+    <glyph glyph-name="_564" unicode="&#xf259;" horiz-adv-x="2048" 
+d="M459 -256q-77 0 -137.5 47.5t-79.5 122.5l-101 401q-13 57 -13 108q0 45 -5 67l-116 477q-7 27 -7 57q0 93 62 161t155 78q17 85 82.5 139t152.5 54q83 0 148 -51.5t85 -132.5l83 -348l103 428q20 81 85 132.5t148 51.5q89 0 155.5 -57.5t80.5 -144.5q92 -10 152 -79
+t60 -162q0 -24 -7 -59l-123 -512q10 7 37.5 28.5t38.5 29.5t35 23t41 20.5t41.5 11t49.5 5.5q105 0 180 -74t75 -179q0 -62 -28.5 -118t-78.5 -94l-507 -380q-68 -51 -153 -51h-694zM1104 1408q-38 0 -68.5 -24t-39.5 -62l-164 -682h-127l-145 602q-9 38 -39.5 62t-68.5 24
+q-48 0 -80 -33t-32 -80q0 -15 3 -28l132 -547h-26l-99 408q-9 37 -40 62.5t-69 25.5q-47 0 -80 -33t-33 -79q0 -14 3 -26l116 -478q7 -28 9 -86t10 -88l100 -401q8 -32 34 -52.5t59 -20.5h694q42 0 76 26l507 379q56 43 56 110q0 52 -37.5 88.5t-89.5 36.5q-43 0 -77 -26
+l-307 -230v227q0 4 32 138t68 282t39 161q4 18 4 29q0 47 -32 81t-79 34q-39 0 -69.5 -24t-39.5 -62l-116 -482h-26l150 624q3 14 3 28q0 48 -31.5 82t-79.5 34z" />
+    <glyph glyph-name="_565" unicode="&#xf25a;" horiz-adv-x="1792" 
+d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5
+q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5
+v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32
+v-384h32z" />
+    <glyph glyph-name="_566" unicode="&#xf25b;" 
+d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181
+v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46
+q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5
+q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308
+q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+    <glyph glyph-name="_567" unicode="&#xf25c;" horiz-adv-x="1973" 
+d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5
+t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141
+q13 0 22 -8.5t10 -20.5z" />
+    <glyph glyph-name="_568" unicode="&#xf25d;" horiz-adv-x="1792" 
+d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109
+t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640
+q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_569" unicode="&#xf25e;" horiz-adv-x="1792" 
+d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78
+q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13.5t-23.5 -14.5t-28.5 -13t-33.5 -9.5
+t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376
+q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+    <glyph glyph-name="f260" unicode="&#xf260;" horiz-adv-x="2048" 
+d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+    <glyph glyph-name="f261" unicode="&#xf261;" horiz-adv-x="1792" 
+d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191
+t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_572" unicode="&#xf262;" horiz-adv-x="2304" 
+d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57
+t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197
+t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5
+t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5
+t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5
+q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+    <glyph glyph-name="f263" unicode="&#xf263;" horiz-adv-x="1280" 
+d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5
+t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94
+q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+    <glyph glyph-name="_574" unicode="&#xf264;" 
+d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32
+q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5
+zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="_575" unicode="&#xf265;" horiz-adv-x="1720" 
+d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33
+l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+    <glyph glyph-name="_576" unicode="&#xf266;" horiz-adv-x="2304" 
+d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540
+q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81
+l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+    <glyph glyph-name="_577" unicode="&#xf267;" horiz-adv-x="1792" 
+d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640
+q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5
+t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5
+t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5
+t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191
+t191 -286t71 -348z" />
+    <glyph glyph-name="_578" unicode="&#xf268;" horiz-adv-x="1792" 
+d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962
+q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+    <glyph glyph-name="_579" unicode="&#xf269;" horiz-adv-x="1792" 
+d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5
+q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5
+q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+    <glyph glyph-name="_580" unicode="&#xf26a;" horiz-adv-x="1792" 
+d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339
+q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z
+" />
+    <glyph glyph-name="_581" unicode="&#xf26b;" horiz-adv-x="1792" 
+d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606
+q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z
+M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+    <glyph glyph-name="_582" unicode="&#xf26c;" horiz-adv-x="2048" 
+d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23
+v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="_583" unicode="&#xf26d;" horiz-adv-x="1792" 
+d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34
+h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100
+q-68 175 -180 287z" />
+    <glyph glyph-name="_584" unicode="&#xf26e;" 
+d="M1401 -11l-6 -6q-113 -113 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6
+q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13
+q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 33 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249
+q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 33 -6t30 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183
+q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46
+t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+    <glyph glyph-name="_585" unicode="&#xf270;" horiz-adv-x="1792" 
+d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z
+M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30
+q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57
+t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133
+q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+    <glyph glyph-name="_586" unicode="&#xf271;" horiz-adv-x="1792" 
+d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9
+h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224
+v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+    <glyph glyph-name="_587" unicode="&#xf272;" horiz-adv-x="1792" 
+d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23
+t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_588" unicode="&#xf273;" horiz-adv-x="1792" 
+d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z
+M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280
+q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_589" unicode="&#xf274;" horiz-adv-x="1792" 
+d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23
+t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47
+t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+    <glyph glyph-name="_590" unicode="&#xf275;" horiz-adv-x="1792" 
+d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+    <glyph glyph-name="_591" unicode="&#xf276;" horiz-adv-x="1024" 
+d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q62 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249
+q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+    <glyph glyph-name="_592" unicode="&#xf277;" horiz-adv-x="1792" 
+d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768
+q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+    <glyph glyph-name="_593" unicode="&#xf278;" horiz-adv-x="2048" 
+d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173
+v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+    <glyph glyph-name="_594" unicode="&#xf279;" horiz-adv-x="1792" 
+d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472
+q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+    <glyph glyph-name="_595" unicode="&#xf27a;" horiz-adv-x="1792" 
+d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5
+t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37
+t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+    <glyph glyph-name="_596" unicode="&#xf27b;" horiz-adv-x="1792" 
+d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5
+t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5
+t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51
+t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+    <glyph glyph-name="_597" unicode="&#xf27c;" horiz-adv-x="1024" 
+d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+    <glyph glyph-name="_598" unicode="&#xf27d;" horiz-adv-x="1792" 
+d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246
+q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+    <glyph glyph-name="f27e" unicode="&#xf27e;" 
+d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+    <glyph glyph-name="uniF280" unicode="&#xf280;" 
+d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72
+h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275
+l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+    <glyph glyph-name="uniF281" unicode="&#xf281;" horiz-adv-x="1792" 
+d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5
+l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44
+t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106
+q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+    <glyph glyph-name="_602" unicode="&#xf282;" horiz-adv-x="1792" 
+d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53
+q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+    <glyph glyph-name="_603" unicode="&#xf283;" horiz-adv-x="2304" 
+d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+    <glyph glyph-name="_604" unicode="&#xf284;" horiz-adv-x="1792" 
+d="M1584 246l-218 111q-74 -120 -196.5 -189t-263.5 -69q-147 0 -271 72t-196 196t-72 270q0 110 42.5 209.5t115 172t172 115t209.5 42.5q131 0 247.5 -60.5t192.5 -168.5l215 125q-110 169 -286.5 265t-378.5 96q-161 0 -308 -63t-253 -169t-169 -253t-63 -308t63 -308
+t169 -253t253 -169t308 -63q213 0 397.5 107t290.5 292zM1030 643l693 -352q-116 -253 -334.5 -400t-492.5 -147q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q260 0 470.5 -133.5t335.5 -366.5zM1543 640h-39v-160h-96v352h136q32 0 54.5 -20
+t28.5 -48t1 -56t-27.5 -48t-57.5 -20z" />
+    <glyph glyph-name="uniF285" unicode="&#xf285;" horiz-adv-x="1792" 
+d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+    <glyph glyph-name="uniF286" unicode="&#xf286;" horiz-adv-x="1792" 
+d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96
+q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5
+q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96
+q16 0 16 -16z" />
+    <glyph glyph-name="_607" unicode="&#xf287;" horiz-adv-x="2304" 
+d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96
+q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5
+t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+    <glyph glyph-name="_608" unicode="&#xf288;" horiz-adv-x="1792" 
+d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348
+t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_609" unicode="&#xf289;" horiz-adv-x="2304" 
+d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22
+q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5
+q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13
+q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+    <glyph glyph-name="_610" unicode="&#xf28a;" 
+d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83
+t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20
+q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5
+t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+    <glyph glyph-name="_611" unicode="&#xf28b;" 
+d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103
+t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_612" unicode="&#xf28c;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+    <glyph glyph-name="_613" unicode="&#xf28d;" 
+d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="_614" unicode="&#xf28e;" 
+d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273
+t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+    <glyph glyph-name="_615" unicode="&#xf290;" horiz-adv-x="1792" 
+d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5
+t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_616" unicode="&#xf291;" horiz-adv-x="2048" 
+d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5
+t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416
+q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441
+h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+    <glyph glyph-name="_617" unicode="&#xf292;" horiz-adv-x="1792" 
+d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12
+q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311
+q15 0 25 -12q9 -12 6 -28z" />
+    <glyph glyph-name="_618" unicode="&#xf293;" 
+d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5
+t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+    <glyph glyph-name="_619" unicode="&#xf294;" horiz-adv-x="1024" 
+d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+    <glyph glyph-name="_620" unicode="&#xf295;" 
+d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -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.5
+t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5
+t271.5 -112.5t112.5 -271.5z" />
+    <glyph glyph-name="_621" unicode="&#xf296;" horiz-adv-x="1792" 
+d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+    <glyph glyph-name="_622" unicode="&#xf297;" horiz-adv-x="1792" 
+d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111
+q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+    <glyph glyph-name="_623" unicode="&#xf298;" 
+d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14
+t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+    <glyph glyph-name="_624" unicode="&#xf299;" horiz-adv-x="1792" 
+d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57
+q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285
+q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+    <glyph glyph-name="_625" unicode="&#xf29a;" horiz-adv-x="1792" 
+d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42
+q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z
+M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-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.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298
+t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="_626" unicode="&#xf29b;" 
+d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300
+l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z
+M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+    <glyph glyph-name="_627" unicode="&#xf29c;" 
+d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5
+t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5
+t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5
+t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="_628" unicode="&#xf29d;" horiz-adv-x="1408" 
+d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457
+q-67 -192 -92 -234q-15 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521
+q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661
+q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+    <glyph glyph-name="_629" unicode="&#xf29e;" horiz-adv-x="2304" 
+d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10
+t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5
+t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5
+h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96
+t9.5 -70.5z" />
+    <glyph glyph-name="uniF2A0" unicode="&#xf2a0;" horiz-adv-x="1408" 
+d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5
+q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127
+l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272
+t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249
+q-18 -19 -45 -19z" />
+    <glyph glyph-name="uniF2A1" unicode="&#xf2a1;" horiz-adv-x="2176" 
+d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864
+q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136
+t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56
+t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56
+t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136
+t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+    <glyph glyph-name="uniF2A2" unicode="&#xf2a2;" horiz-adv-x="1792" 
+d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z
+M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72
+t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45
+t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4
+q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+    <glyph glyph-name="uniF2A3" unicode="&#xf2a3;" horiz-adv-x="2304" 
+d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55
+q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5
+q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101
+q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35
+q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5
+q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+    <glyph glyph-name="uniF2A4" unicode="&#xf2a4;" horiz-adv-x="1792" 
+d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19
+t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74
+t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233
+l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+    <glyph glyph-name="uniF2A5" unicode="&#xf2a5;" 
+d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2
+q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10
+q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5
+t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2A6" unicode="&#xf2a6;" horiz-adv-x="1535" 
+d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5
+l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5
+q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9
+q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+    <glyph glyph-name="uniF2A7" unicode="&#xf2a7;" horiz-adv-x="1664" 
+d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37
+t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38
+l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147q-2 -1 -5 -3.5t-4 -4.5q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148
+q-34 23 -76 23q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26
+l-12 224q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+    <glyph glyph-name="uniF2A8" unicode="&#xf2a8;" horiz-adv-x="1792" 
+d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5
+q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841
+q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5
+q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+    <glyph glyph-name="uniF2A9" unicode="&#xf2a9;" horiz-adv-x="1280" 
+d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5
+q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z
+M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+    <glyph glyph-name="uniF2AA" unicode="&#xf2aa;" 
+d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z
+M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5
+q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 42 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5
+t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AB" unicode="&#xf2ab;" 
+d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114
+q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5
+t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5
+t103 -385.5z" />
+    <glyph glyph-name="uniF2AC" unicode="&#xf2ac;" horiz-adv-x="1664" 
+d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35
+q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5
+t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+    <glyph glyph-name="uniF2AD" unicode="&#xf2ad;" 
+d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115
+q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15
+t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960
+q119 0 203.5 -84.5t84.5 -203.5z" />
+    <glyph glyph-name="uniF2AE" unicode="&#xf2ae;" horiz-adv-x="2304" 
+d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7
+q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158
+q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+    <glyph glyph-name="uniF2B0" unicode="&#xf2b0;" 
+d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104
+q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108
+l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z
+M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+    <glyph glyph-name="uniF2B1" unicode="&#xf2b1;" horiz-adv-x="1664" 
+d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5
+t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+    <glyph glyph-name="uniF2B2" unicode="&#xf2b2;" horiz-adv-x="1792" 
+d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5
+t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114
+q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50
+q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5
+t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46
+q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5
+q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177
+t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+    <glyph glyph-name="uniF2B3" unicode="&#xf2b3;" 
+d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110
+h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+    <glyph glyph-name="uniF2B4" unicode="&#xf2b4;" 
+d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5
+q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B5" unicode="&#xf2b5;" horiz-adv-x="2304" 
+d="M192 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32zM1665 442q-10 13 -38.5 50t-41.5 54t-38 49t-42.5 53t-40.5 47t-45 49l-125 -140q-83 -94 -208.5 -92t-205.5 98q-57 69 -56.5 158t58.5 157l177 206q-22 11 -51 16.5t-47.5 6t-56.5 -0.5t-49 -1q-92 0 -158 -66
+l-158 -158h-155v-544q5 0 21 0.5t22 0t19.5 -2t20.5 -4.5t17.5 -8.5t18.5 -13.5l297 -292q115 -111 227 -111q78 0 125 47q57 -20 112.5 8t72.5 85q74 -6 127 44q20 18 36 45.5t14 50.5q10 -10 43 -10q43 0 77 21t49.5 53t12 71.5t-30.5 73.5zM1824 384h96v512h-93l-157 180
+q-66 76 -169 76h-167q-89 0 -146 -67l-209 -243q-28 -33 -28 -75t27 -75q43 -51 110 -52t111 49l193 218q25 23 53.5 21.5t47 -27t8.5 -56.5q16 -19 56 -63t60 -68q29 -36 82.5 -105.5t64.5 -84.5q52 -66 60 -140zM2112 384q40 0 56 32t0 64t-56 32t-56 -32t0 -64t56 -32z
+M2304 960v-640q0 -26 -19 -45t-45 -19h-434q-27 -65 -82 -106.5t-125 -51.5q-33 -48 -80.5 -81.5t-102.5 -45.5q-42 -53 -104.5 -81.5t-128.5 -24.5q-60 -34 -126 -39.5t-127.5 14t-117 53.5t-103.5 81l-287 282h-358q-26 0 -45 19t-19 45v672q0 26 19 45t45 19h421
+q14 14 47 48t47.5 48t44 40t50.5 37.5t51 25.5t62 19.5t68 5.5h117q99 0 181 -56q82 56 181 56h167q35 0 67 -6t56.5 -14.5t51.5 -26.5t44.5 -31t43 -39.5t39 -42t41 -48t41.5 -48.5h355q26 0 45 -19t19 -45z" />
+    <glyph glyph-name="uniF2B6" unicode="&#xf2b6;" horiz-adv-x="1792" 
+d="M1792 882v-978q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v978q0 15 11 24q8 7 39 34.5t41.5 36t45.5 37.5t70 55.5t96 73t143.5 107t192.5 140.5q5 4 52.5 40t71.5 52.5t64 35t69 18.5t69 -18.5t65 -35.5t71 -52t52 -40q110 -80 192.5 -140.5t143.5 -107
+t96 -73t70 -55.5t45.5 -37.5t41.5 -36t39 -34.5q11 -9 11 -24zM1228 297q263 191 345 252q11 8 12.5 20.5t-6.5 23.5l-38 52q-8 11 -21 12.5t-24 -6.5q-231 -169 -343 -250q-5 -3 -52 -39t-71.5 -52.5t-64.5 -35t-69 -18.5t-69 18.5t-64.5 35t-71.5 52.5t-52 39
+q-186 134 -343 250q-11 8 -24 6.5t-21 -12.5l-38 -52q-8 -11 -6.5 -23.5t12.5 -20.5q82 -61 345 -252q10 -8 50 -38t65 -47t64 -39.5t77.5 -33.5t75.5 -11t75.5 11t79 34.5t64.5 39.5t65 47.5t48 36.5z" />
+    <glyph glyph-name="uniF2B7" unicode="&#xf2b7;" horiz-adv-x="1792" 
+d="M1474 623l39 -51q8 -11 6.5 -23.5t-11.5 -20.5q-43 -34 -126.5 -98.5t-146.5 -113t-67 -51.5q-39 -32 -60 -48t-60.5 -41t-76.5 -36.5t-74 -11.5h-1h-1q-37 0 -74 11.5t-76 36.5t-61 41.5t-60 47.5q-5 4 -65 50.5t-143.5 111t-122.5 94.5q-11 8 -12.5 20.5t6.5 23.5
+l37 52q8 11 21.5 13t24.5 -7q94 -73 306 -236q5 -4 43.5 -35t60.5 -46.5t56.5 -32.5t58.5 -17h1h1q24 0 58.5 17t56.5 32.5t60.5 46.5t43.5 35q258 198 313 242q11 8 24 6.5t21 -12.5zM1664 -96v928q-90 83 -159 139q-91 74 -389 304q-3 2 -43 35t-61 48t-56 32.5t-59 17.5
+h-1h-1q-24 0 -59 -17.5t-56 -32.5t-61 -48t-43 -35q-215 -166 -315.5 -245.5t-129.5 -104t-82 -74.5q-14 -12 -21 -19v-928q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 832v-928q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v928q0 56 41 94
+q123 114 350 290.5t233 181.5q36 30 59 47.5t61.5 42t76 36.5t74.5 12h1h1q37 0 74.5 -12t76 -36.5t61.5 -42t59 -47.5q43 -36 156 -122t226 -177t201 -173q41 -38 41 -94z" />
+    <glyph glyph-name="uniF2B8" unicode="&#xf2b8;" 
+d="M330 1l202 -214l-34 236l-216 213zM556 -225l274 218l-11 245l-300 -215zM245 413l227 -213l-48 327l-245 204zM495 189l317 214l-14 324l-352 -200zM843 178l95 -80l-2 239l-103 79q0 -1 1 -8.5t0 -12t-5 -7.5l-78 -52l85 -70q7 -6 7 -88zM138 930l256 -200l-68 465
+l-279 173zM1173 267l15 234l-230 -164l2 -240zM417 722l373 194l-19 441l-423 -163zM1270 357l20 233l-226 142l-2 -105l144 -95q6 -4 4 -9l-7 -119zM1461 496l30 222l-179 -128l-20 -228zM1273 329l-71 49l-8 -117q0 -5 -4 -8l-234 -187q-7 -5 -14 0l-98 83l7 -161
+q0 -5 -4 -8l-293 -234q-4 -2 -6 -2q-8 2 -8 3l-228 242q-4 4 -59 277q-2 7 5 11l61 37q-94 86 -95 92l-72 351q-2 7 6 12l94 45q-133 100 -135 108l-96 466q-2 10 7 13l433 135q5 0 8 -1l317 -153q6 -4 6 -9l20 -463q0 -7 -6 -10l-118 -61l126 -85q5 -2 5 -8l5 -123l121 74
+q5 4 11 0l84 -56l3 110q0 6 5 9l206 126q6 3 11 0l245 -135q4 -4 5 -7t-6.5 -60t-17.5 -124.5t-10 -70.5q0 -5 -4 -7l-191 -153q-6 -5 -13 0z" />
+    <glyph glyph-name="uniF2B9" unicode="&#xf2b9;" horiz-adv-x="1664" 
+d="M1201 298q0 57 -5.5 107t-21 100.5t-39.5 86t-64 58t-91 22.5q-6 -4 -33.5 -20.5t-42.5 -24.5t-40.5 -20t-49 -17t-46.5 -5t-46.5 5t-49 17t-40.5 20t-42.5 24.5t-33.5 20.5q-51 0 -91 -22.5t-64 -58t-39.5 -86t-21 -100.5t-5.5 -107q0 -73 42 -121.5t103 -48.5h576
+q61 0 103 48.5t42 121.5zM1028 892q0 108 -76.5 184t-183.5 76t-183.5 -76t-76.5 -184q0 -107 76.5 -183t183.5 -76t183.5 76t76.5 183zM1664 352v-192q0 -14 -9 -23t-23 -9h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216
+q66 0 113 -47t47 -113v-224h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23v-192q0 -14 -9 -23t-23 -9h-96v-128h96q14 0 23 -9t9 -23z" />
+    <glyph glyph-name="uniF2BA" unicode="&#xf2ba;" horiz-adv-x="1664" 
+d="M1028 892q0 -107 -76.5 -183t-183.5 -76t-183.5 76t-76.5 183q0 108 76.5 184t183.5 76t183.5 -76t76.5 -184zM980 672q46 0 82.5 -17t60 -47.5t39.5 -67t24 -81t11.5 -82.5t3.5 -79q0 -67 -39.5 -118.5t-105.5 -51.5h-576q-66 0 -105.5 51.5t-39.5 118.5q0 48 4.5 93.5
+t18.5 98.5t36.5 91.5t63 64.5t93.5 26h5q7 -4 32 -19.5t35.5 -21t33 -17t37 -16t35 -9t39.5 -4.5t39.5 4.5t35 9t37 16t33 17t35.5 21t32 19.5zM1664 928q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-128h96
+q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-96v-224q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h1216q66 0 113 -47t47 -113v-224h96q13 0 22.5 -9.5t9.5 -22.5v-192zM1408 -96v1472q0 13 -9.5 22.5t-22.5 9.5h-1216
+q-13 0 -22.5 -9.5t-9.5 -22.5v-1472q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5z" />
+    <glyph glyph-name="uniF2BB" unicode="&#xf2bb;" horiz-adv-x="2048" 
+d="M1024 405q0 64 -9 117.5t-29.5 103t-60.5 78t-97 28.5q-6 -4 -30 -18t-37.5 -21.5t-35.5 -17.5t-43 -14.5t-42 -4.5t-42 4.5t-43 14.5t-35.5 17.5t-37.5 21.5t-30 18q-57 0 -97 -28.5t-60.5 -78t-29.5 -103t-9 -117.5t37 -106.5t91 -42.5h512q54 0 91 42.5t37 106.5z
+M867 925q0 94 -66.5 160.5t-160.5 66.5t-160.5 -66.5t-66.5 -160.5t66.5 -160.5t160.5 -66.5t160.5 66.5t66.5 160.5zM1792 416v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1792 676v56q0 15 -10.5 25.5t-25.5 10.5h-568
+q-15 0 -25.5 -10.5t-10.5 -25.5v-56q0 -15 10.5 -25.5t25.5 -10.5h568q15 0 25.5 10.5t10.5 25.5zM1792 928v64q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-352v96q0 14 -9 23t-23 9
+h-64q-14 0 -23 -9t-9 -23v-96h-768v96q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-96h-352q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BC" unicode="&#xf2bc;" horiz-adv-x="2048" 
+d="M1024 405q0 -64 -37 -106.5t-91 -42.5h-512q-54 0 -91 42.5t-37 106.5t9 117.5t29.5 103t60.5 78t97 28.5q6 -4 30 -18t37.5 -21.5t35.5 -17.5t43 -14.5t42 -4.5t42 4.5t43 14.5t35.5 17.5t37.5 21.5t30 18q57 0 97 -28.5t60.5 -78t29.5 -103t9 -117.5zM867 925
+q0 -94 -66.5 -160.5t-160.5 -66.5t-160.5 66.5t-66.5 160.5t66.5 160.5t160.5 66.5t160.5 -66.5t66.5 -160.5zM1792 480v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1792 732v-56q0 -15 -10.5 -25.5t-25.5 -10.5h-568
+q-15 0 -25.5 10.5t-10.5 25.5v56q0 15 10.5 25.5t25.5 10.5h568q15 0 25.5 -10.5t10.5 -25.5zM1792 992v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM1920 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1728q-13 0 -22.5 -9.5
+t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h352v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h768v96q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-96h352q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113
+t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2BD" unicode="&#xf2bd;" horiz-adv-x="1792" 
+d="M1523 197q-22 155 -87.5 257.5t-184.5 118.5q-67 -74 -159.5 -115.5t-195.5 -41.5t-195.5 41.5t-159.5 115.5q-119 -16 -184.5 -118.5t-87.5 -257.5q106 -150 271 -237.5t356 -87.5t356 87.5t271 237.5zM1280 896q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5
+t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1792 640q0 -182 -71 -347.5t-190.5 -286t-285.5 -191.5t-349 -71q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2BE" unicode="&#xf2be;" horiz-adv-x="1792" 
+d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348q0 -181 -70.5 -347t-190.5 -286t-286 -191.5t-349 -71.5t-349 71t-285.5 191.5t-190.5 286t-71 347.5t71 348t191 286t286 191t348 71zM1515 185q149 205 149 455q0 156 -61 298t-164 245t-245 164t-298 61t-298 -61
+t-245 -164t-164 -245t-61 -298q0 -250 149 -455q66 327 306 327q131 -128 313 -128t313 128q240 0 306 -327zM1280 832q0 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 glyph-name="uniF2C0" unicode="&#xf2c0;" 
+d="M1201 752q47 -14 89.5 -38t89 -73t79.5 -115.5t55 -172t22 -236.5q0 -154 -100 -263.5t-241 -109.5h-854q-141 0 -241 109.5t-100 263.5q0 131 22 236.5t55 172t79.5 115.5t89 73t89.5 38q-79 125 -79 272q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5
+t198.5 -40.5t163.5 -109.5t109.5 -163.5t40.5 -198.5q0 -147 -79 -272zM768 1408q-159 0 -271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5zM1195 -128q88 0 150.5 71.5t62.5 173.5q0 239 -78.5 377t-225.5 145
+q-145 -127 -336 -127t-336 127q-147 -7 -225.5 -145t-78.5 -377q0 -102 62.5 -173.5t150.5 -71.5h854z" />
+    <glyph glyph-name="uniF2C1" unicode="&#xf2c1;" horiz-adv-x="1280" 
+d="M1024 278q0 -64 -37 -107t-91 -43h-512q-54 0 -91 43t-37 107t9 118t29.5 104t61 78.5t96.5 28.5q80 -75 188 -75t188 75q56 0 96.5 -28.5t61 -78.5t29.5 -104t9 -118zM870 797q0 -94 -67.5 -160.5t-162.5 -66.5t-162.5 66.5t-67.5 160.5t67.5 160.5t162.5 66.5
+t162.5 -66.5t67.5 -160.5zM1152 -96v1376h-1024v-1376q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1280 1376v-1472q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v1472q0 66 47 113t113 47h352v-96q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v96h352
+q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C2" unicode="&#xf2c2;" horiz-adv-x="2048" 
+d="M896 324q0 54 -7.5 100.5t-24.5 90t-51 68.5t-81 25q-64 -64 -156 -64t-156 64q-47 0 -81 -25t-51 -68.5t-24.5 -90t-7.5 -100.5q0 -55 31.5 -93.5t75.5 -38.5h426q44 0 75.5 38.5t31.5 93.5zM768 768q0 80 -56 136t-136 56t-136 -56t-56 -136t56 -136t136 -56t136 56
+t56 136zM1792 288v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1408 544v64q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1792 544v64q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23
+v-64q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1792 800v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM128 1152h1792v96q0 14 -9 23t-23 9h-1728q-14 0 -23 -9t-9 -23v-96zM2048 1248v-1216q0 -66 -47 -113t-113 -47h-1728
+q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C3" unicode="&#xf2c3;" horiz-adv-x="2048" 
+d="M896 324q0 -55 -31.5 -93.5t-75.5 -38.5h-426q-44 0 -75.5 38.5t-31.5 93.5q0 54 7.5 100.5t24.5 90t51 68.5t81 25q64 -64 156 -64t156 64q47 0 81 -25t51 -68.5t24.5 -90t7.5 -100.5zM768 768q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z
+M1792 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1408 608v-64q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h320q14 0 23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v64
+q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 864v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1920 32v1120h-1792v-1120q0 -13 9.5 -22.5t22.5 -9.5h1728q13 0 22.5 9.5t9.5 22.5zM2048 1248v-1216q0 -66 -47 -113t-113 -47
+h-1728q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1728q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2C4" unicode="&#xf2c4;" horiz-adv-x="1792" 
+d="M1255 749q0 318 -105 474.5t-330 156.5q-222 0 -326 -157t-104 -474q0 -316 104 -471.5t326 -155.5q74 0 131 17q-22 43 -39 73t-44 65t-53.5 56.5t-63 36t-77.5 14.5q-46 0 -79 -16l-49 97q105 91 276 91q132 0 215.5 -54t150.5 -155q67 149 67 402zM1645 117h117
+q3 -27 -2 -67t-26.5 -95t-58 -100.5t-107 -78t-162.5 -32.5q-71 0 -130.5 19t-105.5 56t-79 78t-66 96q-97 -27 -205 -27q-150 0 -292.5 58t-253 158.5t-178 249t-67.5 317.5q0 170 67.5 319.5t178.5 250.5t253.5 159t291.5 58q121 0 238.5 -36t217 -106t176 -164.5
+t119.5 -219t43 -261.5q0 -190 -80.5 -347.5t-218.5 -264.5q47 -70 93.5 -106.5t104.5 -36.5q61 0 94 37.5t38 85.5z" />
+    <glyph glyph-name="uniF2C5" unicode="&#xf2c5;" horiz-adv-x="2304" 
+d="M453 -101q0 -21 -16 -37.5t-37 -16.5q-1 0 -13 3q-63 15 -162 140q-225 284 -225 676q0 341 213 614q39 51 95 103.5t94 52.5q19 0 35 -13.5t16 -32.5q0 -27 -63 -90q-98 -102 -147 -184q-119 -199 -119 -449q0 -281 123 -491q50 -85 136 -173q2 -3 14.5 -16t19.5 -21
+t17 -20.5t14.5 -23.5t4.5 -21zM1796 33q0 -29 -17.5 -48.5t-46.5 -19.5h-1081q-26 0 -45 19t-19 45q0 29 17.5 48.5t46.5 19.5h1081q26 0 45 -19t19 -45zM1581 644q0 -134 -67 -233q-25 -38 -69.5 -78.5t-83.5 -60.5q-16 -10 -27 -10q-7 0 -15 6t-8 12q0 9 19 30t42 46
+t42 67.5t19 88.5q0 76 -35 130q-29 42 -46 42q-3 0 -3 -5q0 -12 7.5 -35.5t7.5 -36.5q0 -22 -21.5 -35t-44.5 -13q-66 0 -66 76q0 15 1.5 44t1.5 44q0 25 -10 46q-13 25 -42 53.5t-51 28.5q-5 0 -7 -0.5t-3.5 -2.5t-1.5 -6q0 -2 16 -26t16 -54q0 -37 -19 -68t-46 -54
+t-53.5 -46t-45.5 -54t-19 -68q0 -98 42 -160q29 -43 79 -63q16 -5 17 -10q1 -2 1 -5q0 -16 -18 -16q-6 0 -33 11q-119 43 -195 139.5t-76 218.5q0 55 24.5 115.5t60 115t70.5 108.5t59.5 113.5t24.5 111.5q0 53 -25 94q-29 48 -56 64q-19 9 -19 21q0 20 41 20q50 0 110 -29
+q41 -19 71 -44.5t49.5 -51t33.5 -62.5t22 -69t16 -80q0 -1 3 -17.5t4.5 -25t5.5 -25t9 -27t11 -21.5t14.5 -16.5t18.5 -5.5q23 0 37 14t14 37q0 25 -20 67t-20 52t10 10q27 0 93 -70q72 -76 102.5 -156t30.5 -186zM2304 615q0 -274 -138 -503q-19 -32 -48 -72t-68 -86.5
+t-81 -77t-74 -30.5q-16 0 -31 15.5t-15 31.5q0 15 29 50.5t68.5 77t48.5 52.5q183 230 183 531q0 131 -20.5 235t-72.5 211q-58 119 -163 228q-2 3 -13 13.5t-16.5 16.5t-15 17.5t-15 20t-9.5 18.5t-4 19q0 19 16 35.5t35 16.5q70 0 196 -169q98 -131 146 -273t60 -314
+q2 -42 2 -64z" />
+    <glyph glyph-name="uniF2C6" unicode="&#xf2c6;" horiz-adv-x="1792" 
+d="M1189 229l147 693q9 44 -10.5 63t-51.5 7l-864 -333q-29 -11 -39.5 -25t-2.5 -26.5t32 -19.5l221 -69l513 323q21 14 32 6q7 -5 -4 -15l-415 -375v0v0l-16 -228q23 0 45 22l108 104l224 -165q64 -36 81 38zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71
+t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2C7" unicode="&#xf2c7;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v907h128v-907q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C8" unicode="&#xf2c8;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v651h128v-651q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2C9" unicode="&#xf2c9;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v395h128v-395q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CA" unicode="&#xf2ca;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 60 35 110t93 71v139h128v-139q58 -21 93 -71t35 -110zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5
+t93.5 226.5zM896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192
+v128h192z" />
+    <glyph glyph-name="uniF2CB" unicode="&#xf2cb;" horiz-adv-x="1024" 
+d="M640 192q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 79 56 135.5t136 56.5t136 -56.5t56 -135.5zM768 192q0 77 -34 144t-94 112v768q0 80 -56 136t-136 56t-136 -56t-56 -136v-768q-60 -45 -94 -112t-34 -144q0 -133 93.5 -226.5t226.5 -93.5t226.5 93.5t93.5 226.5z
+M896 192q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 182 128 313v711q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5v-711q128 -131 128 -313zM1024 768v-128h-192v128h192zM1024 1024v-128h-192v128h192zM1024 1280v-128h-192v128h192z" />
+    <glyph glyph-name="uniF2CC" unicode="&#xf2cc;" horiz-adv-x="1920" 
+d="M1433 1287q10 -10 10 -23t-10 -23l-626 -626q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l44 44q-72 91 -81.5 207t46.5 215q-74 71 -176 71q-106 0 -181 -75t-75 -181v-1280h-256v1280q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5q106 0 201 -41
+t166 -115q94 39 197 24.5t185 -79.5l44 44q10 10 23 10t23 -10zM1344 1024q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1600 896q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1856 1024q26 0 45 -19t19 -45t-19 -45t-45 -19
+t-45 19t-19 45t19 45t45 19zM1216 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1408 832q0 26 19 45t45 19t45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45zM1728 896q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 768
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 640q-26 0 -45 19t-19 45t19 45t45 19t45 -19t19 -45t-19 -45t-45 -19zM1600 768q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 512q-26 0 -45 19t-19 45t19 45t45 19t45 -19
+t19 -45t-19 -45t-45 -19zM1472 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1344 512q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1216 384
+q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1088 256q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19z" />
+    <glyph glyph-name="uniF2CD" unicode="&#xf2cd;" horiz-adv-x="1792" 
+d="M1664 448v-192q0 -169 -128 -286v-194q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v118q-63 -22 -128 -22h-768q-65 0 -128 22v-110q0 -17 -9.5 -28.5t-22.5 -11.5h-64q-13 0 -22.5 11.5t-9.5 28.5v186q-128 117 -128 286v192h1536zM704 864q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM768 928q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM704 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 992q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1056q0 -14 -9 -23t-23 -9t-23 9
+t-9 23t9 23t23 9t23 -9t9 -23zM704 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1792 608v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v640q0 106 75 181t181 75q108 0 184 -78q46 19 98 12t93 -39l22 22q11 11 22 0l42 -42
+q11 -11 0 -22l-314 -314q-11 -11 -22 0l-42 42q-11 11 0 22l22 22q-36 46 -40.5 104t23.5 108q-37 35 -88 35q-53 0 -90.5 -37.5t-37.5 -90.5v-640h1504q14 0 23 -9t9 -23zM896 1056q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1120q0 -14 -9 -23t-23 -9
+t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM768 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1120q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM896 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM832 1248q0 -14 -9 -23
+t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1024 1184q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM960 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23zM1088 1248q0 -14 -9 -23t-23 -9t-23 9t-9 23t9 23t23 9t23 -9t9 -23z" />
+    <glyph glyph-name="uniF2CE" unicode="&#xf2ce;" 
+d="M994 344q0 -86 -17 -197q-31 -215 -55 -313q-22 -90 -152 -90t-152 90q-24 98 -55 313q-17 110 -17 197q0 168 224 168t224 -168zM1536 768q0 -240 -134 -434t-350 -280q-8 -3 -15 3t-6 15q7 48 10 66q4 32 6 47q1 9 9 12q159 81 255.5 234t96.5 337q0 180 -91 330.5
+t-247 234.5t-337 74q-124 -7 -237 -61t-193.5 -140.5t-128 -202t-46.5 -240.5q1 -184 99 -336.5t257 -231.5q7 -3 9 -12q3 -21 6 -45q1 -9 5 -32.5t6 -35.5q1 -9 -6.5 -15t-15.5 -2q-148 58 -261 169.5t-173.5 264t-52.5 319.5q7 143 66 273.5t154.5 227t225 157.5t272.5 70
+q164 10 315.5 -46.5t261 -160.5t175 -250.5t65.5 -308.5zM994 800q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5zM1282 768q0 -122 -53.5 -228.5t-146.5 -177.5q-8 -6 -16 -2t-10 14q-6 52 -29 92q-7 10 3 20
+q58 54 91 127t33 155q0 111 -58.5 204t-157.5 141.5t-212 36.5q-133 -15 -229 -113t-109 -231q-10 -92 23.5 -176t98.5 -144q10 -10 3 -20q-24 -41 -29 -93q-2 -9 -10 -13t-16 2q-95 74 -148.5 183t-51.5 234q3 131 69 244t177 181.5t241 74.5q144 7 268 -60t196.5 -187.5
+t72.5 -263.5z" />
+    <glyph glyph-name="uniF2D0" unicode="&#xf2d0;" horiz-adv-x="1792" 
+d="M256 128h1280v768h-1280v-768zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D1" unicode="&#xf2d1;" horiz-adv-x="1792" 
+d="M1792 224v-192q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D2" unicode="&#xf2d2;" horiz-adv-x="2048" 
+d="M256 0h768v512h-768v-512zM1280 512h512v768h-768v-256h96q66 0 113 -47t47 -113v-352zM2048 1376v-960q0 -66 -47 -113t-113 -47h-608v-352q0 -66 -47 -113t-113 -47h-960q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h608v352q0 66 47 113t113 47h960q66 0 113 -47
+t47 -113z" />
+    <glyph glyph-name="uniF2D3" unicode="&#xf2d3;" horiz-adv-x="1792" 
+d="M1175 215l146 146q10 10 10 23t-10 23l-233 233l233 233q10 10 10 23t-10 23l-146 146q-10 10 -23 10t-23 -10l-233 -233l-233 233q-10 10 -23 10t-23 -10l-146 -146q-10 -10 -10 -23t10 -23l233 -233l-233 -233q-10 -10 -10 -23t10 -23l146 -146q10 -10 23 -10t23 10
+l233 233l233 -233q10 -10 23 -10t23 10zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D4" unicode="&#xf2d4;" horiz-adv-x="1792" 
+d="M1257 425l-146 -146q-10 -10 -23 -10t-23 10l-169 169l-169 -169q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l169 169l-169 169q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l169 -169l169 169q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23
+l-169 -169l169 -169q10 -10 10 -23t-10 -23zM256 128h1280v1024h-1280v-1024zM1792 1248v-1216q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D5" unicode="&#xf2d5;" horiz-adv-x="1792" 
+d="M1070 358l306 564h-654l-306 -564h654zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D6" unicode="&#xf2d6;" horiz-adv-x="1794" 
+d="M1291 1060q-15 17 -35 8.5t-26 -28.5t5 -38q14 -17 40 -14.5t34 20.5t-18 52zM895 814q-8 -8 -19.5 -8t-18.5 8q-8 8 -8 19t8 18q7 8 18.5 8t19.5 -8q7 -7 7 -18t-7 -19zM1060 740l-35 -35q-12 -13 -29.5 -13t-30.5 13l-38 38q-12 13 -12 30t12 30l35 35q12 12 29.5 12
+t30.5 -12l38 -39q12 -12 12 -29.5t-12 -29.5zM951 870q-7 -8 -18.5 -8t-19.5 8q-7 8 -7 19t7 19q8 8 19 8t19 -8t8 -19t-8 -19zM1354 968q-34 -64 -107.5 -85.5t-127.5 16.5q-38 28 -61 66.5t-21 87.5t39 92t75.5 53t70.5 -5t70 -51q2 -2 13 -12.5t14.5 -13.5t13 -13.5
+t12.5 -15.5t10 -15.5t8.5 -18t4 -18.5t1 -21t-5 -22t-9.5 -24zM1555 486q3 20 -8.5 34.5t-27.5 21.5t-33 17t-23 20q-40 71 -84 98.5t-113 11.5q19 13 40 18.5t33 4.5l12 -1q2 45 -34 90q6 20 6.5 40.5t-2.5 30.5l-3 10q43 24 71 65t34 91q10 84 -43 150.5t-137 76.5
+q-60 7 -114 -18.5t-82 -74.5q-30 -51 -33.5 -101t14.5 -87t43.5 -64t56.5 -42q-45 4 -88 36t-57 88q-28 108 32 222q-16 21 -29 32q-50 0 -89 -19q19 24 42 37t36 14l13 1q0 50 -13 78q-10 21 -32.5 28.5t-47 -3.5t-37.5 -40q2 4 4 7q-7 -28 -6.5 -75.5t19 -117t48.5 -122.5
+q-25 -14 -47 -36q-35 -16 -85.5 -70.5t-84.5 -101.5l-33 -46q-90 -34 -181 -125.5t-75 -162.5q1 -16 11 -27q-15 -12 -30 -30q-21 -25 -21 -54t21.5 -40t63.5 6q41 19 77 49.5t55 60.5q-2 2 -6.5 5t-20.5 7.5t-33 3.5q23 5 51 12.5t40 10t27.5 6t26 4t23.5 0.5q14 -7 22 34
+q7 37 7 90q0 102 -40 150q106 -103 101 -219q-1 -29 -15 -50t-27 -27l-13 -6q-4 -7 -19 -32t-26 -45.5t-26.5 -52t-25 -61t-17 -63t-6.5 -66.5t10 -63q-35 54 -37 80q-22 -24 -34.5 -39t-33.5 -42t-30.5 -46t-16.5 -41t-0.5 -38t25.5 -27q45 -25 144 64t190.5 221.5
+t122.5 228.5q86 52 145 115.5t86 119.5q47 -93 154 -178q104 -83 167 -80q39 2 46 43zM1794 640q0 -182 -71 -348t-191 -286t-286.5 -191t-348.5 -71t-348.5 71t-286.5 191t-191 286t-71 348t71 348t191 286t286.5 191t348.5 71t348.5 -71t286.5 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2D7" unicode="&#xf2d7;" 
+d="M518 1353v-655q103 -1 191.5 1.5t125.5 5.5l37 3q68 2 90.5 24.5t39.5 94.5l33 142h103l-14 -322l7 -319h-103l-29 127q-15 68 -45 93t-84 26q-87 8 -352 8v-556q0 -78 43.5 -115.5t133.5 -37.5h357q35 0 59.5 2t55 7.5t54 18t48.5 32t46 50.5t39 73l93 216h89
+q-6 -37 -31.5 -252t-30.5 -276q-146 5 -263.5 8t-162.5 4h-44h-628l-376 -12v102l127 25q67 13 91.5 37t25.5 79l8 643q3 402 -8 645q-2 61 -25.5 84t-91.5 36l-127 24v102l376 -12h702q139 0 374 27q-6 -68 -14 -194.5t-12 -219.5l-5 -92h-93l-32 124q-31 121 -74 179.5
+t-113 58.5h-548q-28 0 -35.5 -8.5t-7.5 -30.5z" />
+    <glyph glyph-name="uniF2D8" unicode="&#xf2d8;" 
+d="M922 739v-182q0 -4 0.5 -15t0 -15l-1.5 -12t-3.5 -11.5t-6.5 -7.5t-11 -5.5t-16 -1.5v309q9 0 16 -1t11 -5t6.5 -5.5t3.5 -9.5t1 -10.5v-13.5v-14zM1238 643v-121q0 -1 0.5 -12.5t0 -15.5t-2.5 -11.5t-7.5 -10.5t-13.5 -3q-9 0 -14 9q-4 10 -4 165v7v8.5v9t1.5 8.5l3.5 7
+t5 5.5t8 1.5q6 0 10 -1.5t6.5 -4.5t4 -6t2 -8.5t0.5 -8v-9.5v-9zM180 407h122v472h-122v-472zM614 407h106v472h-159l-28 -221q-20 148 -32 221h-158v-472h107v312l45 -312h76l43 319v-319zM1039 712q0 67 -5 90q-3 16 -11 28.5t-17 20.5t-25 14t-26.5 8.5t-31 4t-29 1.5
+h-29.5h-12h-91v-472h56q169 -1 197 24.5t25 180.5q-1 62 -1 100zM1356 515v133q0 29 -2 45t-9.5 33.5t-24.5 25t-46 7.5q-46 0 -77 -34v154h-117v-472h110l7 30q30 -36 77 -36q50 0 66 30.5t16 83.5zM1536 1248v-1216q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113
+v1216q0 66 47 113t113 47h1216q66 0 113 -47t47 -113z" />
+    <glyph glyph-name="uniF2D9" unicode="&#xf2d9;" horiz-adv-x="2176" 
+d="M1143 -197q-6 1 -11 4q-13 8 -36 23t-86 65t-116.5 104.5t-112 140t-89.5 172.5q-17 3 -175 37q66 -213 235 -362t391 -184zM502 409l168 -28q-25 76 -41 167.5t-19 145.5l-4 53q-84 -82 -121 -224q5 -65 17 -114zM612 1018q-43 -64 -77 -148q44 46 74 68zM2049 584
+q0 161 -62 307t-167.5 252t-250.5 168.5t-304 62.5q-147 0 -281 -52.5t-240 -148.5q-30 -58 -45 -160q60 51 143 83.5t158.5 43t143 13.5t108.5 -1l40 -3q33 -1 53 -15.5t24.5 -33t6.5 -37t-1 -28.5q-126 11 -227.5 0.5t-183 -43.5t-142.5 -71.5t-131 -98.5
+q4 -36 11.5 -92.5t35.5 -178t62 -179.5q123 -6 247.5 14.5t214.5 53.5t162.5 67t109.5 59l37 24q22 16 39.5 20.5t30.5 -5t17 -34.5q14 -97 -39 -121q-208 -97 -467 -134q-135 -20 -317 -16q41 -96 110 -176.5t137 -127t130.5 -79t101.5 -43.5l39 -12q143 -23 263 15
+q195 99 314 289t119 418zM2123 621q-14 -135 -40 -212q-70 -208 -181.5 -346.5t-318.5 -253.5q-48 -33 -82 -44q-72 -26 -163 -16q-36 -3 -73 -3q-283 0 -504.5 173t-295.5 442q-1 0 -4 0.5t-5 0.5q-6 -50 2.5 -112.5t26 -115t36 -98t31.5 -71.5l14 -26q8 -12 54 -82
+q-71 38 -124.5 106.5t-78.5 140t-39.5 137t-17.5 107.5l-2 42q-5 2 -33.5 12.5t-48.5 18t-53 20.5t-57.5 25t-50 25.5t-42.5 27t-25 25.5q19 -10 50.5 -25.5t113 -45.5t145.5 -38l2 32q11 149 94 290q41 202 176 365q28 115 81 214q15 28 32 45t49 32q158 74 303.5 104
+t302 11t306.5 -97q220 -115 333 -336t87 -474z" />
+    <glyph glyph-name="uniF2DA" unicode="&#xf2da;" horiz-adv-x="1792" 
+d="M1341 752q29 44 -6.5 129.5t-121.5 142.5q-58 39 -125.5 53.5t-118 4.5t-68.5 -37q-12 -23 -4.5 -28t42.5 -10q23 -3 38.5 -5t44.5 -9.5t56 -17.5q36 -13 67.5 -31.5t53 -37t40 -38.5t30.5 -38t22 -34.5t16.5 -28.5t12 -18.5t10.5 -6t11 9.5zM1704 178
+q-52 -127 -148.5 -220t-214.5 -141.5t-253 -60.5t-266 13.5t-251 91t-210 161.5t-141.5 235.5t-46.5 303.5q1 41 8.5 84.5t12.5 64t24 80.5t23 73q-51 -208 1 -397t173 -318t291 -206t346 -83t349 74.5t289 244.5q20 27 18 14q0 -4 -4 -14zM1465 627q0 -104 -40.5 -199
+t-108.5 -164t-162 -109.5t-198 -40.5t-198 40.5t-162 109.5t-108.5 164t-40.5 199t40.5 199t108.5 164t162 109.5t198 40.5t198 -40.5t162 -109.5t108.5 -164t40.5 -199zM1752 915q-65 147 -180.5 251t-253 153.5t-292 53.5t-301 -36.5t-275.5 -129t-220 -211.5t-131 -297
+t-10 -373q-49 161 -51.5 311.5t35.5 272.5t109 227t165.5 180.5t207 126t232 71t242.5 9t236 -54t216 -124.5t178 -197q33 -50 62 -121t31 -112zM1690 573q12 244 -136.5 416t-396.5 240q-8 0 -10 5t24 8q125 -4 230 -50t173 -120t116 -168.5t58.5 -199t-1 -208
+t-61.5 -197.5t-122.5 -167t-185 -117.5t-248.5 -46.5q108 30 201.5 80t174 123t129.5 176.5t55 225.5z" />
+    <glyph glyph-name="uniF2DB" unicode="&#xf2db;" 
+d="M192 256v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 512v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 768v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16
+q0 16 16 16h112zM192 1024v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM192 1280v-128h-112q-16 0 -16 16v16h-48q-16 0 -16 16v32q0 16 16 16h48v16q0 16 16 16h112zM1280 1440v-1472q0 -40 -28 -68t-68 -28h-832q-40 0 -68 28
+t-28 68v1472q0 40 28 68t68 28h832q40 0 68 -28t28 -68zM1536 208v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 464v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 720v-32
+q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 976v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16h48q16 0 16 -16zM1536 1232v-32q0 -16 -16 -16h-48v-16q0 -16 -16 -16h-112v128h112q16 0 16 -16v-16
+h48q16 0 16 -16z" />
+    <glyph glyph-name="uniF2DC" unicode="&#xf2dc;" horiz-adv-x="1664" 
+d="M1566 419l-167 -33l186 -107q23 -13 29.5 -38.5t-6.5 -48.5q-14 -23 -39 -29.5t-48 6.5l-186 106l55 -160q13 -38 -12 -63.5t-60.5 -20.5t-48.5 42l-102 300l-271 156v-313l208 -238q16 -18 17 -39t-11 -36.5t-28.5 -25t-37 -5.5t-36.5 22l-112 128v-214q0 -26 -19 -45
+t-45 -19t-45 19t-19 45v214l-112 -128q-16 -18 -36.5 -22t-37 5.5t-28.5 25t-11 36.5t17 39l208 238v313l-271 -156l-102 -300q-13 -37 -48.5 -42t-60.5 20.5t-12 63.5l55 160l-186 -106q-23 -13 -48 -6.5t-39 29.5q-13 23 -6.5 48.5t29.5 38.5l186 107l-167 33
+q-29 6 -42 29t-8.5 46.5t25.5 40t50 10.5l310 -62l271 157l-271 157l-310 -62q-4 -1 -13 -1q-27 0 -44 18t-19 40t11 43t40 26l167 33l-186 107q-23 13 -29.5 38.5t6.5 48.5t39 30t48 -7l186 -106l-55 160q-13 38 12 63.5t60.5 20.5t48.5 -42l102 -300l271 -156v313
+l-208 238q-16 18 -17 39t11 36.5t28.5 25t37 5.5t36.5 -22l112 -128v214q0 26 19 45t45 19t45 -19t19 -45v-214l112 128q16 18 36.5 22t37 -5.5t28.5 -25t11 -36.5t-17 -39l-208 -238v-313l271 156l102 300q13 37 48.5 42t60.5 -20.5t12 -63.5l-55 -160l186 106
+q23 13 48 6.5t39 -29.5q13 -23 6.5 -48.5t-29.5 -38.5l-186 -107l167 -33q27 -5 40 -26t11 -43t-19 -40t-44 -18q-9 0 -13 1l-310 62l-271 -157l271 -157l310 62q29 6 50 -10.5t25.5 -40t-8.5 -46.5t-42 -29z" />
+    <glyph glyph-name="uniF2DD" unicode="&#xf2dd;" horiz-adv-x="1792" 
+d="M1473 607q7 118 -33 226.5t-113 189t-177 131t-221 57.5q-116 7 -225.5 -32t-192 -110.5t-135 -175t-59.5 -220.5q-7 -118 33 -226.5t113 -189t177.5 -131t221.5 -57.5q155 -9 293 59t224 195.5t94 283.5zM1792 1536l-349 -348q120 -117 180.5 -272t50.5 -321
+q-11 -183 -102 -339t-241 -255.5t-332 -124.5l-999 -132l347 347q-120 116 -180.5 271.5t-50.5 321.5q11 184 102 340t241.5 255.5t332.5 124.5q167 22 500 66t500 66z" />
+    <glyph glyph-name="uniF2DE" unicode="&#xf2de;" horiz-adv-x="1792" 
+d="M948 508l163 -329h-51l-175 350l-171 -350h-49l179 374l-78 33l21 49l240 -102l-21 -50zM563 1100l304 -130l-130 -304l-304 130zM907 915l240 -103l-103 -239l-239 102zM1188 765l191 -81l-82 -190l-190 81zM1680 640q0 159 -62 304t-167.5 250.5t-250.5 167.5t-304 62
+t-304 -62t-250.5 -167.5t-167.5 -250.5t-62 -304t62 -304t167.5 -250.5t250.5 -167.5t304 -62t304 62t250.5 167.5t167.5 250.5t62 304zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71
+t286 -191t191 -286t71 -348z" />
+    <glyph glyph-name="uniF2E0" unicode="&#xf2e0;" horiz-adv-x="1920" 
+d="M1334 302q-4 24 -27.5 34t-49.5 10.5t-48.5 12.5t-25.5 38q-5 47 33 139.5t75 181t32 127.5q-14 101 -117 103q-45 1 -75 -16l-3 -2l-5 -2.5t-4.5 -2t-5 -2t-5 -0.5t-6 1.5t-6 3.5t-6.5 5q-3 2 -9 8.5t-9 9t-8.5 7.5t-9.5 7.5t-9.5 5.5t-11 4.5t-11.5 2.5q-30 5 -48 -3
+t-45 -31q-1 -1 -9 -8.5t-12.5 -11t-15 -10t-16.5 -5.5t-17 3q-54 27 -84 40q-41 18 -94 -5t-76 -65q-16 -28 -41 -98.5t-43.5 -132.5t-40 -134t-21.5 -73q-22 -69 18.5 -119t110.5 -46q30 2 50.5 15t38.5 46q7 13 79 199.5t77 194.5q6 11 21.5 18t29.5 0q27 -15 21 -53
+q-2 -18 -51 -139.5t-50 -132.5q-6 -38 19.5 -56.5t60.5 -7t55 49.5q4 8 45.5 92t81.5 163.5t46 88.5q20 29 41 28q29 0 25 -38q-2 -16 -65.5 -147.5t-70.5 -159.5q-12 -53 13 -103t74 -74q17 -9 51 -15.5t71.5 -8t62.5 14t20 48.5zM383 86q3 -15 -5 -27.5t-23 -15.5
+q-14 -3 -26.5 5t-15.5 23q-3 14 5 27t22 16t27 -5t16 -23zM953 -177q12 -17 8.5 -37.5t-20.5 -32.5t-37.5 -8t-32.5 21q-11 17 -7.5 37.5t20.5 32.5t37.5 8t31.5 -21zM177 635q-18 -27 -49.5 -33t-57.5 13q-26 18 -32 50t12 58q18 27 49.5 33t57.5 -12q26 -19 32 -50.5
+t-12 -58.5zM1467 -42q19 -28 13 -61.5t-34 -52.5t-60.5 -13t-51.5 34t-13 61t33 53q28 19 60.5 13t52.5 -34zM1579 562q69 -113 42.5 -244.5t-134.5 -207.5q-90 -63 -199 -60q-20 -80 -84.5 -127t-143.5 -44.5t-140 57.5q-12 -9 -13 -10q-103 -71 -225 -48.5t-193 126.5
+q-50 73 -53 164q-83 14 -142.5 70.5t-80.5 128t-2 152t81 138.5q-36 60 -38 128t24.5 125t79.5 98.5t121 50.5q32 85 99 148t146.5 91.5t168 17t159.5 -66.5q72 21 140 17.5t128.5 -36t104.5 -80t67.5 -115t17.5 -140.5q52 -16 87 -57t45.5 -89t-5.5 -99.5t-58 -87.5z
+M455 1222q14 -20 9.5 -44.5t-24.5 -38.5q-19 -14 -43.5 -9.5t-37.5 24.5q-14 20 -9.5 44.5t24.5 38.5q19 14 43.5 9.5t37.5 -24.5zM614 1503q4 -16 -5 -30.5t-26 -18.5t-31 5.5t-18 26.5q-3 17 6.5 31t25.5 18q17 4 31 -5.5t17 -26.5zM1800 555q4 -20 -6.5 -37t-30.5 -21
+q-19 -4 -36 6.5t-21 30.5t6.5 37t30.5 22q20 4 36.5 -7.5t20.5 -30.5zM1136 1448q16 -27 8.5 -58.5t-35.5 -47.5q-27 -16 -57.5 -8.5t-46.5 34.5q-16 28 -8.5 59t34.5 48t58 9t47 -36zM1882 792q4 -15 -4 -27.5t-23 -16.5q-15 -3 -27.5 5.5t-15.5 22.5q-3 15 5 28t23 16
+q14 3 26.5 -5t15.5 -23zM1691 1033q15 -22 10.5 -49t-26.5 -43q-22 -15 -49 -10t-42 27t-10 49t27 43t48.5 11t41.5 -28z" />
+    <glyph glyph-name="uniF2E1" unicode="&#xf2e1;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E2" unicode="&#xf2e2;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E3" unicode="&#xf2e3;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E4" unicode="&#xf2e4;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E5" unicode="&#xf2e5;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E6" unicode="&#xf2e6;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E7" unicode="&#xf2e7;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="_698" unicode="&#xf2e8;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2E9" unicode="&#xf2e9;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EA" unicode="&#xf2ea;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EB" unicode="&#xf2eb;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EC" unicode="&#xf2ec;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2ED" unicode="&#xf2ed;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="uniF2EE" unicode="&#xf2ee;" horiz-adv-x="1792" 
+ />
+    <glyph glyph-name="lessequal" unicode="&#xf500;" horiz-adv-x="1792" 
+ />
+  </font>
+</defs></svg>
diff --git a/scipost/static/fa/fonts/fontawesome-webfont.ttf b/scipost/static/fa/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000000000000000000000000000000000000..35acda2fa1196aad98c2adf4378a7611dd713aa3
Binary files /dev/null and b/scipost/static/fa/fonts/fontawesome-webfont.ttf differ
diff --git a/scipost/static/fa/fonts/fontawesome-webfont.woff b/scipost/static/fa/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000000000000000000000000000000000000..400014a4b06eee3d0c0d54402a47ab2601b2862b
Binary files /dev/null and b/scipost/static/fa/fonts/fontawesome-webfont.woff differ
diff --git a/scipost/static/fa/fonts/fontawesome-webfont.woff2 b/scipost/static/fa/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..4d13fc60404b91e398a37200c4a77b645cfd9586
Binary files /dev/null and b/scipost/static/fa/fonts/fontawesome-webfont.woff2 differ
diff --git a/scipost/static/scipost/SciPost.css b/scipost/static/scipost/SciPost.css
index 44e1b4c27a9f5f124ba0bfed164a4ffca84c4685..af05481c254ebc51118cd25efa8bed3022dc0729 100644
--- a/scipost/static/scipost/SciPost.css
+++ b/scipost/static/scipost/SciPost.css
@@ -4,321 +4,12 @@ General style sheet for SciPost
 
 @import url(//fonts.googleapis.com/css?family=Merriweather+Sans);
 
-
-hr.hr6 {
-    height: 6px;
-    border: 0;
-    box-shadow: inset 0 6px 6px -6px rgba(0, 0, 0, 0.5);
-}
-hr.hr12 {
-    height: 12px;
-    border: 0;
-    box-shadow: inset 0 12px 12px -12px rgba(0, 0, 0, 0.5);
-}
-
-
-ul.personalTabMenu {
-  background-color: #dddddd;
-  display: inline-block;
-  font-size: 11px;
-  padding: 0px;
-}
-ul.personalTabMenu li {
-  display: inline-block;
-  margin: 0px;
-  padding: 4px;
-}
-ul.personalTabMenu li a {
-  padding: 4px;
-}
-ul.personalTabMenu li a.active {
-  background-color: #eeeeee;
-  border: 1px solid black;
-  padding: 4px;
-}
-ul.personalTabMenu li a.inactive {
-  background-color: #dddddd;
-  border: none;
-}
-
-.assignments_listing {
-    border-collapse: collapse;
-    margin: 0px 5px;
-    padding: 0px;
-}
-.assignments_listing tr {
-    background-color: #dddddd;
-    border: 1px solid black;
-}
-.assignments_listing td {
-    border: 1px solid black;
-    padding: 4px 8px;
-}
-.assignments_listing th {
-  border: 1px solid black;
-  padding: 4px 8px;
-}
-
-.commentcategorychoices {
-  list-style-type: none;
-}
-.commentcategorydisplay {
-  display: inline-block;
-  font-size: 10px;
-  margin: 2px 2px;
-  padding: 1px;
-  box-shadow: 1px 1px 3px #888888;
-  background: linear-gradient(to right,#fcfcfc, #f0f0f0);
-}
-.commentcategorydisplay h4, .commentcategorydisplay ul {
-  display: inline-block;
-  margin: 2px;
-  padding: 0px;
-}
-.commentcategorydisplay li {
-  display: inline-block;
-  margin: 2px;
-  padding: 4px 8px;
-  background-color: #dddddd;
-  font-size: 90%;
-}
-
-.commentid {
-  /*display: inline-block;*/
-/*  box-shadow: 1px 1px 3px #888888;*/
-/*  background: linear-gradient(to right,#f8f8f8, #e0e0e0);*/
-  /*font-size: 10px;*/
-}
-
-.forTesters {
-  background-color: #eeeeff;
-}
-
-.AddItemToList {
-  background-color: #000099;
-  border: 1px;
-  color: white;
-  padding: 4px;
-  font-size: 50%;
-}
-.RemoveItemFromList {
-  background-color: #990000;
-  border: 1px;
-  color: white;
-  padding: 4px;
-  font-size: 50%;
-}
-
-.GraphButton {
-  background-color: #dddddd;
-  font-size: 50%;
-  padding: 4px;
-}
-.GraphButton h1 {
-  padding: 1px;
-}
-
-.reportid {
-  display: inline-block;
-  box-shadow: 5px 5px 10px #888888;
-  background: linear-gradient(to right,#f8f8f8, #e0e0e0);
-}
-
-.reportingDeadline {
-  color: #ff0000;
-}
-
-/* For two-column text display */
-.twocolumn {
-  -webkit-column-count: 2; /* Chrome, Safari, Opera */
-  -moz-column-count: 2; /* Firefox */
-  column-count: 2;
-  -webkit-column-width: 360px; /* Chrome, Safari, Opera */
-  column-width: 360px;
-  -webkit-column-rule-width: 1px; /* Chrome, Safari, Opera */
-  -moz-column-rule-width: 1px; /* Firefox */
-  column-rule-width: 1px;
-}
-
-.flex-container {
-  display: -webkit-flex;
-  display: flex;
-  flex-wrap: wrap;
-}
-.flex-container #headerflex {
-  align-contents: center;
-  justify-content: space-between;
-  margin: 0px;
-  padding: 0px;
-}
-.flex-logobox {
-  align-self: center;
-  margin: 0px;
-  padding: 0px;
-}
-.flex-blurbbox {
-  margin: 0px;
-  padding: 0px;
-  align-self: center;
-  margin-left: auto;
-}
-.flex-commentbox {
-/*  background-color: #f4f4f4; */
-  margin: 0px;
-  padding: 0px;
-  box-shadow: 1px 1px 3px #888888;
-  background: linear-gradient(to right,#f8f8f8, #e0e0e0);
-}
-.flex-Fellowactionbox {
-/*  background-color: #6884C2;*/
-  background-color: #cccccc;
-  margin: 0px;
-  padding: 5px 10px;
-}
-.flex-greybox {
-  background-color: #f4f4f4;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-greybox320 {
-  background-color: #f4f4f4;
-  width: 320px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-greybox480 {
-  background-color: #f4f4f4;
-  width: 480px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-greybox640 {
-  background-color: #f4f4f4;
-  width: 640px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-greybox800 {
-  background-color: #f4f4f4;
-  width: 800px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox {
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox320 {
-  width: 320px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox480 {
-  width: 480px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox640 {
-  width: 640px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox800 {
-  width: 800px;
-  margin: 10px;
-  padding: 10px;
-}
-.flex-whitebox0 {
-  margin: 0px;
-  padding: 0px;
-}
-.flex-whitebox0v {
-  margin: 0px 10px;
-  padding: 0px;
-}
-.flex-thesesbox {
-  width: 480px;
-  margin: 0px 10px;
-  padding: 0px;
-}
-
 .pubtitleli {
-  martin: 1px;
   padding: 3px 5px;
   background-color: #f4f4f4;
   border-radius: 4px;
 }
 
-.ref_listing {
-    border-collapse: collapse;
-    margin: 0px 5px;
-    padding: 0px;
-}
-.ref_listing tr {
-    background-color: #dddddd;
-    border: 1px solid black;
-}
-.ref_listing td {
-    padding: 2px 8px;
-}
-
-.tableofInvitees td {
-  padding: 0px 4px;
-}
-.tableofInviteesResponded td {
-  background-color: #f0f0f0;
-  padding: 0px 4px;
-}
-.tableofInviteesDeclined td {
-  background-color: #e09090;
-  padding: 0px 4px;
-}
-
-body section div.sectionbox {
-  width: 300px;
-  background-color: #f4f4f4;
-  margin: 10px;
-  padding: 10px;
-  display: inline-block;
-  vertical-align: top;
-}
-
-.submitButton {
-  background-color: #002B49;
-  color: #ffffff;
-  border: 1px solid #FFA300;
-  margin: 5px;
-  padding: 5px;
-}
-
-header {
-  background-color: #002B49;
-  color: #ffffff;
-  border: 0px solid grey; border-radius:0px;
-  margin: 0px;
-  padding: 0px 5px;
-}
-header h1 {
-  font-size: 50px;
-  font-weight: 400;
-  margin: 10px;
-  padding: 10px;
-}
-header a {
-  text-decoration: none;
-}
-header a:hover {
-  color: #ffffff;
-}
-header img {
-  margin: 10px 20px;
-  padding: 0px;
-}
-header p {
-  border: 0px solid white;
-  margin: 25px;
-}
-
 ol {
   list-style-type: none;
   counter-reset: item;
@@ -343,89 +34,9 @@ li ol > li:before {
 }
 
 
-p#goodCommenter {
+.good_commenter {
   font-size: 90%;
-}
-
-section {
-  color: #111111;
-  background-color: white;
-  margin: 0px 15px;
-  padding: 10px;
-  text-align: justify;
-}
-section a {
-  color: #6884C2;
-  text-decoration: none;
-  target: _parent;
-}
-section a:hover {
-  color: #103050;
-  text-decoration: underline;
-}
-section div {
-  margin: 0px;
-  padding: 0px;
-}
-
-section h1, h2, h3, h4, h5, h6 {
-  margin: 0px;
-  padding: 6px 2px;
-/*  color: #103050; */
-  text-shadow: 0px 0px 0px #222222;
-  font-weight: 500;
-}
-section form {
-  margin: 0px;
-  padding: 0px;
-}
-section form label {
-  color: black;
-  font-weight: 400;
-}
-section form ul li {
-  padding: 0px;
-}
-section form ul li label {
-  color: black;
-}
-
-form#refereeSearch input#id_last_name{
-  width: 20em;
-  margin: 1em;
-}
-
-
-section p {
-  margin: 2px;
-  padding: 2px;
-}
-section table {
-  margin: 0px;
-  padding: 0px;
-}
-section table th, td {
-  color: #102040;
-  text-align: left;
-  padding: 0px;
-}
-
-section ul {
-  margin: 0px;
-}
-section ul li {
-  padding: 2px;
-}
-
-table.tablePadded10 th {
-  padding: 5px 10px;
-}
-table.tablePadded10 td {
-  padding: 0px 10px;
-}
-
-#NWOOpenAccess {
-  font-size: 80%;
+  font-style: italic;
 }
 
 .opinionsDisplay {
@@ -486,178 +97,7 @@ table.tablePadded10 td {
   background-color: #990000;
 }
 
-article {
-  background-color:#eeeeee;
-  border: 1px solid grey; border-radius:5px;
-  margin:5px; margin-bottom:10px;
-  padding:5px;
-}
-
-footer {
-  background-color: #002B49;
-  color: #ffffff;
-  border-top: 1px solid grey;
-}
-footer a {
-  color: #eeeeee;
-}
-footer a:hover {
-  color: #ffffff;
-  text-decoration: underline;
-}
-
-input, textarea {
-  background-color: #f8f8f8;
-  color: black;
-  border: 1px solid black; border-radius: 1px;
-}
-/*input[type='text'], input[type='URL'], textarea {
-  max-width: 800px;
-  min-width: 200px;
-}*/
-input:hover {
-  text-decoration: underline;
-}
-
-select {
-  background-color: #f8f8f8;
-  color: black;
-  border: 1px solid black;
-}
 
-@keyframes journalsannounceanim {
-  0% { background-color: #110000; }
-  50% { background-color: #aa0000; }
-  100% { background-color: #110000; }
-}
-
-#journalsannouncesmall {
-/*  background-color: #880000; */
-  background-color: #FFDDDD;
-  color: #FF0000;
-  padding: 10px;
-  font-size: 90%;
-  text-align: center;
-/*  animation-name: journalsannounceanim; */
-/*  animation-duration: 2s; */
-/*  animation-iteration-count: infinite; */
-}
-#journalsannounce {
-/*  background-color: #880000; */
-  background-color: #100000;
-  color: #FF0000;
-  padding: 20px;
-  font-size: 150%;
-  text-align: center;
-/*  animation-name: journalsannounceanim; */
-/*  animation-duration: 2s; */
-/*  animation-iteration-count: infinite; */
-}
-
-
-ul.NewsItemsList {
-  list-style-type: none;
-  margin: 0px;
-  padding: 0px;
-}
-/*ul.NewsItemsList li {
-  margin: 10px;
-}*/
-h3.NewsHeadline {
-  background-color: #002B49;
-  color: #C3D7EE;
-  padding: 10px;
-}
-
-.SciPostPhysicsTab {
-  background-color: #002B49;
-  color: #FFA300;
-  margin: 2px;
-  padding: 5px 10px;
-  font-size: 120%;
-  text-align: center;
-}
-.SciPostPhysicsTab h3 a {
-  color: #FFA300;
-}
-
-ul.SciPostPhysicsTabMenu {
-  background-color: #dddddd;
-  display: block;
-  font-size: 16px;
-  padding: 0px;
-}
-ul.SciPostPhysicsTabMenu li {
-  display: inline-block;
-  margin: 0px;
-  padding: 10px;
-}
-ul.SciPostPhysicsTabMenu li a {
-  padding: 4px;
-}
-ul.SciPostPhysicsTabMenu li a.active {
-  background-color: #eeeeee;
-  border: 1px solid black;
-  padding: 4px;
-}
-ul.SciPostPhysicsTabMenu li a.inactive {
-  background-color: #dddddd;
-  border: none;
-}
-
-ul.publicationHeaderList {
-  list-style-type: none;
-  margin: 0px;
-  padding: 0px;
-}
-
-li.publicationHeader {
-  background-color: #fafafa;
-  margin: 10px;
-  padding: 0px;
-}
-
-p.publicationTitle {
-  background-color: #eeeeee;
-  font-size: 16px;
-  margin: 0px;
-  padding: 10px;
-}
-
-p.publicationAuthors {
-  font-weight: bold;
-}
-
-
-/* For modal boxes (e.g. BiBTeX) */
-.modalDialog {
-  position: fixed;
-  top: 0;
-  right: 0;
-  bottom: 0;
-  left: 0;
-  background: rgba(0,0,0,0.5);
-  z-index: 99999;
-  opacity: 0;
-  -webkit-transition: opacity 200ms ease-in;
-  -moz-transition: opacity 200ms ease-in;
-  transition: opacity 200ms ease-in;
-  pointer-events: none;
-}
-
-.modalDialog:target {
-  opacity: 1;
-  pointer-events: auto;
-}
-
-.modalDialog > div {
-  width: 600px;
-  position: relative;
-  margin: 10% auto;
-  padding: 10px;
-  border-radius: 10px;
-  background: #ffffff;
-}
 
 #preview-comment_text {
     border: 1px solid black;
@@ -666,22 +106,6 @@ p.publicationAuthors {
     padding: 1rem;
     border-radius: 1.4px;
 }
-#preview-strengths {
-  border: 1px solid black;
-  white-space: pre-wrap;
-}
-#preview-weaknesses {
-  border: 1px solid black;
-  white-space: pre-wrap;
-}
-#preview-report {
-  border: 1px solid black;
-  white-space: pre-wrap;
-}
-#preview-requested_changes {
-  border: 1px solid black;
-  white-space: pre-wrap;
-}
 
 /* Styling of sphinxdoc-generated docs */
 .pagination-top {
@@ -719,18 +143,3 @@ p.publicationAuthors {
     visibility: hidden;
 }
 .sphinx *:hover > a.headerlink { visibility: visible; }
-
-.pagination-bottom {
-  background-color: #dddddd;
-  color: black;
-  margin: 10px;
-  padding: 10px;
-}
-.pagination-bottom a {
-  color: #666666;
-  target: _parent;
-}
-.pagination-bottom a:hover {
-  color: #aaaaaa;
-  text-decoration: underline;
-}
diff --git a/scipost/static/scipost/assets/config/preconfig.scss b/scipost/static/scipost/assets/config/preconfig.scss
index a9b5266ee232496003ad1e192a0c62ba668a0b79..95228df4dc669a64279ee467a18269b6fe957322 100644
--- a/scipost/static/scipost/assets/config/preconfig.scss
+++ b/scipost/static/scipost/assets/config/preconfig.scss
@@ -34,17 +34,13 @@ $white: #fff;
 $blue: $scipost-lightblue;  // Primary
 $green: #6ebb6e;
 $cyan: $scipost-lightestblue;
+$orange: $scipost-orange;
 $yellow: $scipost-orange;
 $gray-100: $scipost-white;
 $gray-200: #e5e5e5;
 $gray-300: #dfdfdf;
 $gray-600: #ccc;
 $text-muted: #636c72;
-// Others, now as default
-// $red: $red;
-// $gray-100: $gray-100;
-// $gray-600: $gray-600;  // Secondary
-// $gray-800: $gray-800;
 
 // Body
 //
@@ -79,8 +75,8 @@ $breadcrumb-divider-color: $scipost-orange;
 $input-btn-padding-y-sm: 0.1rem;
 $input-btn-padding-x: 0.5rem;
 $input-btn-padding-y: 0.25rem;
-$input-btn-padding-y-lg: 0.25rem;
 $input-btn-padding-x-lg: 0.75rem;
+$input-btn-padding-y-lg: 0.325rem;
 $input-btn-line-height-lg: 1.4;
 $input-border-radius-sm: $base-border-radius;
 $input-border-radius: $base-border-radius;
@@ -110,15 +106,15 @@ $font-family-monospace:  $font-family-sans-serif;
 $font-family-base:       $font-family-sans-serif;
 
 $font-size-base: 0.8rem;
-$font-size-sm: 0.75rem;
+$font-size-sm: 0.7rem;
 $font-size-lg: 1.0rem;
 
 $h1-font-size: 1.8em;
 $h2-font-size: 1.5em;
-$h3-font-size: 1.25em;
-$h4-font-size: 0.8rem;
-$h5-font-size: 0.8rem;
-$h6-font-size: 0.8rem;
+$h3-font-size: 1.3em;
+$h4-font-size: 1.2em;
+$h5-font-size: 1.0em;
+$h6-font-size: 1.0em;
 
 $close-font-weight: 100;
 
@@ -127,13 +123,16 @@ $close-font-weight: 100;
 $table-cell-padding: 0.25rem 0.5rem;
 
 
+// Tooltip
+//
+$tooltip-font-size: $font-size-sm;
+
 // Navbar
 //
 $navbar-light-color: $scipost-darkblue;
 $navbar-light-hover-color: $scipost-darkblue;
 $navbar-padding-x: 0.3rem;
-$navbar-padding-y: 0.3rem;
-// $nav-link-padding-y: 0.4rem;
+$navbar-padding-y: 0.35rem;
 
 $input-border-radius: 0;
 $btn-border-radius: $base-border-radius;
@@ -144,19 +143,17 @@ $btn-border-radius-lg: $base-border-radius;
 // Block quote
 //
 $blockquote-font-size: $font-size-base;
-// $blockquote-border-color: #ececec;
 
 
 // Popover
 //
-$popover-border-color:                #dddddd;
-$popover-arrow-width:                 5px;
-$popover-arrow-height:                5px;
-// $popover-arrow-color:                 $popover-bg;
-$popover-max-width:                   500px;
-
-$popover-arrow-outer-width:           ($popover-arrow-width + 1px);
-
+$popover-font-size:                 $font-size-sm;
+$popover-border-color:              $gray-600;
+$popover-arrow-width:               20px;
+$popover-arrow-height:              10px;
+$popover-arrow-color:               $white;
+$popover-arrow-outer-color:         $gray-600;
+$popover-max-width:                 500px;
 
 
 //  ---
diff --git a/scipost/static/scipost/assets/css/_breadcrumb.scss b/scipost/static/scipost/assets/css/_breadcrumb.scss
index 633e86b5918e2f684f9b680841de16114693fd09..5cc416301fa869a9cc88185de1c647211e8e5360 100644
--- a/scipost/static/scipost/assets/css/_breadcrumb.scss
+++ b/scipost/static/scipost/assets/css/_breadcrumb.scss
@@ -11,6 +11,8 @@
     white-space: nowrap;
     overflow: auto;
     padding: 0.5rem 1.0rem;
+    display: flex;
+    flex-direction: row;
 
     .breadcrumb-item {
         margin-bottom: 0;
diff --git a/scipost/static/scipost/assets/css/_buttons.scss b/scipost/static/scipost/assets/css/_buttons.scss
index 6abdc7c02b81ac4c4a9c4d8ce9cc82c87f0ef977..8f09c54442f83ad73158103b72cb4122963d57c3 100644
--- a/scipost/static/scipost/assets/css/_buttons.scss
+++ b/scipost/static/scipost/assets/css/_buttons.scss
@@ -2,37 +2,13 @@
  * Buttons
  *
  */
-.btn {
-    cursor: pointer;
-    font-family: inherit;
-
-    &:focus,
-    &.focus {
-        box-shadow: 0 0 0 3px rgba(104, 133, 195, 0.3);
-    }
+.btn-link {
+    color: $scipost-lightblue;
 }
 
-.btn-secondary {
+.btn-outline-secondary {
     color: $scipost-darkblue;
     background-color: $white;
-    border-color: $gray-600;
-
-    &:hover,
-    &.hover {
-        color: $scipost-darkblue;
-        background-color: #ddd;
-        border-color: $gray-600;
-    }
-
-    &:active,
-    &.active {
-        background-color: #d4d4d4;
-        border-color: $gray-600;
-    }
-}
-
-.btn-info {
-    color: $scipost-darkblue;
 }
 
 .category-group,
diff --git a/scipost/static/scipost/assets/css/_cards.scss b/scipost/static/scipost/assets/css/_cards.scss
index ad7c1357f09bb4c59636abe1fe028532f06e667a..6e1e57b63d1eba55342a323af040498dd0d65d1e 100644
--- a/scipost/static/scipost/assets/css/_cards.scss
+++ b/scipost/static/scipost/assets/css/_cards.scss
@@ -4,7 +4,7 @@
     &.card-grey {
         background-color: $card-grey-bg;
         border: 0;
-        border-top: 3px solid $scipost-lightblue;
+        border-top: 2px solid $scipost-lightblue;
         box-shadow: 0 1px 0 0 $card-shadow-color;
 
         .card-header {
diff --git a/scipost/static/scipost/assets/css/_form.scss b/scipost/static/scipost/assets/css/_form.scss
index e0182d0420dcb8d74eccf2521dc7e72103560f7e..27a45b99ee238df2992b68646487ce2b4e30a9ec 100644
--- a/scipost/static/scipost/assets/css/_form.scss
+++ b/scipost/static/scipost/assets/css/_form.scss
@@ -117,3 +117,24 @@ select.form-control {
     height: auto;
   }
 }
+
+
+// Autocomplete fields
+.results_on_deck {
+    .help-block {
+        color: #666;
+        font-style: italic;
+    }
+
+    > div {
+        background-color: $scipost-lightestblue;
+        padding: 2px 10px;
+        display: inline-block;
+        border-radius: 5px;
+
+        .ui-icon {
+            margin-top: 0;
+            margin-right: 3px;
+        }
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_general.scss b/scipost/static/scipost/assets/css/_general.scss
index 0b926b714fcdba25e55fbc2fd887b16e6cfc7e41..cf3454a950c33533763320ef101feecf37dae138 100644
--- a/scipost/static/scipost/assets/css/_general.scss
+++ b/scipost/static/scipost/assets/css/_general.scss
@@ -33,18 +33,62 @@ body #MathJax_Message {
     margin: 0 auto;
 }
 
-footer .logos a {
-    width: 25%;
-    display: inline-block;
-    max-width: 100px;
-    padding: 0 0.25rem;
-}
+footer {
+    background-color: $scipost-darkblue;
+    color: $white;
 
-// body > .container {
-//     padding-bottom: 1.5rem;
-// }
+    a,
+    a:hover {
+        color: $white;
+    }
+
+    .logos a {
+        width: 25%;
+        display: inline-block;
+        max-width: 100px;
+        padding: 0 0.25rem;
+    }
+}
 
 .quote-border {
     border-left: 3px solid $scipost-lightblue;
     padding-left: 1rem;
 }
+
+
+
+header {
+    background-color: $scipost-darkblue;
+    color: $white;
+    border: 0;
+    margin: 0;
+    padding: 0 5px;
+
+    img {
+        padding: 0;
+        margin: 10px 20px;
+    }
+
+    p {
+        margin: 25px;
+    }
+
+    .content {
+        display: flex;
+        flex-wrap: nowrap;
+
+        .logobox {
+            align-self: center;
+
+            a {
+                display: block;
+            }
+        }
+
+        .blurbbox {
+            align-self: center;
+            margin-left: auto;
+            text-align: right;
+        }
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_grid.scss b/scipost/static/scipost/assets/css/_grid.scss
index d601f5e6428c863f2c20c7618c5e118f66880ea1..b74fc9fe4c8fafb000db178d7e398e3460bded47 100644
--- a/scipost/static/scipost/assets/css/_grid.scss
+++ b/scipost/static/scipost/assets/css/_grid.scss
@@ -15,6 +15,18 @@ img {
     display: none;
 }
 
+footer {
+    .social-media a {
+        padding-left: 0.25rem;
+        padding-right: 0.25rem;
+        margin-right: 0.25rem;
+
+        &:hover {
+            color: $scipost-lightblue;
+        }
+    }
+}
+
 footer.secondary {
     color: $scipost-darkblue;
     background: $white;
@@ -28,12 +40,20 @@ footer.secondary {
 
 
 .container-inner {
-    padding: $grid-gutter-width;
+    padding: ($grid-gutter-width / 2);
     background-color: $white;
 }
 
 .container {
     max-width: 1500px;
-    padding-left: 30px;
-    padding-right: 30px;
+}
+
+@media screen and (min-width: 768px) {
+    .container-inner {
+        padding: $grid-gutter-width;
+    }
+    .container {
+        padding-left: 30px;
+        padding-right: 30px;
+    }
 }
diff --git a/scipost/static/scipost/assets/css/_homepage.scss b/scipost/static/scipost/assets/css/_homepage.scss
index 52cd38d0f81fd4376799cca61a20f16df4d699dd..4c78a17197bfe52a02ca026e2387eea2c48d3f65 100644
--- a/scipost/static/scipost/assets/css/_homepage.scss
+++ b/scipost/static/scipost/assets/css/_homepage.scss
@@ -29,6 +29,34 @@
             margin-bottom: 1rem;
         }
     }
+
+    &.sidebar-left {
+        .main-panel {
+            order: 2;
+        }
+        .sidebar {
+            order: 1;
+        }
+    }
+}
+
+.sidebar {
+    margin-bottom: 2rem;
+
+    a {
+        &.active {
+            font-weight: 700;
+        }
+    }
+}
+
+.container.header {
+    padding-top: 0.5rem;
+    margin-bottom: 1.5rem;
+
+    .highlight {
+        background-color: $white;
+    }
 }
 
 .granting-institutions > a {
@@ -65,6 +93,17 @@
             width: 350px;
             padding-right: 0;
         }
+
+        &.sidebar-left {
+            .main-panel {
+                padding-right: 0;
+                padding-left: 1rem;
+            }
+            .sidebar {
+                padding-right: 1rem;
+                padding-left: 0;
+            }
+        }
     }
 }
 
diff --git a/scipost/static/scipost/assets/css/_journals.scss b/scipost/static/scipost/assets/css/_journals.scss
index 490351d34a4027661c60611b65fa9f5d33d07893..f50b7493f412c0e334ce8bcaebf356e5e3411b57 100644
--- a/scipost/static/scipost/assets/css/_journals.scss
+++ b/scipost/static/scipost/assets/css/_journals.scss
@@ -67,6 +67,7 @@ ul.publicationClickables {
         display: inline-block;
         margin: 0 10px;
         padding: 5px;
+        width: 100%;
 
         &.publicationPDF {
             font-size: 130%;
@@ -74,6 +75,11 @@ ul.publicationClickables {
         }
     }
 }
+@media screen and (min-width: 768px) {
+    ul.publicationClickables li {
+        width: auto;
+    }
+}
 
 
 .publication {
diff --git a/scipost/static/scipost/assets/css/_list_group.scss b/scipost/static/scipost/assets/css/_list_group.scss
index b598898a08caa9faf14f2f59088a2c2f1045e000..5b7cf40e37cfd9b0350c3b5f1d912fc3b891238b 100644
--- a/scipost/static/scipost/assets/css/_list_group.scss
+++ b/scipost/static/scipost/assets/css/_list_group.scss
@@ -45,3 +45,59 @@ ul.references {
         margin: 0 0 0.2rem 2rem;
     }
 }
+
+ul.links > li.active a {
+    font-weight: 700;
+}
+
+ul.sortable-list {
+    li {
+        background-color: $white;
+        border: 1px solid $scipost-darkblue;
+        padding: 0.5rem;
+        margin-bottom: -1px;
+        cursor: move;
+
+        &:hover {
+            background-color: $gray-200;
+        }
+    }
+}
+
+
+li,
+.li {
+    .thesis,
+    .commentary,
+    .submission,
+    .publication {
+        .subject {
+            margin-bottom: 0;
+            padding-bottom: 0;
+            color: $text-muted;
+        }
+
+        .title {
+            margin-bottom: 0;
+        }
+
+        .authors {
+            margin-bottom: 0.5rem;
+        }
+
+        .meta {
+            color: $text-muted;
+        }
+
+        .abstract {
+            margin-bottom: 0.25rem;
+        }
+    }
+
+    .submission,
+    .commentary {
+        .meta {
+            margin-bottom: 0.25rem;
+        }
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_navbar.scss b/scipost/static/scipost/assets/css/_navbar.scss
index 8b32a2115a3afdcae2c6d4f521dbdf295a5c026e..0b19649d36ea691cb5273cb4235edf80fd695ba8 100644
--- a/scipost/static/scipost/assets/css/_navbar.scss
+++ b/scipost/static/scipost/assets/css/_navbar.scss
@@ -3,12 +3,15 @@
  *
  */
 .navbar {
-
-    .nav-item.active a,
     a:hover {
         text-decoration: underline;
     }
 
+    .nav-item.active a {
+        font-weight: 700;
+        text-decoration: underline;
+    }
+
     .nav-link {
         color: $white;
     }
@@ -16,9 +19,7 @@
     .navbar-nav {
         flex-direction: row;
         overflow: auto;
-        // -ms-overflow-style: none;
         -webkit-overflow-scrolling: touch;
-        // overflow: -moz-scrollbars-none;
 
         .nav-link {
             padding-left: .5rem;
@@ -28,19 +29,6 @@
     }
 }
 
-// Hide scrollbars... trying to
-// ::-webkit-scrollbar,
-// ::-webkit-scrollbar-button,
-// ::-webkit-scrollbar-track,
-// ::-webkit-scrollbar-track-piece,
-// ::-webkit-scrollbar-thumb,
-// ::-webkit-scrollbar-corner,
-// ::-webkit-resizer {
-//     // display: none;
-//     background: rgba(0,0,0,0);
-//     background-color: rgba(0,0,0,0);
-// }
-
 .container-outside {
     &.main-nav {
         background-color: $scipost-lightblue;
@@ -125,9 +113,9 @@
     min-width: 16px;
     line-height: 10px;
     display: none;
-    padding: 0.25em;
+    padding: 0.2em;
     border-radius: 99px;
-    border: 1px solid $white;
+    border: 1px solid $scipost-lightblue;
     background-color: $white;
     color: $scipost-lightblue;
 }
diff --git a/scipost/static/scipost/assets/css/_notifications.scss b/scipost/static/scipost/assets/css/_notifications.scss
index a607b5af07920ee0261f7ee60c0abd62e64e18ee..3607c064c9515997d5fe15b174317e2ae7136d2f 100644
--- a/scipost/static/scipost/assets/css/_notifications.scss
+++ b/scipost/static/scipost/assets/css/_notifications.scss
@@ -15,7 +15,7 @@
         }
     }
 
-    &.show .fa-inbox {
+    a[data-toggle="popover"][aria-describedby] {
         color: $scipost-darkblue;
     }
 
@@ -37,11 +37,40 @@
 
 .notifications {
     padding: 0;
-    min-width: 500px;
+    min-width: 450px;
+    border-color: $gray-600;
+    border-radius: 1px;
 
+    .inbox-header,
     .header {
-        padding: 1rem 1rem 0.5rem 1rem;
-        background-color: #f9f9f9;
+        padding: 0.5rem 0;
+        border-bottom: 1px solid $gray-600;
+        margin: 0 1rem;
+    }
+
+    .inbox-header {
+        border-top: 1px solid $gray-600;
+        border-bottom: 0;
+        margin-top: 0.25rem;
+    }
+
+    .header {
+        padding-top: 1rem;
+        padding-bottom: 1rem;
+        margin-bottom: 0.25rem;
+
+        h3,
+        .item {
+            border: 0;
+            line-height: 20px;
+            display: inline-block;
+        }
+
+        .item {
+            float: right;
+            padding-left: 0;
+            padding-right: 0;
+        }
     }
 
     li.item {
@@ -53,7 +82,7 @@
     .item {
         padding: 0.4rem 1rem;
         border-radius: 0;
-        border-top: 1px solid #fff;
+        border-top: 1px solid $white;
         border-left: 0;
         border-right: 0;
         flex-direction: row;
@@ -78,6 +107,30 @@
         }
     }
 
+    .live_notify_list {
+        max-height: 250px;
+        overflow: scroll;
+
+        &::after {
+            bottom: 0;
+            content: '';
+            display: block;
+            width: 100%;
+            position: absolute;
+            height: 20px;
+            box-shadow: inset 0 -3px 9px 0px $gray-600;
+        }
+
+        .meta {
+            font-size: 90%;
+            margin-top: 0.5rem;
+        }
+
+        .item {
+            border-color: $gray-600;
+        }
+    }
+
     a.item,
     .item a {
         color: $scipost-lightblue;
@@ -112,7 +165,31 @@
         }
     }
 
+
+    .links .item {
+        &.active,
+        &.active[href]:hover {
+            background-color: transparent;
+        }
+
+        &.active {
+            font-weight: 600;
+            text-decoration: underline;
+        }
+    }
+
     .item:hover .actions {
         opacity: 1.0;
     }
+
+    .unavailable {
+        margin: 0 1rem 0.25rem;
+        padding: 0.5rem 0 0.75rem;
+        border-bottom: 1px solid $gray-600;
+
+        .head {
+            color: $orange;
+            font-weight: 600;
+        }
+    }
 }
diff --git a/scipost/static/scipost/assets/css/_personal_page.scss b/scipost/static/scipost/assets/css/_personal_page.scss
index 834f01d4e90045cc17c82b22877f3e7c426f37ed..d2e06dd17613933bf3f8b4e3386a4c8183a0d872 100644
--- a/scipost/static/scipost/assets/css/_personal_page.scss
+++ b/scipost/static/scipost/assets/css/_personal_page.scss
@@ -1,9 +1,3 @@
 table.availabilities {
     width: 100%;
 }
-
-.personalTabMenu {
-    li {
-        cursor: pointer;
-    }
-}
diff --git a/scipost/static/scipost/assets/css/_pool.scss b/scipost/static/scipost/assets/css/_pool.scss
index 8b6dbdff6d5d38938167dbc50a97e8f29ab90914..05a3f70c846ec038910197c1f878c3691a3918e8 100644
--- a/scipost/static/scipost/assets/css/_pool.scss
+++ b/scipost/static/scipost/assets/css/_pool.scss
@@ -29,7 +29,7 @@
     }
 
     .loading-container {
-        .submission_title,
+        .li.submission,
         .author_list {
             display: none;
         }
diff --git a/scipost/static/scipost/assets/css/_popover.scss b/scipost/static/scipost/assets/css/_popover.scss
new file mode 100644
index 0000000000000000000000000000000000000000..73aaf85d42437c77f638cbdb4d9c1534105af55a
--- /dev/null
+++ b/scipost/static/scipost/assets/css/_popover.scss
@@ -0,0 +1,124 @@
+.bs-popover-top {
+  margin-bottom: $popover-arrow-height;
+
+  .arrow {
+    bottom: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
+  }
+
+  .arrow::before,
+  .arrow::after {
+    border-width: $popover-arrow-height ($popover-arrow-width / 2) 0;
+  }
+
+  .arrow::before {
+    bottom: 0;
+    border-top-color: $popover-arrow-outer-color;
+  }
+
+  .arrow::after {
+    bottom: $popover-border-width;
+    border-top-color: $popover-arrow-color;
+  }
+}
+
+.bs-popover-right {
+  margin-left: $popover-arrow-height;
+
+  .arrow {
+    left: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
+    width: $popover-arrow-height;
+    height: $popover-arrow-width;
+    margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
+  }
+
+  .arrow::before,
+  .arrow::after {
+    border-width: ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2) 0;
+  }
+
+  .arrow::before {
+    left: 0;
+    border-right-color: $popover-arrow-outer-color;
+  }
+
+  .arrow::after {
+    left: $popover-border-width;
+    border-right-color: $popover-arrow-color;
+  }
+}
+
+.bs-popover-bottom {
+  margin-top: $popover-arrow-height;
+
+  .arrow {
+    top: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
+  }
+
+  .arrow::before,
+  .arrow::after {
+    border-width: 0 ($popover-arrow-width / 2) $popover-arrow-height ($popover-arrow-width / 2);
+  }
+
+  .arrow::before {
+    top: 0;
+    border-bottom-color: $popover-arrow-outer-color;
+  }
+
+  .arrow::after {
+    top: $popover-border-width;
+    border-bottom-color: $popover-arrow-color;
+  }
+
+  // This will remove the popover-header's border just below the arrow
+  .popover-header::before {
+    position: absolute;
+    top: 0;
+    left: 50%;
+    display: block;
+    width: $popover-arrow-width;
+    margin-left: ($popover-arrow-width / -2);
+    content: "";
+    border-bottom: $popover-border-width solid $popover-header-bg;
+  }
+}
+
+.bs-popover-left {
+  margin-right: $popover-arrow-height;
+
+  .arrow {
+    right: calc((#{$popover-arrow-height} + #{$popover-border-width}) * -1);
+    width: $popover-arrow-height;
+    height: $popover-arrow-width;
+    margin: $border-radius-lg 0; // make sure the arrow does not touch the popover's rounded corners
+  }
+
+  .arrow::before,
+  .arrow::after {
+    border-width: ($popover-arrow-width / 2) 0 ($popover-arrow-width / 2) $popover-arrow-height;
+  }
+
+  .arrow::before {
+    right: 0;
+    border-left-color: $popover-arrow-outer-color;
+  }
+
+  .arrow::after {
+    right: $popover-border-width;
+    border-left-color: $popover-arrow-color;
+  }
+}
+
+.bs-popover-auto {
+  &[x-placement^="top"] {
+    @extend .bs-popover-top;
+  }
+  &[x-placement^="right"] {
+    @extend .bs-popover-right;
+  }
+  &[x-placement^="bottom"] {
+    @extend .bs-popover-bottom;
+  }
+  &[x-placement^="left"] {
+    @extend .bs-popover-left;
+  }
+}
diff --git a/scipost/static/scipost/assets/css/_reports.scss b/scipost/static/scipost/assets/css/_reports.scss
index 871bb5accdaf88fc863fe537b54214286203a04a..1398493dca9d69b5a74f207ed724ad5b11303a58 100644
--- a/scipost/static/scipost/assets/css/_reports.scss
+++ b/scipost/static/scipost/assets/css/_reports.scss
@@ -29,10 +29,12 @@
     > ul {
         list-style: none;
         display: flex;
+        flex-wrap: wrap;
         padding: 0;
         margin: 0;
 
         li {
+            flex: 100%;
             border: 1px solid #ddd;
             margin: 2px 2px;
             padding: 0.25rem 0.5rem;
@@ -40,3 +42,37 @@
         }
     }
 }
+
+@media screen and (min-width: 768px) {
+    .ratings {
+        > ul {
+            li {
+                flex: auto;
+            }
+        }
+    }
+}
+
+.anonymous-alert {
+    margin-bottom: 0.5rem;
+
+    .anonymous-yes,
+    .anonymous-no {
+      font-weight: 600;
+    }
+
+    .anonymous-yes {
+        color: $red;
+    }
+    .anonymous-no {
+        color: $green;
+    }
+}
+
+.report-preview {
+    .latex-preview {
+        border: 1px solid $scipost-darkblue;
+        padding: 0.5rem 0.75rem;
+        white-space: pre-wrap;
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_submissions.scss b/scipost/static/scipost/assets/css/_submissions.scss
index f41deda48852a0f3e890647e5527955234e42e60..9f53652a62bb23a828b1700ccfeaeb0eade00acb 100644
--- a/scipost/static/scipost/assets/css/_submissions.scss
+++ b/scipost/static/scipost/assets/css/_submissions.scss
@@ -47,3 +47,12 @@ table.submission_header {
         background-color: $green;
     }
 }
+
+.submission {
+    &.status {
+        .prefix,
+        .status {
+            display: inline-block;
+        }
+    }
+}
diff --git a/scipost/static/scipost/assets/css/_tables.scss b/scipost/static/scipost/assets/css/_tables.scss
index 8873b93c394e15c1ef958f4509818a1f193e5c59..7c3d0fdc6c1d930fd04287fd8b90807a6e4410b8 100644
--- a/scipost/static/scipost/assets/css/_tables.scss
+++ b/scipost/static/scipost/assets/css/_tables.scss
@@ -12,6 +12,8 @@
 }
 
 table.commentary td,
+table.registration_invitation td,
+table.registration_invitation th,
 table.submission td {
     padding: 0.1em 0.7em;
 
diff --git a/scipost/static/scipost/assets/css/_type.scss b/scipost/static/scipost/assets/css/_typography.scss
similarity index 92%
rename from scipost/static/scipost/assets/css/_type.scss
rename to scipost/static/scipost/assets/css/_typography.scss
index f6eef699ad9eada0e0f37bebe7f9b58259e326c0..50789f21660d69bc8064ce5a09c7eaff4ff89ec7 100644
--- a/scipost/static/scipost/assets/css/_type.scss
+++ b/scipost/static/scipost/assets/css/_typography.scss
@@ -13,32 +13,34 @@ a:hover {
     text-decoration: underline;
 }
 h1, h2, h3, h4, h5, h6 {
-    margin: 0;
-    padding: 5px 0;
+    padding-top: 5px;
+    padding-bottom: 5px;
     text-shadow: none;
 }
 
-h1 {
-    line-height: 1.4;
-}
-
 h1 > a {
     color: $scipost-darkblue;
 }
 
 h3,
-h4 {
-    line-height: normal;
-}
-
-h5 {
-    font-weight: 300;
+.h3,
+h4,
+.h4,
+h5,
+.h5,
+h6
+.h6 {
+    margin-bottom: 0;
 }
 
 .text-black {
     color: $scipost-darkblue;
 }
 
+.text-underline {
+    text-decoration: underline;
+}
+
 .orange-underline {
     line-height: 1.3;
     border-bottom: 2px solid $scipost-orange;
@@ -51,7 +53,6 @@ h5 {
 
 .container-outside.header {
     background-color: $gray-200;
-    // box-shadow: 0 1px 0 0 $card-shadow-color;
 
     h1,
     h2 {
@@ -102,7 +103,7 @@ h3.highlight-empty {
 
 h5,
 .h5 {
-    color: #636c72;
+    font-weight: 300;
 }
 
 hr,
diff --git a/scipost/static/scipost/assets/css/scipost-physics.scss b/scipost/static/scipost/assets/css/scipost-physics.scss
index 381822f4dfd9e0796319f1ec57093e9eb95c18a5..858e3465db889e415399115d6c2e34dead7e6f97 100644
--- a/scipost/static/scipost/assets/css/scipost-physics.scss
+++ b/scipost/static/scipost/assets/css/scipost-physics.scss
@@ -11,18 +11,21 @@
 
     .links {
         background-color: #ddd;
-        display: inline-block;
+        display: flex;
         font-size: 16px;
         border-radius: $card-border-radius;
         border: 1px solid #c5c5c5;
         margin: 0;
         width: 100%;
         padding: 0;
+        flex-direction: row;
+        overflow: auto;
+        list-style: none;
 
         > li {
-            display: inline-block;
             margin: 0;
             padding: 0.5rem;
+            white-space: nowrap;
 
             a {
                 padding: 0.25rem 0.75rem;
diff --git a/scipost/static/scipost/assets/css/style.scss b/scipost/static/scipost/assets/css/style.scss
index 6e6fca92a968ba2d2d382a858ba4c5e410042741..20477d6909fb0efb2e305fa57f8abfae4e100525 100644
--- a/scipost/static/scipost/assets/css/style.scss
+++ b/scipost/static/scipost/assets/css/style.scss
@@ -34,9 +34,10 @@
 @import "notifications";
 @import "page_header";
 @import "pool";
+@import "popover";
 @import "tables";
 @import "tooltip";
-@import "type";
+@import "typography";
 
 /**
  * SciPost Specific
diff --git a/scipost/static/scipost/assets/js/newsticker.js b/scipost/static/scipost/assets/js/newsticker.js
index 298452931cd935596d551e873acaf2cb78a72184..c4e090fcf8ef94c50342cf051a7f0be8284a3154 100644
--- a/scipost/static/scipost/assets/js/newsticker.js
+++ b/scipost/static/scipost/assets/js/newsticker.js
@@ -76,7 +76,7 @@ NewsTicker = (function() {
 
     // Start
     $('#news ul').scipost_newsticker({
-        url: 'api/news',
+        url: 'api/news/',
         interval: 6000
     })
 }(jQuery));
diff --git a/scipost/static/scipost/assets/js/notifications.js b/scipost/static/scipost/assets/js/notifications.js
index 12f6b849bbcea9efbd0ee7b546e9ea0995cc00f3..6d995a57e6942e803a9d3a4e9b4a9ef2a3511d32 100644
--- a/scipost/static/scipost/assets/js/notifications.js
+++ b/scipost/static/scipost/assets/js/notifications.js
@@ -63,11 +63,11 @@ function update_list_callback(data, args) {
             }
         }
         if(typeof item.timesince !== 'undefined'){
-            message += "<br><small>";
+            message += "<div class='meta'>";
             if(typeof item.forward_link !== 'undefined') {
                 message += " <a href='" + item.forward_link + "'>Direct link</a> &middot; ";
             }
-            message += "<span class='text-muted'>" + item.timesince + " ago</span></small>";
+            message += "<span class='text-muted'>" + item.timesince + " ago</span></div>";
         }
 
         // Notification actions
@@ -128,12 +128,23 @@ function initiate_popover() {
     var template = $('.notifications_container .popover-template').html();
     $('.notifications_container a[data-toggle="popover"]').popover({
         trigger: 'focus',
+        animation: false,
+        offset: '0, 10px',
         template: template,
+        delay: {
+            'show': 0,
+            'hide': 200,
+        },
         placement: 'bottom',
+        boundary: 'viewport',
         title: 'empty-on-purpose'
     })
     .on('inserted.bs.popover', function() {
         $('body').trigger('notification_open_list');
+        var self = this;
+        $('.popover').on('click', function() {
+            $('.notifications_container a[data-toggle="popover"]').focus();
+        });
     })
     .on('hide.bs.popover', function() {
         // Bug: force removal of tooltip
diff --git a/scipost/static/scipost/assets/js/scripts.js b/scipost/static/scipost/assets/js/scripts.js
index 4e96974ec3df7596e5d8cdc9f2fbafa8daedad99..8adbae645179b5aea816d04c6e9f86a7f06e52b5 100644
--- a/scipost/static/scipost/assets/js/scripts.js
+++ b/scipost/static/scipost/assets/js/scripts.js
@@ -1,7 +1,10 @@
+require('jquery-ui/ui/widgets/sortable');
+require('jquery-ui/ui/disable-selection');
+
 import notifications from './notifications.js';
 
 function hide_all_alerts() {
-    $(".alert").fadeOut(300);
+    $(".alert").remove('.no-dismiss').fadeOut(300);
 }
 
 var activate_tooltip = function() {
@@ -12,6 +15,19 @@ var activate_tooltip = function() {
     });
 }
 
+
+var sort_form_list = function(list_el) {
+    $(list_el).sortable({
+        update: function(event, ui) {
+            $.each($(list_el + ' li'), function(index, el) {
+                $(el).find('input[name$=ORDER]').val(index + 1);
+            });
+        }
+    });
+};
+
+
+
 var getUrlParameter = function getUrlParameter(sParam) {
     var sPageURL = decodeURIComponent(window.location.search.substring(1)),
         sURLVariables = sPageURL.split('&'),
@@ -53,6 +69,7 @@ function init_page() {
     });
 
     activate_tooltip();
+    sort_form_list('form ul.sortable-list');
 }
 
 $(function(){
diff --git a/scipost/static/scipost/images/FJN-logo-long.png b/scipost/static/scipost/images/FJN-logo-long.png
new file mode 100755
index 0000000000000000000000000000000000000000..93860c5a2f5c1644e9c4858c398949ec7f0d6390
Binary files /dev/null and b/scipost/static/scipost/images/FJN-logo-long.png differ
diff --git a/scipost/storage.py b/scipost/storage.py
index 1821e4f48a785229435e4963d81ac33e881aea19..bc4b065eb2b60af1f2f09c5af8727390641d3df4 100644
--- a/scipost/storage.py
+++ b/scipost/storage.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf import settings
 from django.core.files.storage import FileSystemStorage
 from django.utils.functional import cached_property
diff --git a/scipost/templates/feeds/latest_publications_title.html b/scipost/templates/feeds/latest_publications_title.html
index 6558e2da81b6a1766d69447f71d5d776a4f81485..388e7a3dfc6642a5bbf9408c14da16be46d8e0f6 100644
--- a/scipost/templates/feeds/latest_publications_title.html
+++ b/scipost/templates/feeds/latest_publications_title.html
@@ -1 +1 @@
-{{obj.in_issue.in_volume.in_journal.get_abbreviation_citation}} {{obj.in_issue.in_volume.number}}, {{obj.get_paper_nr}} ({{obj.publication_date|date:'Y'}}), by  {{ obj.author_list }}
+{{obj.in_issue.in_volume.in_journal.abbreviation_citation}} {{obj.in_issue.in_volume.number}}, {{obj.get_paper_nr}} ({{obj.publication_date|date:'Y'}}), by  {{ obj.author_list }}
diff --git a/scipost/templates/partials/scipost/personal_page/account.html b/scipost/templates/partials/scipost/personal_page/account.html
index bcb731d9b2bb8a84ff3b75b0403485f9c52db829..bfda86979026a266428a272d69dc8e4e5b2b9d1e 100644
--- a/scipost/templates/partials/scipost/personal_page/account.html
+++ b/scipost/templates/partials/scipost/personal_page/account.html
@@ -151,7 +151,7 @@
             <form action="{% url 'scipost:mark_unavailable_period' %}" method="post">
                 {% csrf_token %}
                 {{ unavailability_form|bootstrap }}
-                <input class="btn btn-secondary" type="submit" value="Submit" />
+                <input class="btn btn-outline-secondary" type="submit" value="Submit" />
             </form>
         </div>
         <div class="col-md-4 ml-md-5">
diff --git a/scipost/templates/partials/scipost/personal_page/editorial_actions.html b/scipost/templates/partials/scipost/personal_page/editorial_actions.html
index c614b2e48e939a29a9d7fcfbf319392c95bc6379..0996ec371eb0ca3527c2fc3deb66cf7d6e3e089a 100644
--- a/scipost/templates/partials/scipost/personal_page/editorial_actions.html
+++ b/scipost/templates/partials/scipost/personal_page/editorial_actions.html
@@ -10,7 +10,7 @@
 </div>
 
 <div class="row">
-    {% if perms.scipost.can_vet_registration_requests or perms.scipost.can_draft_registration_invitations or perms.scipost.can_manage_registration_invitations %}
+    {% if perms.scipost.can_vet_registration_requests or perms.scipost.can_create_registration_invitations or perms.scipost.can_resend_registration_requests %}
     <div class="col-md-4">
         <h3>Registration actions</h3>
         <ul>
@@ -20,19 +20,15 @@
             {% if perms.scipost.can_resend_registration_requests %}
                 <li><a href="{% url 'scipost:registration_requests' %}">Awaiting validation</a> ({{ nr_reg_awaiting_validation }})</li>
             {% endif %}
-            {% if perms.scipost.can_draft_registration_invitations %}
-                <li><a href="{% url 'scipost:contributors_filter' %}">Contributors filter</a></li>
-                <li><a href="{% url 'scipost:draft_registration_invitation' %}">Draft a Registration Invitation</a></li>
-            {% endif %}
-            {% if perms.scipost.can_manage_registration_invitations %}
-                <li><a href="{% url 'scipost:registration_invitations' %}">Manage Registration Invitations</a></li>
+            {% if perms.scipost.can_create_registration_invitations %}
+                <li><a href="{% url 'invitations:list' %}">Manage Registration Invitations</a></li>
             {% endif %}
         </ul>
 
         {% if perms.scipost.can_manage_registration_invitations %}
             <h3>Notifications</h3>
             <ul>
-                <li><a href="{% url 'scipost:citation_notifications' %}">Manage citation notifications</a></li>
+                <li><a href="{% url 'invitations:citation_notification_list' %}">Manage citation notifications</a></li>
             </ul>
         {% endif %}
 
@@ -157,7 +153,7 @@
                     <li class="list-group-item">
                         <div class="card-body px-0">
                             {% include 'partials/submissions/submission_card_content.html' with submission=assignment.submission %}
-                            {% include 'submissions/_submission_status_block.html' with submission=assignment.submission %}
+                            {% include 'partials/submissions/submission_status.html' with submission=assignment.submission %}
                             <p class="card-text mt-2">Manage this Submission from its <a href="{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial Page</a>.</p>
                         </div>
                     </li>
diff --git a/scipost/templates/partials/scipost/personal_page/submissions.html b/scipost/templates/partials/scipost/personal_page/submissions.html
index 2af5125f616fa08dae91440a3704a180b2b6e801..9dc38d1e5e07e686bdacece95ab11ed8e5699d7b 100644
--- a/scipost/templates/partials/scipost/personal_page/submissions.html
+++ b/scipost/templates/partials/scipost/personal_page/submissions.html
@@ -25,7 +25,7 @@
                 <li class="list-group-item">
                     <div class="card-body px-0">
                         {% include 'partials/submissions/submission_card_content.html' with submission=sub %}
-                        {% include 'submissions/_submission_status_block.html' with submission=sub %}
+                        {% include 'partials/submissions/submission_status.html' with submission=sub %}
 
                         {% if request.user.contributor == sub.submitted_by %}
                             <p class="card-text mt-1">
diff --git a/scipost/templates/scipost/Fellow_activity_overview.html b/scipost/templates/scipost/Fellow_activity_overview.html
index dcfe8de994c2eb99145f8c0818d843ee436aa427..9530cbfc2858ef4acc5f841def21c990cada21eb 100644
--- a/scipost/templates/scipost/Fellow_activity_overview.html
+++ b/scipost/templates/scipost/Fellow_activity_overview.html
@@ -19,8 +19,8 @@
     </div>
 </div>
 
-<table class="assignments_listing w-100">
-    <thead class="">
+<table class="table table-bordered table-hover">
+    <thead class="thead-light">
         <tr>
           <th>Name</th>
           <th>Expertises</th>
@@ -61,7 +61,7 @@
                   <li class="list-group-item">
                       <div class="card-body px-0">
                           {% include 'partials/submissions/submission_card_content.html' with submission=assignment.submission %}
-                          {% include 'submissions/_submission_status_block.html' with submission=assignment.submission %}
+                          {% include 'partials/submissions/submission_status.html' with submission=assignment.submission %}
                       </div>
                   </li>
               {% empty %}
@@ -80,7 +80,7 @@
                 <li class="list-group-item">
                     <div class="card-body px-0">
                         {% include 'partials/submissions/submission_card_content.html' with submission=assignment.submission %}
-                        {% include 'submissions/_submission_status_block.html' with submission=assignment.submission %}
+                        {% include 'partials/submissions/submission_status.html' with submission=assignment.submission %}
                     </div>
                 </li>
             {% empty %}
diff --git a/scipost/templates/scipost/_draft_registration_tables.html b/scipost/templates/scipost/_draft_registration_tables.html
deleted file mode 100644
index 76765d3f3e4b824531631a0ed6349fc29c29c4aa..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/_draft_registration_tables.html
+++ /dev/null
@@ -1,425 +0,0 @@
-
-<h2 class="highlight">Invitations sent (response pending)</h2>
-
-<h3>Editorial Fellows ({{sent_reg_inv_fellows|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_sent_reg_inv_fellows">view/hide +</a>
-
-<table class="table" id="table_sent_reg_inv_fellows" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-            <th></th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for fellow in sent_reg_inv_fellows %}
-          <tr>
-            <td>{{ fellow.last_name }}</td>
-            <td>{{ fellow.first_name }}</td>
-	    <td>{{ fellow.get_title_display }}</td>
-            <td>{{ fellow.email }}</td>
-            <td>{{ fellow.date_sent }} </td>
-            <td>{{ fellow.get_invitation_type_display }}</td>
-            <td>{{ fellow.invited_by.user.first_name }} {{ fellow.invited_by.user.last_name }}</td>
-            <td>
-                {% if perms.scipost.can_invite_Fellows %}
-                    <a href="{% url 'scipost:renew_registration_invitation' invitation_id=fellow.id %}">Renew</a> ({{ fellow.nr_reminders }}) {% if fellow.date_last_reminded %}(last: {{ fellow.date_last_reminded|date:"Y-m-d" }}){% endif %}
-                    &middot;
-                    <a href="{% url 'scipost:mark_reg_inv_as_declined' invitation_id=fellow.id %}">Declined</a>
-                {% endif %}
-            </td>
-
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="7">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Normal Contributors ({{sent_reg_inv_contrib|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_sent_reg_inv_contrib">view/hide +</a>
-
-<table class="table" id="table_sent_reg_inv_contrib" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-            <th></th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in sent_reg_inv_contrib %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-            <td>
-                {% if perms.scipost.can_invite_Fellows %}
-                    <a href="{% url 'scipost:renew_registration_invitation' invitation_id=invitation.id %}">Renew</a> ({{ invitation.nr_reminders }}) {% if invitation.date_last_reminded %}(last: {{ invitation.date_last_reminded|date:"Y-m-d" }}){% endif %}
-                    &middot;
-                    <a href="{% url 'scipost:mark_reg_inv_as_declined' invitation_id=invitation.id %}">Declined</a>
-                {% endif %}
-            </td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="7">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-
-<h3>Referees ({{sent_reg_inv_ref|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_sent_reg_inv_ref">view/hide +</a>
-
-<table class="table" id="table_sent_reg_inv_ref" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-            <th></th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in sent_reg_inv_ref %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-            <td>
-                {% if perms.scipost.can_invite_Fellows %}
-                    <a href="{% url 'scipost:renew_registration_invitation' invitation_id=invitation.id %}">Renew</a> ({{ invitation.nr_reminders }}) {% if invitation.date_last_reminded %}(last: {{ invitation.date_last_reminded|date:"Y-m-d" }}){% endif %}
-                {% endif %}
-            </td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="7">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Cited in sub ({{sent_reg_inv_cited_sub|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_sent_reg_inv_cited_sub">view/hide +</a>
-
-<table class="table" id="table_sent_reg_inv_cited_sub" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-            <th></th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in sent_reg_inv_cited_sub %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-            <td>
-                {% if perms.scipost.can_invite_Fellows %}
-                    <a href="{% url 'scipost:renew_registration_invitation' invitation_id=invitation.id %}">Renew</a> ({{ invitation.nr_reminders }}) {% if invitation.date_last_reminded %}(last: {{ invitation.date_last_reminded|date:"Y-m-d" }}){% endif %}
-                {% endif %}
-            </td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="7">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-
-<h3>Cited in pub ({{sent_reg_inv_cited_pub|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_sent_reg_inv_cited_pub">view/hide +</a>
-
-<table class="table" id="table_sent_reg_inv_cited_pub" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-            <th></th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in sent_reg_inv_cited_pub %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-            <td>
-                {% if perms.scipost.can_invite_Fellows %}
-                    <a href="{% url 'scipost:renew_registration_invitation' invitation_id=invitation.id %}">Renew</a> ({{ invitation.nr_reminders }}) {% if invitation.date_last_reminded %}(last: {{ invitation.date_last_reminded|date:"Y-m-d" }}){% endif %}
-                {% endif %}
-            </td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="7">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h2 class="highlight">Invitations sent (responded)</h2>
-
-<h3>Editorial Fellows ({{resp_reg_inv_fellow|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_resp_reg_inv_fellow">view/hide +</a>
-
-<table class="table" id="table_resp_reg_inv_fellow" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in resp_reg_inv_fellow %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Normal Contributors ({{resp_reg_inv_contrib|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_resp_reg_inv_contrib">view/hide +</a>
-
-<table class="table" id="table_resp_reg_inv_contrib" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in resp_reg_inv_contrib %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Referees ({{resp_reg_inv_ref|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_resp_reg_inv_ref">view/hide +</a>
-
-<table class="table" id="table_resp_reg_inv_ref" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in resp_reg_inv_ref %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Cited in sub ({{resp_reg_inv_cited_sub|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_resp_reg_inv_cited_sub">view/hide +</a>
-
-<table class="table" id="table_resp_reg_inv_cited_sub" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in resp_reg_inv_cited_sub %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Cited in pub ({{resp_reg_inv_cited_pub|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_resp_reg_inv_cited_pub">view/hide +</a>
-
-<table class="table" id="table_resp_reg_inv_cited_pub" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in resp_reg_inv_cited_pub %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h3>Declined ({{decl_reg_inv|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_decl_reg_inv">view/hide +</a>
-
-<table class="table" id="table_decl_reg_inv" style="display: none;">
-    <thead>
-        <tr>
-            <th>Last name</th>
-            <th>First name</th>
-	    <th>Title</th>
-            <th>Email</th>
-            <th>Date sent</th>
-            <th>Type</th>
-            <th>Invited by</th>
-        </tr>
-    </thead>
-    <tbody>
-        {% for invitation in decl_reg_inv %}
-          <tr>
-            <td>{{ invitation.last_name }}</td>
-            <td>{{ invitation.first_name }}</td>
-	    <td>{{ invitation.get_title_display }}</td>
-            <td>{{ invitation.email }}</td>
-            <td>{{ invitation.date_sent }} </td>
-            <td>{{ invitation.get_invitation_type_display }}</td>
-            <td>{{ invitation.invited_by.user.first_name }} {{ invitation.invited_by.user.last_name }}</td>
-          </tr>
-        {% empty %}
-            <tr>
-                <td colspan="6">No invitations found.</td>
-            </tr>
-        {% endfor %}
-    </tbody>
-</table>
-
-<h2 class="highlight">List of already-registered contributors ({{names_reg_contributors|length}})</h3>
-<a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#registered_contributors">view/hide +</a>
-
-<div class="card-columns" id="registered_contributors" style="display: none;">
-    {% for first_name, last_name in names_reg_contributors %}
-        <div class="card border-0">
-          {{ last_name }}, {{ first_name }}
-        </div>
-    {% endfor %}
-</div>
diff --git a/scipost/templates/scipost/about.html b/scipost/templates/scipost/about.html
index 81a6d25c9a8d329ee16a6025a7b8ef591d0af2c3..240f766f7476fcdf8a2006b71fd915ac8ecb9dc2 100644
--- a/scipost/templates/scipost/about.html
+++ b/scipost/templates/scipost/about.html
@@ -5,20 +5,12 @@
 {% load staticfiles %}
 {% load scipost_extras %}
 
-
-{% block breadcrumb %}
-    <div class="container-outside header">
-        <div class="container">
-            <h1>About SciPost</h1>
-        </div>
-    </div>
-{% endblock %}
-
 {% block content %}
 
 
 <div class="row">
     <div class="col">
+        <h1 class="highlight">About SciPost</h1>
         <p>SciPost is a complete scientific publication portal.</p>
         <p>It is purely online-based, and offers freely, openly, globally and perpetually accessible science.</p>
         <p>Being managed by professional scientists, and making use of editor-solicited and contributed reviews, its Journals aim at the highest achievable standards of refereeing.</p>
diff --git a/scipost/templates/scipost/bare_base.html b/scipost/templates/scipost/bare_base.html
index 7bf4d7b5912cb31419f107bdf0d87bd58994e6fd..fbfb7b288ed8f36a1e814836c0eb22981202e85e 100644
--- a/scipost/templates/scipost/bare_base.html
+++ b/scipost/templates/scipost/bare_base.html
@@ -8,6 +8,9 @@
 
     <link href="https://fonts.googleapis.com/css?family=Merriweather+Sans:300,400,700" rel="stylesheet">
     <link rel="stylesheet" type="text/css" href="{% static 'scipost/SciPost.css' %}" />
+    <link rel="stylesheet" type="text/css" href="{% static 'fa/css/font-awesome.min.css' %}" />
+    <script async src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
+    <script async src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
 
     {% render_bundle 'main' 'css' %}
 
@@ -17,11 +20,7 @@
 
     <title>SciPost{% block pagetitle %}{% endblock pagetitle %}</title>
 
-    <script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
     <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
-    <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
-
-    <script src="https://use.fontawesome.com/1f60a2fe64.js"></script><!-- Temporary -->
 
     {% block headsup %}
     {% endblock headsup %}
@@ -39,11 +38,12 @@
     {% block base %}{% endblock base %}
 
     <script type="text/x-mathjax-config">
-      MathJax.Hub.Config({
-      tex2jax: {
-      inlineMath: [['$','$'], ['\\(','\\)']],
-      processEscapes: true
-      }});
+        MathJax.Hub.Config({
+            tex2jax: {
+                inlineMath: [['$','$'], ['\\(','\\)']],
+                processEscapes: true
+            }
+        });
     </script>
     <script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>
 
diff --git a/scipost/templates/scipost/base_for_sidebar.html b/scipost/templates/scipost/base_for_sidebar.html
index 9569677b98e1c6b420dc2e92165e85252b7d626b..7d1e9d6c69adf2cd9b8a81b8c26e1d4c0916cb89 100644
--- a/scipost/templates/scipost/base_for_sidebar.html
+++ b/scipost/templates/scipost/base_for_sidebar.html
@@ -1,5 +1,7 @@
 {% extends 'scipost/bare_base.html' %}
 
+{% block body_class %}{{block.super}} has-sidebar{% endblock %}
+
 {% block base %}
         <div class="container">
             <div class="content-wrapper">
diff --git a/scipost/templates/scipost/change_password.html b/scipost/templates/scipost/change_password.html
index dd5f72df1f9d3e4d544cba001cfb9f2f1c74a3be..f8a49984937b21833ac9889ad2bf6fc09cddc05f 100644
--- a/scipost/templates/scipost/change_password.html
+++ b/scipost/templates/scipost/change_password.html
@@ -18,7 +18,7 @@
         <form action="{% url 'scipost:change_password' %}" method="post">
             {% csrf_token %}
             {{form|bootstrap}}
-            <input type="submit" class="btn btn-secondary" value="Change" />
+            <input type="submit" class="btn btn-outline-secondary" value="Change" />
         </form>
     </div>
 </div>
diff --git a/scipost/templates/scipost/citation_notifications.html b/scipost/templates/scipost/citation_notifications.html
deleted file mode 100644
index 49c6616840c6dd543d95e78c5b4fa3cb724c30a0..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/citation_notifications.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% block pagetitle %}: citation notifications{% endblock pagetitle %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <span class="breadcrumb-item">Pool</span>
-{% endblock %}
-
-{% block content %}
-
-
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">Citation notifications to process</h1>
-        {% if errormessage %}
-            <h3 class="text-danger">{{ errormessage }}</h3>
-        {% endif %}
-
-        <ul>
-          {% for un in unprocessed_notifications %}
-              <li>
-                  {{ un }} <a href="{% url 'scipost:process_citation_notification' cn_id=un.id %}">Process this notification</a>
-              </li>
-          {% empty %}
-              <li>There are no citation notifications to process.</li>
-          {% endfor %}
-        </ul>
-
-        <p>Return to your <a href="{% url 'scipost:personal_page' %}">personal page</a>.</p>
-    </div>
-</div>
-
-
-
-{% endblock content %}
diff --git a/scipost/templates/scipost/claim_authorships.html b/scipost/templates/scipost/claim_authorships.html
index 7a5144847a5e021d1f5abf766eada6fa3525dba7..1f9a0f9819222c5b91cec264572e4e158ce5c7ba 100644
--- a/scipost/templates/scipost/claim_authorships.html
+++ b/scipost/templates/scipost/claim_authorships.html
@@ -34,7 +34,7 @@
                     <div class="card-footer">
                         <form class="d-inline-block" action="{% url 'scipost:claim_pub_authorship' publication_id=pub.id claim=1 %}" method="post">
                             {% csrf_token %}
-                            <input class="btn btn-secondary" type="submit" value="I am an author" />
+                            <input class="btn btn-outline-secondary" type="submit" value="I am an author" />
                         </form>
                         <form class="d-inline-block ml-1" action="{% url 'scipost:claim_pub_authorship' publication_id=pub.id claim=0 %}" method="post">
                             {% csrf_token %}
@@ -62,7 +62,7 @@
                     <div class="card-footer">
                         <form class="d-inline-block" action="{% url 'scipost:claim_sub_authorship' submission_id=sub.id claim=1 %}" method="post">
                             {% csrf_token %}
-                            <input class="btn btn-secondary" type="submit" value="I am an author" />
+                            <input class="btn btn-outline-secondary" type="submit" value="I am an author" />
                         </form>
                         <form class="d-inline-block ml-1" action="{% url 'scipost:claim_sub_authorship' submission_id=sub.id claim=0 %}" method="post">
                             {% csrf_token %}
@@ -91,7 +91,7 @@
                     <div class="card-footer">
                         <form class="d-inline-block" action="{% url 'scipost:claim_com_authorship' commentary_id=com.id claim=1 %}" method="post">
                             {% csrf_token %}
-                            <input class="btn btn-secondary" type="submit" value="I am an author" />
+                            <input class="btn btn-outline-secondary" type="submit" value="I am an author" />
                         </form>
                         <form class="d-inline-block ml-1" action="{% url 'scipost:claim_com_authorship' commentary_id=com.id claim=0 %}" method="post">
                             {% csrf_token %}
@@ -119,7 +119,7 @@
                     <div class="card-footer">
                         <form class="d-inline-block" action="{% url 'scipost:claim_thesis_authorship' thesis_id=thesis.id claim=1%}" method="post">
                             {% csrf_token %}
-                            <input class="btn btn-secondary" type="submit" value="I am an author" />
+                            <input class="btn btn-outline-secondary" type="submit" value="I am an author" />
                         </form>
                         <form class="d-inline-block ml-1" action="{% url 'scipost:claim_thesis_authorship' thesis_id=thesis.id claim=0%}" method="post">
                             {% csrf_token %}
diff --git a/scipost/templates/scipost/contributor_info.html b/scipost/templates/scipost/contributor_info.html
index 26423a9502582d3579c1ea106e3e1e9752c701fa..d65751ed7db2636235ff7754b3725448eed99fb8 100644
--- a/scipost/templates/scipost/contributor_info.html
+++ b/scipost/templates/scipost/contributor_info.html
@@ -4,7 +4,7 @@
 
 {% block content %}
 
-<h1 class="highlight mb-4">Contributor info: {{ contributor.get_formal_display }}</h1>
+<h1 class="highlight mb-4">Contributor info: {{ contributor.get_title_display }} {{ contributor.user.first_name }} {{ contributor.user.last_name }}</h1>
 
 {% include "scipost/_public_info_as_table.html" with contributor=contributor %}
 
diff --git a/scipost/templates/scipost/contributors_filter.html b/scipost/templates/scipost/contributors_filter.html
deleted file mode 100644
index 12418bd8a252a1be98829df8c4ee790cd806ce2a..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/contributors_filter.html
+++ /dev/null
@@ -1,50 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% load bootstrap %}
-
-{% block pagetitle %}: contributors filter{% endblock pagetitle %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'scipost:draft_registration_invitation' %}" class="breadcrumb-item">Draft registration invitation</a>
-    <span class="breadcrumb-item">Contributors filter</span>
-{% endblock %}
-
-{% block content %}
-
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">Contributors filter</h1>
-
-        <p>This form can be used to split your list of names into a list of names with registered or already invited Contributors and a list of unknown names according to the current database.</p>
-        <p>Please, for every name use the format <code>{last name}</code> or  <code>{last name}, {first name}</code> and use one name per line.</p>
-
-        <form method="post">
-              {% csrf_token %}
-              {{ form|bootstrap }}
-              <input type="submit" class="btn btn-primary" value="Filter"/>
-        </form>
-    </div>
-</div>
-
-{% if form.is_bound %}
-
-    <hr class="divider">
-    <h2>Filter result</h2>
-    {% if names_not_found %}
-        <h3>New names</h3>
-        <pre class="mb-3"><code>{% for name in names_not_found %}{{ name }}{% if not forloop.last %}<br>{% endif %}{% endfor %}</code></pre>
-    {% endif %}
-
-    {% if names_found %}
-        <h3>Names found in the system</h3>
-        <pre class="mb-3"><code>{% for name in names_found %}{{ name }}{% if not forloop.last %}<br>{% endif %}{% endfor %}</code></pre>
-    {% endif %}
-
-    {% if invitations_found %}
-        <h3>Invitations (pending response) found in database</h3>
-        <pre class="mb-3"><code>{% for name in invitations_found %}{{ name }}{% if not forloop.last %}<br>{% endif %}{% endfor %}</code></pre>
-    {% endif %}
-{% endif %}
-
-{% endblock %}
diff --git a/scipost/templates/scipost/draft_registration_invitation.html b/scipost/templates/scipost/draft_registration_invitation.html
deleted file mode 100644
index 4f8900f25de969cfeed59c63bbccb061a33c4c6d..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/draft_registration_invitation.html
+++ /dev/null
@@ -1,99 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% load bootstrap %}
-
-{% block pagetitle %}: registration invitations{% endblock pagetitle %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <span class="breadcrumb-item">Draft registration invitation</span>
-{% endblock %}
-
-{% block content %}
-
-<script>
-$(document).ready(function(){
-
-    $('#id_invitation_type').on('change', function() {
-        switch ($(this).val()) {
-            case "ci":
-                $("#id_cited_in_submission").parents('.form-group').show();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-            break;
-            case "cp":
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').show();
-            break;
-            default:
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-        }
-    }).trigger('change');
-});
-</script>
-
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">Draft a registration invitation</h1>
-        <p>If you have a list of names you want to check with the current database of users, <a href="{% url 'scipost:contributors_filter' %}">please click here</a>.</p>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-12">
-        <h2 class="highlight">Draft a new invitation</h2>
-        {% if errormessage %}
-            <h3 class="text-danger">{{ errormessage }}</h3>
-        {% endif %}
-
-        <form action="{% url 'scipost:draft_registration_invitation' %}" method="post">
-              {% csrf_token %}
-              {{ form.media }}
-              {{ form|bootstrap }}
-              <input type="submit" class="btn btn-primary" value="Submit"/>
-        </form>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-12">
-        <h2 class="highlight">Existing drafts (to be processed by Admin) ({{existing_drafts|length}})</h2>
-        <a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_existing_drafts">view/hide +</a>
-
-        <table class="table" id="table_existing_drafts">
-            <thead>
-                <tr>
-                    <th>Last name</th>
-                    <th>First name</th>
-                    <th>Email</th>
-                    <th>Date drafted</th>
-                    <th>Type</th>
-                    <th>Drafted by</th>
-                    <th></th>
-                </tr>
-            </thead>
-            <tbody>
-                {% for draft in existing_drafts %}
-                  <tr>
-                    <td>{{ draft.last_name }}</td>
-                    <td>{{ draft.first_name }}</td>
-                    <td>{{ draft.email }}</td>
-                    <td>{{ draft.date_drafted }} </td>
-                    <td>{{ draft.get_invitation_type_display }}</td>
-                    <td>{{ draft.drafted_by.user.first_name }} {{ draft.drafted_by.user.last_name }}</td>
-                    <td>
-                        {% if draft.drafted_by.user == request.user %}
-                            <a href="{% url 'scipost:edit_draft_reg_inv' draft.id %}">Edit</a>
-                        {% endif %}</td>
-                  </tr>
-                {% empty %}
-                    <tr>
-                        <td colspan="7">No drafts found.</td>
-                    </tr>
-                {% endfor %}
-            </tbody>
-        </table>
-    </div>
-</div>
-
-{% endblock %}
diff --git a/scipost/templates/scipost/edit_draft_reg_inv.html b/scipost/templates/scipost/edit_draft_reg_inv.html
deleted file mode 100644
index f6fd6afe34f7e90492f7e502306e8cc1e280bc1f..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/edit_draft_reg_inv.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% block pagetitle %}: edit draft reg inv{% endblock pagetitle %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'scipost:registration_invitations' %}" class="breadcrumb-item">Registration Invitations</a>
-    <span class="breadcrumb-item">Pool</span>
-{% endblock %}
-
-{% load bootstrap %}
-
-{% block content %}
-
-<script>
-$(document).ready(function(){
-
-    $('#id_invitation_type').on('change', function() {
-        switch ($(this).val()) {
-            case "ci":
-                $("#id_cited_in_submission").parents('.form-group').show();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-            break;
-            case "cp":
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').show();
-            break;
-            default:
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-        }
-    }).trigger('change');
-});
-</script>
-
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">Edit a draft registration invitation</h1>
-        <form action="{% url 'scipost:edit_draft_reg_inv' draft_id=draft_inv_form.instance.id %}" method="post">
-            {% csrf_token %}
-            {{draft_inv_form.media}}
-            {{draft_inv_form|bootstrap}}
-            <input type="submit" class="btn btn-secondary">
-        </form>
-    </div>
-</div>
-
-{% endblock content %}
diff --git a/scipost/templates/scipost/edit_invitation_personal_message.html b/scipost/templates/scipost/edit_invitation_personal_message.html
deleted file mode 100644
index 5a63e60729afb5e3f300043644f926ab7cfbb2e7..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/edit_invitation_personal_message.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% load scipost_extras %}
-{% load bootstrap %}
-
-{% block pagetitle %}: registration invitation: edit personal message{% endblock pagetitle %}
-
-{% block content %}
-
-<h2>Edit invitation's personal message: for {{ invitation.first_name }} {{ invitation.last_name }}</h2>
-
-{% if errormessage %}
-    <h3 class="text-danger">{{ errormessage }}</h3>
-{% endif %}
-<form action="{% url 'scipost:edit_invitation_personal_message' invitation_id=invitation.id %}" method="post">
-    {% csrf_token %}
-    {{ form|bootstrap }}
-    <input type="submit" value="Submit" class="btn btn-primary">
-</form>
-
-{% endblock %}
diff --git a/scipost/templates/scipost/email_group_members.html b/scipost/templates/scipost/email_group_members.html
index c91fd98618ea113df9d5f966aa5373724191adcd..e96e5735f8c5520f4c85d2523398cf49477b69ae 100644
--- a/scipost/templates/scipost/email_group_members.html
+++ b/scipost/templates/scipost/email_group_members.html
@@ -18,7 +18,7 @@
       <form action="{% url 'scipost:email_group_members' %}" method="post">
         {% csrf_token %}
         {{ form|bootstrap }}
-        <input type="submit" class="btn btn-secondary" value="Send email"/>
+        <input type="submit" class="btn btn-outline-secondary" value="Send email"/>
       </form>
 
     </div>
diff --git a/scipost/templates/scipost/footer.html b/scipost/templates/scipost/footer.html
index f792aebbd718746f0af4c4081b2c4e0cb3a68c1b..a423be0af8357a466e7e9db24fb4d32e32b118f2 100644
--- a/scipost/templates/scipost/footer.html
+++ b/scipost/templates/scipost/footer.html
@@ -1,7 +1,7 @@
 {% load staticfiles %}
 <footer class="footer">
-    <div class="container-fluid py-1">
-      <div class="row my-3">
+    <div class="container py-4">
+      <div class="row mb-0">
 
         <div class="col-md-4 mb-3 mb-md-0">
           Copyright &copy; <a href="{% url 'scipost:foundation' %}" target="_">SciPost Foundation</a>
@@ -9,19 +9,41 @@
           Contact the <a href="mailto:admin@scipost.org">administrators</a> or <a href="mailto:techsupport@scipost.org">tech support</a>
           <br/>
           <a href="{% url 'scipost:terms_and_conditions' %}">Terms and conditions</a>
-        </div>
-        <div class="col-md-3 mb-3 mb-md-0">
-          Follow us:<br/>
-          <table>
+
+          <table class="mt-2 social-media">
         	<tr>
-        	  <td><a href="//www.facebook.com/scipost" target="_blank" title="Facebook"><img src="{% static 'scipost/images/FB-f-Logo__white_29.png' %}" width="20" alt="Facebook"/></a></td>
-        	  <td><a href="//twitter.com/scipost_dot_org" target="_blank" title="Twitter"><img src="{% static 'scipost/images/Twitter_Logo_Blue.png' %}" width="32" alt="Twitter"/></a></td>
-        	  <td><a style="float: right;" href="{% url 'scipost:feeds' %}"><img src="{% static 'scipost/images/feed-icon-28x28.png' %}" alt="Feed logo" width="20"></a></td>
+        	  <td>
+                  <a href="//www.facebook.com/scipost" target="_blank" title="Facebook">
+                      <i class="fa fa-facebook" aria-hidden="true"></i>
+                  </a>
+              </td>
+        	  <td>
+                  <a href="//twitter.com/scipost_dot_org" target="_blank" title="Twitter">
+                      <i class="fa fa-twitter" aria-hidden="true"></i>
+                  </a>
+              </td>
+        	  <td>
+                  <a href="{% url 'scipost:feeds' %}" title="RSS feeds">
+                      <i class="fa fa-rss" aria-hidden="true"></i>
+                  </a>
+              </td>
         	</tr>
           </table>
         </div>
-        <div class="col-md-5">
-          <a rel="license" href="//creativecommons.org/licenses/by/4.0/" target="_blank"><img alt="Creative Commons License" style="border-width:0" src="//i.creativecommons.org/l/by/4.0/80x15.png" /></a><br />Except where otherwise noted, all content on SciPost is licensed under a <a rel="license" href="//creativecommons.org/licenses/by/4.0/" target="_blank">Creative Commons Attribution 4.0 International License</a>.
+        <div class="col-md-4 mb-3 mb-md-0">
+          <a rel="license" href="//creativecommons.org/licenses/by/4.0/" target="_blank"><img alt="Creative Commons License" style="border-width:0" src="//licensebuttons.net/l/by/4.0/80x15.png" /></a><br />Except where otherwise noted, all content on SciPost is licensed under a <a rel="license" href="//creativecommons.org/licenses/by/4.0/" target="_blank">Creative Commons Attribution 4.0 International License</a>.
+        </div>
+        <div class="col-md-4 mb-3 mb-md-0 text-right">
+            <a href="{% url 'journals:journals' %}">Journals</a>
+            <br>
+            <a href="{% url 'submissions:submissions' %}">Submissions</a>
+            <br>
+            <a href="{% url 'commentaries:commentaries' %}">Commentaries</a>
+            <br>
+            <a href="{% url 'theses:theses' %}">Theses</a>
+            <br>
+            <a href="{% url 'scipost:about' %}">About SciPost</a>
+            <br>
         </div>
       </div>
   </div>
diff --git a/scipost/templates/scipost/header.html b/scipost/templates/scipost/header.html
index 05e6b25b83d15f009b6bb6ac425a03dd8b6a7e8b..be3219ff206a2092147378ca46f7972475790976 100644
--- a/scipost/templates/scipost/header.html
+++ b/scipost/templates/scipost/header.html
@@ -1,16 +1,16 @@
 {% load staticfiles %}
     <header>
         <div class="container">
-            <div class="flex-container" id="headerflex">
-              <div class="flex-logobox">
+            <div class="content">
+              <div class="logobox">
         	<a href="{% url 'scipost:index' %}"><img src="{% static 'scipost/images/logo_scipost_RGB_HTML_groot.png' %}" alt="SciPost logo" width="240" /></a>
               </div>
-              <div class="flex-blurbbox d-none d-md-block">
-        	<p>
-        	  <i>The complete scientific publication portal</i><br />
-        	  <i>Managed by professional scientists</i><br />
-        	  <i>For open, global and perpetual access to science</i>
-        	</p>
+              <div class="blurbbox d-none d-md-block">
+            	<p>
+            	  <i>The complete scientific publication portal</i><br />
+            	  <i>Managed by professional scientists</i><br />
+            	  <i>For open, global and perpetual access to science</i>
+            	</p>
               </div>
             </div>
         </div>
diff --git a/scipost/templates/scipost/howto_production.html b/scipost/templates/scipost/howto_production.html
index 231b31f75bea6422bcdbe292ea929e41af2e4a26..c9c394128bc95a5f31013703d28d35ea41e7869f 100644
--- a/scipost/templates/scipost/howto_production.html
+++ b/scipost/templates/scipost/howto_production.html
@@ -16,7 +16,7 @@
 
   <p>Version: 2016-12-16</p>
 
-  <hr class="hr12"/>
+  <hr>
 
   <ol>
     <li>
diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html
index fb119f746bb9f6ed95963de0b7f1d11d31360e92..58b56563081658effeb20a2c355c1705e1637b41 100644
--- a/scipost/templates/scipost/index.html
+++ b/scipost/templates/scipost/index.html
@@ -3,7 +3,7 @@
 {% load render_bundle from webpack_loader %}
 {% load staticfiles %}
 
-{% block body_class %}{{block.super}} has-sidebar has-breadcrumb-submenu homepage{% endblock %}
+{% block body_class %}{{block.super}} has-breadcrumb-submenu homepage{% endblock %}
 
 {% block breadcrumb %}
     <div class="container-outside sub-nav">
@@ -36,7 +36,7 @@
             <!-- Latest publications -->
             <div class="card card-grey px-3">
                 <div class="card-header px-0">
-                    <h2><a href="{% url 'journals:journals' %}" class="text-black">Latest Publications</a></h2>
+                    <h2 class="mb-0"><a href="{% url 'journals:journals' %}" class="text-black">Latest Publications</a></h2>
                 </div>
                 <div class="card-body p-0">
                   <ul class="list-group list-group-flush">
@@ -61,7 +61,7 @@
             <!-- Latest submissions -->
             <div class="card card-grey px-3">
                 <div class="card-header px-0">
-                    <h2><a href="{% url 'submissions:submissions' %}" class="text-black">Latest Submissions</a></h2>
+                    <h2 class="mb-0"><a href="{% url 'submissions:submissions' %}" class="text-black">Latest Submissions</a></h2>
                 </div>
                 <div class="card-body p-0">
                   <ul class="list-group list-group-flush">
@@ -195,6 +195,7 @@
                 <a href="//www.doaj.org" target="_blank"><img src="{% static 'scipost/images/doaj_logo_200.jpg' %}" width="90" alt="DOAJ logo"></a>
                 <a href="//www.clockss.org" target="_blank"><img src="{% static 'scipost/images/clockss_original_logo_boxed_ai-cropped-90.png' %}" width="80" alt="Clockss logo"></a>
                 <a href="//i4oc.org/" target="_blank"><img width="100" src="{% static 'scipost/images/I4OC.png' %}"></a>
+		<a href="//freejournals.org" target="_blank"><img width="100" src="{% static 'scipost/images/FJN-logo-long.png' %}"></a>
             </div>
 	    </div>
 	    <div class="row">
diff --git a/scipost/templates/scipost/layout_2_col.html b/scipost/templates/scipost/layout_2_col.html
new file mode 100644
index 0000000000000000000000000000000000000000..fa5547e21b19e21db34474eaa011101c422811b7
--- /dev/null
+++ b/scipost/templates/scipost/layout_2_col.html
@@ -0,0 +1,47 @@
+{% extends 'scipost/bare_base.html' %}
+
+{% block body_class %}{{block.super}} has-sidebar layout-2-col{% endblock %}
+
+{% block breadcrumb %}
+    <div class="container-outside header">
+        <div class="container">
+            <nav class="breadcrumb hidden-sm-down">
+                {% block breadcrumb_items %}
+                    <a href="{% url 'scipost:index' %}" class="breadcrumb-item">SciPost</a>
+                {% endblock %}
+            </nav>
+        </div>
+    </div>
+{% endblock %}
+
+
+{% block base %}
+        <div class="container mb-4 header">
+            {% block page_header %}{% endblock page_header %}
+        </div>
+
+        <div class="container">
+            <div class="content-wrapper">
+                <div class="main-panel">
+                    <div class="container-inner">
+                        <div class="{% block container_class %}{% endblock %}">
+                            {% block content %}{% endblock content %}
+
+                            {% block content_footer %}{% endblock content_footer %}
+                        </div>
+
+                        {% block secondary_footer %}{% endblock secondary_footer %}
+                    </div>
+
+                </div>
+
+                <div class="sidebar {% block sidebar_class %}{% endblock %}">
+                    <div class="container-inner">
+                        {% block sidebar %}{% endblock %}
+                    </div>
+                </div>
+            </div>
+        </div>
+    {% include 'scipost/footer.html' %}
+
+{% endblock base %}
diff --git a/scipost/templates/scipost/navbar.html b/scipost/templates/scipost/navbar.html
index 960f025f7c4c84f59f4254da00694af3e3888133..e364be488e929e15aca304d3354d5042b76cfa76 100644
--- a/scipost/templates/scipost/navbar.html
+++ b/scipost/templates/scipost/navbar.html
@@ -10,9 +10,13 @@
               <li class="nav-item{% if request.path == '/' %} active{% endif %}">
                 <a href="{% url 'scipost:index' %}" class="nav-link">Home</a>
               </li>
-              <li class="nav-item{% if '/journals/' in request.path %} active{% endif %}">
+
+              <li class="nav-item{% if '/journals/' == request.path %} active{% endif %}">
                 <a href="{% url 'journals:journals' %}" class="nav-link">Journals</a>
               </li>
+              <li class="nav-item{% if '/journals/publications' in request.path %} active{% endif %}">
+                <a href="{% url 'journals:publications' %}" class="nav-link">Publications</a>
+              </li>
               <li class="nav-item{% if '/submissions/' in request.path %} active{% endif %}">
                 <a class="nav-link" href="{% url 'submissions:submissions' %}">Submissions</a>
               </li>
@@ -70,10 +74,6 @@
                   </li>
               {% endif %}
 
-              <li class="nav-item search-item">
-                <a class="nav-link" href="{% url 'scipost:search' %}">Search</a>
-              </li>
-
             </ul>
             <form action="{% url 'scipost:search' %}" method="get" class="form-inline search-nav-form">
                 <input class="form-control mr-sm-2" id="id_q" maxlength="100" name="q" type="text" aria-label="Search" value="{{ search_query|default:'' }}">
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index d76a139812f815609e76571cf0e32d251cc28a70..b48c766d67fdbe009375dcc820a291ad01bb64b3 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -19,7 +19,7 @@
 
         <div class="row">
             <div class="col-12">
-              <hr class="hr12">
+              <hr>
               <h3>Your credentials will soon be verified by an Editor.</h3>
               <p>If accepted, you will become a registered Contributor, enabling you to submit, comment and vote.</p>
             </div>
@@ -44,39 +44,39 @@
                     <div class="tab-nav-inner">
                         <!-- Nav tabs -->
                         <ul class="nav btn-group personal-page-nav" role="tablist">
-                          <li class="nav-item btn btn-secondary">
+                          <li class="nav-item btn btn-outline-secondary">
                             <a class="nav-link" {% if tab == 'account' %}sp-autoload='true'{% endif %} href="#account" sp-dynamic-load="{% url 'scipost:personal_page_account' %}" data-toggle="tab">Account</a>
                           </li>
                           {% if is_scipost_admin or is_edcol_admin or is_editorial_college or is_advisory_board or is_vetting_editor or is_ambassador or is_junior_ambassador %}
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'editorial_actions' %}sp-autoload='true'{% endif %} href="#editorial-actions" sp-dynamic-load="{% url 'scipost:personal_page_editorial_actions' %}" data-toggle="tab">Editorial Actions</a>
                               </li>
             		      {% endif %}
                           {% if perms.scipost.can_referee %}
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'refereeing' %}sp-autoload='true'{% endif %} data-toggle="tab" href="#refereeing" sp-dynamic-load="{% url 'scipost:personal_page_refereeing' %}">Refereeing {% if refereeing_tab_total_count %}({{refereeing_tab_total_count}}){% endif %}</a>
                               </li>
                           {% endif %}
                           {% if contributor %}
                           {# If user is contributor #}
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'publications' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_publications' %}" href="#publications">Publications</a>
                               </li>
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'submissions' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_submissions' %}" href="#submissions">Submissions</a>
                               </li>
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'commentaries' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_commentaries' %}" href="#commentaries">Commentaries</a>
                               </li>
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                 <a class="nav-link" {% if tab == 'theses' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_theses' %}" href="#theses">Theses</a>
                               </li>
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                   {% with contributor.comments.regular_comments.awaiting_vetting.count as count %}
                                     <a class="nav-link" {% if tab == 'comments' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_comments' %}" href="#comments">Comments{% if count %} ({{count}} unvetted){% endif %}</a>
                                   {% endwith %}
                               </li>
-                              <li class="nav-item btn btn-secondary">
+                              <li class="nav-item btn btn-outline-secondary">
                                   {% with contributor.comments.author_replies.awaiting_vetting.count as count %}
                                     <a class="nav-link" {% if tab == 'author_replies' %}sp-autoload='true'{% endif %} data-toggle="tab" sp-dynamic-load="{% url 'scipost:personal_page_author_replies' %}" href="#author-replies">Author Replies{% if count %} ({{count}} unvetted){% endif %}</a>
                                   {% endwith %}
diff --git a/scipost/templates/scipost/registration_invitation_sent.html b/scipost/templates/scipost/registration_invitation_sent.html
deleted file mode 100644
index f2908e563f0affa74ab03d291cfa0f62a1d13e15..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/registration_invitation_sent.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block pagetitle %}: registration invitation sent{% endblock pagetitle %}
-
-{% block content %}
-
-<h1>Registration Invitation sent</h1>
-<p>Return to the <a href="{% url 'scipost:registration_invitations' %}">registration invitations page</a>.</p>
-
-{% endblock content %}
diff --git a/scipost/templates/scipost/registration_invitations.html b/scipost/templates/scipost/registration_invitations.html
deleted file mode 100644
index bcd610d61a0b261225a22c21b222e0e5f2f8f528..0000000000000000000000000000000000000000
--- a/scipost/templates/scipost/registration_invitations.html
+++ /dev/null
@@ -1,121 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% block pagetitle %}: registration invitations{% endblock pagetitle %}
-
-{% load scipost_extras %}
-{% load bootstrap %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <span class="breadcrumb-item">Registration invitations</span>
-{% endblock %}
-
-{% block content %}
-
-<script>
-$(document).ready(function(){
-
-    $('#id_invitation_type').on('change', function() {
-        switch ($(this).val()) {
-            case "ci":
-                $("#id_cited_in_submission").parents('.form-group').show();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-            break;
-            case "cp":
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').show();
-            break;
-            default:
-                $("#id_cited_in_submission").parents('.form-group').hide();
-                $("#id_cited_in_publication").parents('.form-group').hide();
-        }
-    }).trigger('change');
-});
-</script>
-
-<div class="row">
-    <div class="col-12">
-        <div class="card card-grey">
-            <div class="card-body">
-                <h1 class="card-title">Registration Invitations</h1>
-                {% if request.user|is_in_group:'SciPost Administrators' %}
-                    <h3>Perform a <a href="{% url 'scipost:registration_invitations_cleanup' %}">cleanup</a> of existing invitations.</h3>
-                {% endif %}
-            </div>
-        </div>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-12">
-        <h2 class="highlight">Send a new invitation</h2>
-        {% if errormessage %}
-            <h3 class="text-danger">{{ errormessage }}</h3>
-        {% endif %}
-        <form action="{% url 'scipost:registration_invitations' %}" method="post">
-            {% csrf_token %}
-            {{reg_inv_form.media}}
-            {{reg_inv_form|bootstrap}}
-            <input type="submit" class="btn btn-primary" value="Submit">
-        </form>
-    </div>
-</div>
-
-
-<div class="row">
-    <div class="col-12">
-        <h2 class="highlight">Existing drafts (to be processed by Admin)</h2>
-        <a href="javascript:void(0)" class="btn mb-2" data-toggle="toggle" data-target="#table_existing_drafts">view/hide ({{existing_drafts|length}}) +</a>
-
-        <table class="table" id="table_existing_drafts" style="display: none;">
-            <thead>
-                <tr>
-                    <th>Last name</th>
-                    <th>First name</th>
-                    <th>Email</th>
-                    <th>Date drafted</th>
-                    <th>Type</th>
-                    <th>Drafted by</th>
-                    <th colspan="2">Actions</th>
-                </tr>
-            </thead>
-            <tbody>
-                {% for draft in existing_drafts %}
-                  <tr>
-                    <td>{{ draft.last_name }}</td>
-                    <td>{{ draft.first_name }}</td>
-                    <td>{{ draft.email }}</td>
-                    <td>{{ draft.date_drafted }} </td>
-                    <td>{{ draft.get_invitation_type_display }}</td>
-                    <td>{{ draft.drafted_by.user.first_name }} {{ draft.drafted_by.user.last_name }}</td>
-                    <td>
-                        <a href="{% url 'scipost:edit_draft_reg_inv' draft_id=draft.id %}">Edit</a> |
-                        <a href="{% url 'scipost:registration_invitations_from_draft' draft_id=draft.id %}">Process</a> |
-                        <a href="{% url 'scipost:mark_draft_inv_as_processed' draft_id=draft.id %}">Mark as processed</a>
-                    </td>
-                    <td>
-                        <ul>
-                        {% for ac in draft|associated_contributors %}
-                            <li>
-                                <a href="{% url 'scipost:map_draft_reg_inv_to_contributor' draft_id=draft.id contributor_id=ac.id %}">Map to {{ ac.user.first_name }} {{ ac.user.last_name }}</a>
-                            </li>
-                        {% empty %}
-                            <li>No associated contributors found.</li>
-                        {% endfor %}
-                    </ul>
-                    </td>
-                  </tr>
-                {% empty %}
-                    <tr>
-                        <td colspan="8">No drafts found.</td>
-                    </tr>
-                {% endfor %}
-            </tbody>
-        </table>
-    </div>
-</div>
-
-{% include 'scipost/_draft_registration_tables.html' %}
-
-
-{% endblock %}
diff --git a/scipost/templates/scipost/reset_password_confirm.html b/scipost/templates/scipost/reset_password_confirm.html
index fe4d5ba196d01f9564082bc223b181a06d1dd59d..3ec7dd517c06f04c15e6a16267daa7a58db65a61 100644
--- a/scipost/templates/scipost/reset_password_confirm.html
+++ b/scipost/templates/scipost/reset_password_confirm.html
@@ -12,7 +12,7 @@
         <form method="post">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input class="btn btn-secondary" type="submit" value="Submit">
+            <input class="btn btn-outline-secondary" type="submit" value="Submit">
         </form>
     {% else %}
         <p>This reset link is no longer valid!</p>
diff --git a/scipost/templates/scipost/send_precooked_email.html b/scipost/templates/scipost/send_precooked_email.html
index 9c2b19a536454128bb88a7b0aaf64eed19b1dc24..fe6f5fed4d5f1b5b8154cf8f989b29142c97d9f2 100644
--- a/scipost/templates/scipost/send_precooked_email.html
+++ b/scipost/templates/scipost/send_precooked_email.html
@@ -18,7 +18,7 @@
           <form action="{% url 'scipost:send_precooked_email' %}" method="post">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input type="submit" class="btn btn-secondary" value="Send email"/>
+            <input type="submit" class="btn btn-outline-secondary" value="Send email"/>
           </form>
     </div>
 </div>
diff --git a/scipost/templates/scipost/unavailability_period_form.html b/scipost/templates/scipost/unavailability_period_form.html
index c014e4cea8bc1fa587dabe090ba4afd366c4283b..832811016eae5ec47afb91189a634503952776e8 100644
--- a/scipost/templates/scipost/unavailability_period_form.html
+++ b/scipost/templates/scipost/unavailability_period_form.html
@@ -18,7 +18,7 @@
         <form method="post">
             {% csrf_token %}
             {{form|bootstrap}}
-            <input type="submit" class="btn btn-secondary" value="Submit" />
+            <input type="submit" class="btn btn-outline-secondary" value="Submit" />
         </form>
     </div>
 </div>
diff --git a/scipost/templates/scipost/vet_authorship_claims.html b/scipost/templates/scipost/vet_authorship_claims.html
index fb805bc4c09ce55ad6a0f68dfb544939d922117f..886faf4f6d9f49661cdfaead887402ef6dffc6a2 100644
--- a/scipost/templates/scipost/vet_authorship_claims.html
+++ b/scipost/templates/scipost/vet_authorship_claims.html
@@ -58,7 +58,7 @@
                 <div class="card-footer">
                     <form class="d-inline-block" action="{% url 'scipost:vet_authorship_claim' claim_id=claim.id claim=1%}" method="post">
                       {% csrf_token %}
-                      <input class="btn btn-secondary px-3" type="submit" value="Accept" />
+                      <input class="btn btn-outline-secondary px-3" type="submit" value="Accept" />
                     </form>
                     <form class="d-inline-block ml-1" action="{% url 'scipost:vet_authorship_claim' claim_id=claim.id claim=0%}" method="post">
                       {% csrf_token %}
diff --git a/scipost/templates/scipost/vet_registration_requests.html b/scipost/templates/scipost/vet_registration_requests.html
index 45675acc112a77555438c0232881bbb6bf0c228c..c854c00524a4de2b089c517798dab61a815f3ed2 100644
--- a/scipost/templates/scipost/vet_registration_requests.html
+++ b/scipost/templates/scipost/vet_registration_requests.html
@@ -47,7 +47,7 @@ $(function() {
             <form action="{% url 'scipost:vet_registration_request_ack' contributor_id=contributor_to_vet.id %}" method="post">
                 {% csrf_token %}
                 {{form|bootstrap}}
-                <input type="submit" class="btn btn-secondary" />
+                <input type="submit" class="btn btn-outline-secondary" />
             </form>
         </div>
     </div>
diff --git a/scipost/templatetags/bootstrap.py b/scipost/templatetags/bootstrap.py
index 1b8b0d0d6ba28c47467ec45efd23a874cc440d32..15e0199c880c93b9aca691f22f7cfc6fc9e30794 100644
--- a/scipost/templatetags/bootstrap.py
+++ b/scipost/templatetags/bootstrap.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.template.loader import get_template
 from django import template
diff --git a/scipost/templatetags/extra_form_widgets.py b/scipost/templatetags/extra_form_widgets.py
index 3d05ac0b95df1ff8aa7934b97abe4d748378d8c4..7f1aaa0ba67dd761e20b6f4d6e34b915b8ea3111 100644
--- a/scipost/templatetags/extra_form_widgets.py
+++ b/scipost/templatetags/extra_form_widgets.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from ..widgets import SelectButtonWidget
diff --git a/scipost/templatetags/filename.py b/scipost/templatetags/filename.py
index 6a20f1384cb29b5befd3d6dbf9c8c4a95335c3a1..9c00630cc7f30455638971e4e285b6785a705757 100644
--- a/scipost/templatetags/filename.py
+++ b/scipost/templatetags/filename.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import os
 
 from django import template
@@ -8,4 +12,7 @@ register = template.Library()
 
 @register.filter
 def filename(value):
-    return os.path.basename(value.file.name)
+    try:
+        return os.path.basename(value.file.name)
+    except OSError:
+        return 'Error: File not found'
diff --git a/scipost/templatetags/request_filters.py b/scipost/templatetags/request_filters.py
index 124ebd9aeae4a9c3852d32ab5bccea0271b8bad5..7a8461a3f3e0bafe2406752075d1acc5b27d68cd 100644
--- a/scipost/templatetags/request_filters.py
+++ b/scipost/templatetags/request_filters.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from django import template
@@ -25,3 +29,9 @@ def active(context, pattern_or_urlname):
     if re.search(pattern, path):
         return 'active'
     return ''
+
+
+@register.simple_tag(takes_context=True)
+def active_get_request(context, get_key, get_value):
+    query = context['request'].GET.dict()
+    return 'active' if query.get(get_key) == str(get_value) else ''
diff --git a/scipost/templatetags/scipost_extras.py b/scipost/templatetags/scipost_extras.py
index 567bbb642ddddcf99221efdbb6cd3357f89b5dd9..6fce7867974212819647a41b4049ddc94f31a19c 100644
--- a/scipost/templatetags/scipost_extras.py
+++ b/scipost/templatetags/scipost_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from ..constants import subject_areas_dict
@@ -39,7 +43,7 @@ def is_in_group(user, group_name):
 @register.filter(name='associated_contributors')
 def associated_contributors(draft):
     return Contributor.objects.filter(
-        user__last_name__icontains=draft.last_name)
+        user__last_name__icontains=draft.last_name).order_by('user__last_name')
 
 
 def is_modulo(counter, total, modulo):
diff --git a/scipost/templatetags/texfilters.py b/scipost/templatetags/texfilters.py
index f8e3d05e6f587e54ef526741ccd29c4e0f7ebce7..c75d8219cb22366fe3c91fac93e7fb637518ebb5 100644
--- a/scipost/templatetags/texfilters.py
+++ b/scipost/templatetags/texfilters.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 from django.utils.html import escape
 from django.utils.text import normalize_newlines
diff --git a/scipost/templatetags/user_groups.py b/scipost/templatetags/user_groups.py
index 21a1f0ff5f5db9656c5c2a68cfec6eb6641bb5eb..7f58dd5944097119fdc3a4e8033b2275510aa597 100644
--- a/scipost/templatetags/user_groups.py
+++ b/scipost/templatetags/user_groups.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 register = template.Library()
diff --git a/scipost/test_services.py b/scipost/test_services.py
index cce23f55eca75dbf7a4a3aa0a845ead809d5c964..fed6fb9aa1d044b6a2207ba1fe4657b98200664e 100644
--- a/scipost/test_services.py
+++ b/scipost/test_services.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.test import TestCase
diff --git a/scipost/test_views.py b/scipost/test_views.py
index 22291f792c19630af0cc6b5192667fb3b4c4d8b4..5c3f5e92824fdd9c59b82c055ba51935c36dc567 100644
--- a/scipost/test_views.py
+++ b/scipost/test_views.py
@@ -1,9 +1,13 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.contrib.auth.models import Group
 from django.test import TestCase, Client, tag
 
-from commentaries.factories import UnvettedCommentaryFactory, VettedCommentaryFactory,\
-                                   UnpublishedVettedCommentaryFactory
+from commentaries.factories import UnvettedCommentaryFactory, CommentaryFactory,\
+                                   UnpublishedCommentaryFactory
 from commentaries.forms import CommentarySearchForm
 from commentaries.models import Commentary
 
@@ -81,7 +85,7 @@ class VetCommentaryRequestsTest(TestCase):
         self.assertEquals(response.context['commentary_to_vet'], None)
 
         # Only vetted Commentaries exist!
-        VettedCommentaryFactory()
+        CommentaryFactory()
         response = self.client.get(self.view_url)
         self.assertEquals(response.context['commentary_to_vet'], None)
 
@@ -96,7 +100,7 @@ class BrowseCommentariesTest(TestCase):
     fixtures = ['groups', 'permissions']
 
     def setUp(self):
-        VettedCommentaryFactory(discipline='physics')
+        CommentaryFactory(discipline='physics')
         self.view_url = reverse('commentaries:browse', kwargs={
             'discipline': 'physics',
             'nrweeksback': '1'
@@ -118,7 +122,7 @@ class CommentaryDetailTest(TestCase):
 
     def setUp(self):
         self.client = Client()
-        self.commentary = UnpublishedVettedCommentaryFactory()
+        self.commentary = UnpublishedCommentaryFactory()
         self.target = reverse(
             'commentaries:commentary',
             kwargs={'arxiv_or_DOI_string': self.commentary.arxiv_or_DOI_string}
diff --git a/scipost/tests.py b/scipost/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/scipost/tests.py
+++ b/scipost/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/scipost/urls.py b/scipost/urls.py
index 9ab0cf02bef3b221475c65d090119be5b56fd827..3e5ee916eb159b0034df073a68b0f62836342a9a 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 from django.views.generic import TemplateView
 
@@ -7,7 +11,7 @@ from .feeds import LatestNewsFeedRSS, LatestNewsFeedAtom, LatestCommentsFeedRSS,
                    LatestPublicationsFeedRSS, LatestPublicationsFeedAtom
 
 from journals import views as journals_views
-from journals.constants import REGEX_CHOICES
+from journals.constants import REGEX_CHOICES, PUBLICATION_DOI_REGEX
 from submissions import views as submission_views
 
 JOURNAL_REGEX = '(?P<doi_label>%s)' % REGEX_CHOICES
@@ -83,44 +87,9 @@ urlpatterns = [
     url(r'^registration_requests$', views.registration_requests, name="registration_requests"),
     url(r'^registration_requests/(?P<contributor_id>[0-9]+)/reset$',
         views.registration_requests_reset, name="registration_requests_reset"),
-    url(r'^registration_invitations/(?P<draft_id>[0-9]+)$',
-        views.registration_invitations, name="registration_invitations_from_draft"),
-    url(r'^registration_invitations$',
-        views.registration_invitations, name="registration_invitations"),
-    url(r'^draft_registration_invitation$',
-        views.draft_registration_invitation, name="draft_registration_invitation"),
-    url(r'^contributors_filter$', views.contributors_filter, name="contributors_filter"),
-    url(r'^edit_draft_reg_inv/(?P<draft_id>[0-9]+)$',
-        views.edit_draft_reg_inv, name="edit_draft_reg_inv"),
-    url(r'^map_draft_reg_inv_to_contributor/(?P<draft_id>[0-9]+)/(?P<contributor_id>[0-9]+)$',
-        views.map_draft_reg_inv_to_contributor, name="map_draft_reg_inv_to_contributor"),
-    url(r'^registration_invitations_cleanup$',
-        views.registration_invitations_cleanup,
-        name="registration_invitations_cleanup"),
-    url(r'^remove_registration_invitation/(?P<invitation_id>[0-9]+)$',
-        views.remove_registration_invitation,
-        name="remove_registration_invitation"),
-    url(r'^edit_invitation_personal_message/(?P<invitation_id>[0-9]+)$',
-        views.edit_invitation_personal_message,
-        name="edit_invitation_personal_message"),
-    url(r'^renew_registration_invitation/(?P<invitation_id>[0-9]+)$',
-        views.renew_registration_invitation,
-        name="renew_registration_invitation"),
-    url(r'^mark_reg_inv_as_declined/(?P<invitation_id>[0-9]+)$',
-        views.mark_reg_inv_as_declined,
-        name="mark_reg_inv_as_declined"),
-    url(r'^registration_invitation_sent$',
-        TemplateView.as_view(template_name='scipost/registration_invitation_sent.html'),
-        name='registration_invitation_sent'),
-
-    # Registration invitations
+
+    # Registration invitations (Never change this route! Thank you.)
     url(r'^invitation/(?P<key>.+)$', views.invitation, name='invitation'),
-    url(r'^mark_draft_inv_as_processed/(?P<draft_id>[0-9]+)$',
-        views.mark_draft_inv_as_processed, name='mark_draft_inv_as_processed'),
-    url(r'^citation_notifications$',
-        views.citation_notifications, name='citation_notifications'),
-    url(r'^process_citation_notification/(?P<cn_id>[0-9]+)$',
-        views.process_citation_notification, name='process_citation_notification'),
 
     # Authentication
     url(r'^login/$', views.login_view, name='login'),
@@ -220,16 +189,16 @@ urlpatterns = [
         name='author_reply_detail'),
 
     # Publication detail (+pdf)
-    url(r'^10.21468/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^10.21468/(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.publication_detail,
         name='publication_detail'),
-    url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    url(r'^(?P<doi_label>{regex})$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.publication_detail,
         name='publication_detail'),
-    url(r'^10.21468/(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/pdf$',
+    url(r'^10.21468/(?P<doi_label>{regex})/pdf$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.publication_detail_pdf,
         name='publication_pdf'),
-    url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/pdf$',
+    url(r'^(?P<doi_label>{regex})/pdf$'.format(regex=PUBLICATION_DOI_REGEX),
         journals_views.publication_detail_pdf,
         name='publication_pdf'),
 
@@ -242,6 +211,7 @@ urlpatterns = [
     # Journal landing page
     url(r'^10.21468/%s' % JOURNAL_REGEX, journals_views.landing_page, name='landing_page'),
     url(r'^%s' % JOURNAL_REGEX, journals_views.landing_page, name='landing_page'),
+    url(r'^arxiv_doi_feed/%s' % JOURNAL_REGEX, journals_views.arxiv_doi_feed, name='arxiv_doi_feed'),
 
     ################
     # Howto guides #
diff --git a/scipost/utils.py b/scipost/utils.py
index 8c95c5ddc109f882dba1f4052172eaedfce83fe2..61b8d05fc96f7217d0aa347fd2b4a4e3238b7e71 100644
--- a/scipost/utils.py
+++ b/scipost/utils.py
@@ -1,16 +1,6 @@
-import datetime
-import hashlib
-import random
-import string
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
 
-from django.contrib.auth.models import User
-
-from django.core.mail import EmailMultiAlternatives
-from django.core.urlresolvers import reverse
-from django.template import Context, Template
-from django.utils import timezone
-
-from .models import DraftInvitation, RegistrationInvitation
 
 from common.utils import BaseMailUtil
 
@@ -83,41 +73,6 @@ class Utils(BaseMailUtil):
     mail_sender = 'registration@scipost.org'
     mail_sender_title = 'SciPost registration'
 
-    @classmethod
-    def password_mismatch(cls):
-        if cls.form.cleaned_data['password'] != cls.form.cleaned_data['password_verif']:
-            return True
-        else:
-            return False
-
-    @classmethod
-    def username_already_taken(cls):
-        if User.objects.filter(username=cls.form.cleaned_data['username']).exists():
-            return True
-        else:
-            return False
-
-    @classmethod
-    def email_already_taken(cls):
-        if User.objects.filter(email=cls.form.cleaned_data['email']).exists():
-            return True
-        else:
-            return False
-
-    @classmethod
-    def email_already_invited(cls):
-        if RegistrationInvitation.objects.filter(email=cls.form.cleaned_data['email']).exists():
-            return True
-        else:
-            return False
-
-    @classmethod
-    def email_already_drafted(cls):
-        if DraftInvitation.objects.filter(email=cls.form.cleaned_data['email']).exists():
-            return True
-        else:
-            return False
-
     @classmethod
     def send_registration_email(cls):
         """
@@ -141,520 +96,3 @@ class Utils(BaseMailUtil):
         cls._send_mail(cls, 'new_activation_link',
                        [cls._context['contributor'].user.email],
                        'new email activation link')
-
-    @classmethod
-    def create_draft_invitation(cls):
-        invitation = DraftInvitation(
-            title=cls.form.cleaned_data['title'],
-            first_name=cls.form.cleaned_data['first_name'],
-            last_name=cls.form.cleaned_data['last_name'],
-            email=cls.form.cleaned_data['email'],
-            invitation_type=cls.form.cleaned_data['invitation_type'],
-            cited_in_submission=cls.form.cleaned_data['cited_in_submission'],
-            cited_in_publication=cls.form.cleaned_data['cited_in_publication'],
-            drafted_by=cls.contributor,
-            )
-        invitation.save()
-
-    @classmethod
-    def create_invitation(cls):
-        invitation = RegistrationInvitation(
-            title=cls.form.cleaned_data['title'],
-            first_name=cls.form.cleaned_data['first_name'],
-            last_name=cls.form.cleaned_data['last_name'],
-            email=cls.form.cleaned_data['email'],
-            invitation_type=cls.form.cleaned_data['invitation_type'],
-            cited_in_submission=cls.form.cleaned_data['cited_in_submission'],
-            cited_in_publication=cls.form.cleaned_data['cited_in_publication'],
-            invited_by=cls.contributor,
-            message_style=cls.form.cleaned_data['message_style'],
-            personal_message=cls.form.cleaned_data['personal_message'],
-            )
-        Utils.load({'invitation': invitation})
-
-    @classmethod
-    def send_registration_invitation_email(cls, renew=False):
-        signature = (cls.invitation.invited_by.get_title_display() + ' '
-                     + cls.invitation.invited_by.user.first_name + ' '
-                     + cls.invitation.invited_by.user.last_name)
-        if not renew:
-            # Generate email activation key and link
-            salt = ""
-            for i in range(5):
-                salt = salt + random.choice(string.ascii_letters)
-            salt = salt.encode('utf8')
-            invitationsalt = cls.invitation.last_name
-            invitationsalt = invitationsalt.encode('utf8')
-            cls.invitation.invitation_key = hashlib.sha1(salt+invitationsalt).hexdigest()
-        cls.invitation.key_expires = datetime.datetime.strftime(
-            datetime.datetime.now() + datetime.timedelta(days=365), "%Y-%m-%d %H:%M:%S")
-        if renew:
-            cls.invitation.nr_reminders += 1
-            cls.invitation.date_last_reminded = timezone.now()
-        cls.invitation.save()
-        email_text = ''
-        email_text_html = ''
-        email_context = {}
-        if renew:
-            email_text += ('Reminder: Invitation to SciPost\n'
-                           '-------------------------------\n\n')
-            email_text_html += ('<strong>Reminder: Invitation to SciPost</strong>'
-                                '<br/><hr/><br/>')
-        if cls.invitation.invitation_type == 'F':
-            email_text += 'RE: Invitation to join the Editorial College of SciPost\n\n'
-            email_text_html += ('<strong>RE: Invitation to join the Editorial College '
-                                'of SciPost</strong><br/><hr/><br/>')
-        email_text += 'Dear '
-        email_text_html += 'Dear '
-        if cls.invitation.message_style == 'F':
-            email_text += cls.invitation.get_title_display() + ' ' + cls.invitation.last_name
-            email_text_html += '{{ title }} {{ last_name }}'
-            email_context['title'] = cls.invitation.get_title_display()
-            email_context['last_name'] = cls.invitation.last_name
-        else:
-            email_text += cls.invitation.first_name
-            email_text_html += '{{ first_name }}'
-            email_context['first_name'] = cls.invitation.first_name
-        email_text += ',\n\n'
-        email_text_html += ',<br/>'
-        if len(cls.invitation.personal_message) > 3:
-            email_text += cls.invitation.personal_message + '\n\n'
-            email_text_html += '\n{{ personal_message|linebreaks }}<br/>\n'
-            email_context['personal_message'] = cls.invitation.personal_message
-
-        # This text to be put in C, ci invitations
-        summary_text = (
-            '\n\nIn summary, SciPost.org is a publication portal managed by '
-            'professional scientists, offering (among others) high-quality '
-            'Open Access journals with innovative forms of refereeing, and a '
-            'means of commenting on all existing literature. SciPost is established as '
-            'a not-for-profit foundation devoted to serving the interests of the '
-            'international scientific community.'
-            '\n\nThe site is anchored at https://scipost.org. Many further details '
-            'about SciPost, its principles, ideals and implementation can be found at '
-            'https://scipost.org/about and https://scipost.org/FAQ.'
-            '\n\nAs a professional academic, you can register at '
-            'https://scipost.org/register, enabling you to contribute to the site\'s '
-            'contents, for example by offering submissions, reports and comments.'
-            '\n\nFor your convenience, a partly pre-filled registration '
-            'form has been prepared for you at '
-            'https://scipost.org/invitation/' + cls.invitation.invitation_key
-            + ' (you can in any case still register at '
-            'https://scipost.org/register).\n\n'
-            'If you do develop sympathy for the initiative, besides participating in the '
-            'online platform, we would be very grateful if you considered submitting a '
-            'publication to one of the journals within the near future, in order to help '
-            'establish their reputation. We\'ll also be looking forward to your reaction, '
-            'comments and suggestions about the initiative, which we hope you will find '
-            'useful to your work as a professional scientist.'
-            '\n\nMany thanks in advance for taking a few minutes to look into it,'
-            '\n\nOn behalf of the SciPost Foundation,\n\n'
-            + signature + '\n'
-        )
-
-        summary_text_html = (
-            '\n<p>In summary, SciPost.org is a publication portal managed by '
-            'professional scientists, offering (among others) high-quality '
-            'Open Access journals with innovative forms of refereeing, and a '
-            'means of commenting on all existing literature. SciPost is established as '
-            'a not-for-profit foundation devoted to serving the interests of the '
-            'international scientific community.</p>'
-            '\n<p>The site is anchored at <a href="https://scipost.org">scipost.org</a>. '
-            'Many further details '
-            'about SciPost, its principles, ideals and implementation can be found at '
-            'the <a href="https://scipost.org/about">about</a> '
-            'and <a href="https://scipost.org/FAQ">FAQ</a> pages.</p>'
-            '<p>As a professional academic, you can register at the '
-            '<a href="https://scipost.org/register">registration page</a>, '
-            'enabling you to contribute to the site\'s '
-            'contents, for example by offering submissions, reports and comments.</p>'
-            '\n<p>For your convenience, a partly pre-filled '
-            '<a href="https://scipost.org/invitation/{{ invitation_key }}">registration form</a>'
-            ' has been prepared for you (you can in any case still register at the '
-            '<a href="https://scipost.org/register">registration page</a>).</p>'
-            '\n<p>If you do develop sympathy for the initiative, besides participating in the '
-            'online platform, we would be very grateful if you considered submitting a '
-            'publication to one of the journals within the near future, in order to help '
-            'establish their reputation. We\'ll also be looking forward to your reaction, '
-            'comments and suggestions about the initiative, which we hope you will find '
-            'useful to your work as a professional scientist.</p>'
-            '\n<p>Many thanks in advance for taking a few minutes to look into it,</p>'
-            '<p>On behalf of the SciPost Foundation,</p>'
-            # '<br/>Prof. dr Jean-Sébastien Caux'
-            # '<br/>---------------------------------------------'
-            # '<br/>Institute for Theoretical Physics'
-            # '<br/>University of Amsterdam'
-            # '<br/>Science Park 904'
-            # '<br/>1098 XH Amsterdam<br/>The Netherlands'
-            # '<br/>---------------------------------------------'
-            # '<br/>tel.: +31 (0)20 5255775'
-            # '<br/>fax: +31 (0)20 5255778'
-            # '<br/>---------------------------------------------'
-            '<p>' + signature + '</p>'
-        )
-        email_context['invitation_key'] = cls.invitation.invitation_key
-
-        if cls.invitation.invitation_type == 'R':
-            # Refereeing invitation
-            # Details of the submission to referee are already in the personal_message field
-            email_text += (
-                'We would hereby like to cordially invite you '
-                'to become a Contributor on SciPost '
-                '(this is required in order to deliver reports; '
-                'our records show that you are not yet registered); '
-                'for your convenience, we have prepared a pre-filled form for you at\n\n'
-                'https://scipost.org/invitation/' + cls.invitation.invitation_key + '\n\n'
-                'after which your registration will be activated, allowing you to contribute, '
-                'in particular by providing referee reports.\n\n'
-                'To ensure timely processing of the submission (out of respect for the authors), '
-                'we would appreciate a quick accept/decline '
-                'response from you, ideally within the next 2 days.\n\n'
-                'If you are not able to provide a Report, you can let us know by simply '
-                'navigating to \n\nhttps://scipost.org/submissions/decline_ref_invitation/'
-                + cls.invitation.invitation_key + '\n\n'
-                'If you are able to provide a Report, you can confirm this after registering '
-                'and logging in (you will automatically be prompted for a confirmation).\n\n'
-                'We very much hope that we can count on your expertise,\n\n'
-                'Many thanks in advance,\n\nThe SciPost Team')
-            email_text_html += (
-                '\n<p>We would hereby like to cordially invite you '
-                'to become a Contributor on SciPost '
-                '(this is required in order to deliver reports; '
-                'our records show that you are not yet registered); '
-                'for your convenience, we have prepared a pre-filled '
-                '<a href="https://scipost.org/invitation/{{ invitation_key }}">registration form</a> '
-                'for you. After activation of your registration, you will be allowed to contribute, '
-                'in particular by providing referee reports.</p>'
-                '<p>To ensure timely processing of the submission (out of respect for the authors), '
-                'we would appreciate a quick accept/decline '
-                'response from you, ideally within the next 2 days.</p>'
-                '<p>If you are <strong>not</strong> able to provide a Report, '
-                'you can let us know by simply '
-                '<a href="https://scipost.org/submissions/decline_ref_invitation/{{ invitation_key }}">'
-                'clicking here</a>.</p>'
-                '<p>If you are able to provide a Report, you can confirm this after registering '
-                'and logging in (you will automatically be prompted for a confirmation).</p>'
-                '<p>We very much hope that we can count on your expertise,</p>'
-                '<p>Many thanks in advance,</p>'
-                '<p>The SciPost Team</p>')
-
-            email_text += SCIPOST_SUMMARY_FOOTER
-            email_text_html += SCIPOST_SUMMARY_FOOTER_HTML
-            email_text_html += '<br/>' + EMAIL_FOOTER
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-            emailmessage = EmailMultiAlternatives(
-                'SciPost: refereeing request (and registration invitation)', email_text,
-                'SciPost Refereeing <refereeing@scipost.org>',
-                [cls.invitation.email],
-                cc=[cls.invitation.invited_by.user.email],
-                bcc=['refereeing@scipost.org'],
-                reply_to=['refereeing@scipost.org'])
-            emailmessage.attach_alternative(html_version, 'text/html')
-
-        elif cls.invitation.invitation_type == 'ci':
-            # Has been cited in a Submission. Invite!
-            email_text += (
-                'Your work has been cited in a manuscript submitted to SciPost,'
-                '\n\n' + cls.invitation.cited_in_submission.title
-                + ' by ' + cls.invitation.cited_in_submission.author_list + '.\n\n'
-                'I would hereby like to use this opportunity to quickly introduce '
-                'you to the SciPost initiative, and to invite you to become an active '
-                'Contributor to the site. You might for example consider reporting or '
-                'commenting on the above submission before the refereeing deadline.')
-            email_text_html += (
-                '<p>Your work has been cited in a manuscript submitted to SciPost,</p>'
-                '<p>{{ sub_title }} <br>by {{ sub_author_list }},</p>'
-                '<p>which you can find online at the '
-                '<a href="https://scipost.org/submission/{{ arxiv_nr_w_vn_nr }}">'
-                'submission\'s page</a>.</p>'
-                '\n<p>I would hereby like to use this opportunity to quickly introduce '
-                'you to the SciPost initiative, and to invite you to become an active '
-                'Contributor to the site. You might for example consider reporting or '
-                'commenting on the above submission before the refereeing deadline.</p>')
-            email_context['sub_title'] = cls.invitation.cited_in_submission.title
-            email_context['sub_author_list'] = cls.invitation.cited_in_submission.author_list
-            email_context['arxiv_identifier_w_vn_nr'] = cls.invitation.cited_in_submission.arxiv_identifier_w_vn_nr
-
-            email_text += summary_text
-            email_text_html += summary_text_html
-            email_text_html += '<br/>' + EMAIL_FOOTER
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-            emailmessage = EmailMultiAlternatives(
-                'SciPost: invitation', email_text,
-                'SciPost registration <registration@scipost.org>',
-                [cls.invitation.email],
-                cc=[cls.invitation.invited_by.user.email],
-                bcc=['registration@scipost.org'],
-                reply_to=['registration@scipost.org'])
-            emailmessage.attach_alternative(html_version, 'text/html')
-
-        elif cls.invitation.invitation_type == 'cp':
-            # Has been cited in a Publication. Invite!
-            email_text += (
-                'Your work has been cited in a paper published by SciPost,'
-                '\n\n' + cls.invitation.cited_in_publication.title
-                + '\nby ' + cls.invitation.cited_in_publication.author_list +
-                '\n\n(published as ' + cls.invitation.cited_in_publication.citation()
-                + ').\n\n'
-                'I would hereby like to use this opportunity to quickly introduce '
-                'you to the SciPost initiative, and to invite you to become an active '
-                'Contributor to the site.')
-            email_text_html += (
-                '<p>Your work has been cited in a paper published by SciPost,</p>'
-                '<p>{{ pub_title }}</p> <p>by {{ pub_author_list }}</p>'
-                '(published as <a href="https://scipost.org/{{ doi_label }}">{{ citation }}</a>).'
-                '</p>'
-                '\n<p>I would hereby like to use this opportunity to quickly introduce '
-                'you to the SciPost initiative, and to invite you to become an active '
-                'Contributor to the site.</p>')
-            email_context['pub_title'] = cls.invitation.cited_in_publication.title
-            email_context['pub_author_list'] = cls.invitation.cited_in_publication.author_list
-            email_context['doi_label'] = cls.invitation.cited_in_publication.doi_label
-            email_context['citation'] = cls.invitation.cited_in_publication.citation()
-            email_text += summary_text
-            email_text_html += summary_text_html
-            email_text_html += '<br/>' + EMAIL_FOOTER
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-            emailmessage = EmailMultiAlternatives(
-                'SciPost: invitation', email_text,
-                'SciPost registration <registration@scipost.org>',
-                [cls.invitation.email],
-                cc=[cls.invitation.invited_by.user.email],
-                bcc=['registration@scipost.org'],
-                reply_to=['registration@scipost.org'])
-            emailmessage.attach_alternative(html_version, 'text/html')
-
-        elif cls.invitation.invitation_type == 'C':
-            email_text += ('I would hereby like to quickly introduce '
-                           'you to a scientific publishing initiative '
-                           'called SciPost, and to invite you to become an active Contributor.')
-            email_text += summary_text
-            email_text_html += (
-                '<p>I would hereby like to quickly introduce '
-                'you to a scientific publishing initiative '
-                'called SciPost, and to invite you to become an active Contributor.</p>')
-            email_text_html += summary_text_html + '<br/>' + EMAIL_FOOTER
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-            emailmessage = EmailMultiAlternatives(
-                'SciPost: invitation', email_text,
-                'SciPost registration <registration@scipost.org>',
-                [cls.invitation.email],
-                cc=[cls.invitation.invited_by.user.email],
-                bcc=['registration@scipost.org'],
-                reply_to=['registration@scipost.org'])
-            emailmessage.attach_alternative(html_version, 'text/html')
-
-        elif cls.invitation.invitation_type == 'F':
-            email_text += (
-                '\nYou will perhaps have already heard about SciPost, a publication '
-                'portal established by and for professional scientists.\n'
-                '\nSciPost.org is legally based on a not-for-profit foundation and will '
-                'operate in perpetuity as a non-commercial entity at the exclusive service '
-                'of the academic sector, bringing a cost-slashing alternative to existing '
-                'practices.\n'
-                '\nSciPost offers a collection of two-way open '
-                'access (no subscription fees, no author fees) journals with extremely '
-                'stringent (peer-witnessed) refereeing, overseen by '
-                'our Editorial College (exclusively composed '
-                'of established, professionally practising scientists). The whole process is '
-                'designed to ensure the highest achievable scientific quality while making the '
-                'editorial workflow as light and efficient as possible.\n'
-                '\nTo go straight to the point, on behalf of the foundation '
-                'and in view of your professional expertise, I hereby would '
-                'like to invite you to become an Editorial Fellow and thus join the '
-                'Editorial College of SciPost Physics.\n\n'
-                'Please note that only well-known and respected senior academics are '
-                'being contacted for this purpose. Academic reputation and involvement '
-                'in the community are the most important criteria guiding our '
-                'considerations of who should belong to the Editorial College.\n'
-                '\nTo help you in considering this, it would be best if you were to take '
-                'the time to look at the website itself, which is anchored at scipost.org. '
-                'Besides looking around the side, you can also personally register '
-                '(to become a Contributor, without necessarily committing to membership '
-                'of the Editorial College, this to be discussed separately) by visiting '
-                'the following single-use link, containing a partly pre-filled form for '
-                'your convenience: \n\n'
-                'https://scipost.org/invitation/' + cls.invitation.invitation_key + '.\n'
-                '\nMany details about the initiative '
-                'can then be found at scipost.org/about and at scipost.org/FAQ. '
-                'Functioning of the College will proceed according to the by-laws set '
-                'out in scipost.org/EdCol_by-laws.\n\n'
-                'Since the success of this initiative is dependent on the involvement of '
-                'the very people it is meant to serve, we\'d be very grateful if you were '
-                'to give due consideration to this proposal. We would expect you to '
-                'commit just 2-4 hours per month to help perform Editorial duties; we will '
-                'adjust the number of Editorial Fellows to ensure this is the case. You '
-                'could try it out for 6 months or a year, and of course you could quit '
-                'any time you wished.\n\n'
-                'I\'d be happy to provide you with more information, should you require '
-                'it. In view of our development plans, I would be grateful if you could '
-                'react (by replying to this email) within the next two or three weeks, '
-                'if possible. I\'ll be looking forward to your reaction, your comments '
-                'and suggestions, be they positive or negative. If you need more time '
-                'to consider, that\'s also fine; just let me know.\n\n'
-                'On behalf of the SciPost Foundation,\n\n'
-                'Prof. dr Jean-Sébastien Caux\n---------------------------------------------'
-                '\nInstitute for Theoretial Physics\nUniversity of Amsterdam'
-                '\nScience Park 904\n1098 XH Amsterdam\nThe Netherlands'
-                '\n---------------------------------------------\n'
-                'tel.: +31 (0)20 5255775\nfax: +31 (0)20 5255778'
-                '\n---------------------------------------------')
-            email_text_html += (
-                '\n<p>You will perhaps have already heard about SciPost, a publication '
-                'portal established by and for professional scientists. '
-                '\n<p>SciPost.org is legally based on a not-for-profit foundation and will '
-                'operate in perpetuity as a non-commercial entity at the exclusive service '
-                'of the academic sector, bringing a cost-slashing alternative to existing '
-                'practices.</p>'
-                '<p>SciPost offers a collection of two-way open '
-                'access (no subscription fees, no author fees) journals with extremely '
-                'stringent (peer-witnessed) refereeing, overseen by '
-                'our Editorial College (exclusively composed '
-                'of established, professionally practising scientists). The whole process is '
-                'designed to ensure the highest achievable scientific quality while making the '
-                'editorial workflow as light and efficient as possible.</p>'
-                '\n<p>To go straight to the point, on behalf of the SciPost Foundation '
-                'and in view of your professional expertise, I hereby would '
-                'like to invite you to become an Editorial Fellow and thus join the '
-                'Editorial College of SciPost Physics.</p>'
-                '\n<p>Please note that only well-known and respected senior academics are '
-                'being contacted for this purpose. Academic reputation and involvement '
-                'in the community are the most important criteria guiding our '
-                'considerations of who should belong to the Editorial College.</p>'
-                '\n<p>To help you in considering this, it would be best if you were to take '
-                'the time to look at the website itself, which is anchored at scipost.org. '
-                'Besides looking around the site, you can also personally register '
-                '(to become a Contributor, without necessarily committing to membership '
-                'of the Editorial College, this to be discussed separately) by visiting '
-                'the following <a href="https://scipost.org/invitation/{{ invitation_key }}">'
-                'single-use link</a>, containing a partly pre-filled form for '
-                'your convenience.</p>'
-                '\n<p>Many details about the initiative '
-                'can then be found at scipost.org/about and at scipost.org/FAQ. '
-                'Functioning of the College will proceed according to the by-laws set '
-                'out in scipost.org/EdCol_by-laws.</p>'
-                '\n<p>Since the success of this initiative is dependent on the involvement of '
-                'the very people it is meant to serve, we\'d be very grateful if you were '
-                'to give due consideration to this proposal. We would expect you to '
-                'commit just 2-4 hours per month to help perform Editorial duties; we will '
-                'constantly adjust the number of Editorial Fellows to ensure this is the case. You '
-                'could try it out for 6 months or a year, and of course you could quit '
-                'any time you wished.</p>'
-                '\n<p>I\'d be happy to provide you with more information, should you require '
-                'it. In view of our development plans, I would be grateful if you could '
-                'react (by replying to this email) within the next two or three weeks, '
-                'if possible. I\'ll be looking forward to your reaction, your comments '
-                'and suggestions, be they positive or negative. If you need more time '
-                'to consider, that\'s also fine; just let me know.</p>'
-                '<p>On behalf of the SciPost Foundation,</p>'
-                '<br/>Prof. dr Jean-Sébastien Caux'
-                '<br/>---------------------------------------------'
-                '<br/>Institute for Theoretial Physics'
-                '<br/>University of Amsterdam'
-                '<br/>Science Park 904<br/>1098 XH Amsterdam<br/>The Netherlands'
-                '<br/>---------------------------------------------'
-                '<br/>tel.: +31 (0)20 5255775\nfax: +31 (0)20 5255778'
-                '<br/>---------------------------------------------\n')
-
-            email_text_html += '<br/>' + EMAIL_FOOTER
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-            emailmessage = EmailMultiAlternatives(
-                'SciPost registration invitation', email_text,
-                'J-S Caux <jscaux@scipost.org>',
-                [cls.invitation.email],
-                cc=[cls.invitation.invited_by.user.email],
-                bcc=['registration@scipost.org'],
-                reply_to=['registration@scipost.org'])
-            emailmessage.attach_alternative(html_version, 'text/html')
-
-        # This function is now for all invitation types:
-        emailmessage.send(fail_silently=False)
-
-    @classmethod
-    def send_citation_notification_email(cls):
-        """
-        Requires loading the 'notification' attribute.
-        """
-        email_context = {}
-        email_text = ('Dear ' + cls.notification.contributor.get_title_display() +
-                      ' ' + cls.notification.contributor.user.last_name)
-        email_text_html = 'Dear {{ title }} {{ last_name }}'
-        email_context['title'] = cls.notification.contributor.get_title_display()
-        email_context['last_name'] = cls.notification.contributor.user.last_name
-        email_text += ',\n\n'
-        email_text_html += ',<br/>'
-        if cls.notification.cited_in_publication:
-            url_unsubscribe = reverse('scipost:unsubscribe',
-                                      args=[cls.notification.contributor.id,
-                                            cls.notification.contributor.activation_key])
-            email_text += (
-                'We would like to notify you that '
-                'your work has been cited in a paper published by SciPost,'
-                '\n\n' + cls.notification.cited_in_publication.title
-                + '\nby ' + cls.notification.cited_in_publication.author_list +
-                '\n\n(published as ' + cls.notification.cited_in_publication.citation() +
-                ').\n\nWe hope you will find this paper of interest to your own research.'
-                '\n\nBest regards,\n\nThe SciPost Team'
-                '\n\nDon\'t want to receive such emails? Unsubscribe by visiting '
-                + url_unsubscribe + '.')
-            email_text_html += (
-                '<p>We would like to notify you that '
-                'your work has been cited in a paper published by SciPost,</p>'
-                '<p>{{ title }}</p><p>by {{ pub_author_list }}</p>'
-                '<p>(published as <a href="https://scipost.org/{{ doi_label }}">'
-                '{{ citation }}</a>).</p>'
-                '<p>We hope you will find this paper of interest to your own research.</p>'
-                '<p>Best regards,</p><p>The SciPost Team</p><br/>'
-                + EMAIL_FOOTER + '<br/>'
-                '\n<p style="font-size: 10px;">Don\'t want to receive such emails? '
-                '<a href="%s">Unsubscribe</a>.</p>' % url_unsubscribe)
-            email_context['title'] = cls.notification.cited_in_publication.title
-            email_context['pub_author_list'] = cls.notification.cited_in_publication.author_list
-            email_context['doi_label'] = cls.notification.cited_in_publication.doi_label
-            email_context['citation'] = cls.notification.cited_in_publication.citation()
-            email_context['key'] = cls.notification.contributor.activation_key
-            html_template = Template(email_text_html)
-            html_version = html_template.render(Context(email_context))
-        elif cls.notification.cited_in_submission:
-            url_unsubscribe = reverse('scipost:unsubscribe',
-                                      args=[cls.notification.contributor.id,
-                                            cls.notification.contributor.activation_key])
-            email_text += (
-                'Your work has been cited in a manuscript submitted to SciPost,'
-                '\n\n' + cls.notification.cited_in_submission.title
-                + ' by ' + cls.notification.cited_in_submission.author_list + '.\n\n'
-                'You might for example consider reporting or '
-                'commenting on the above submission before the refereeing deadline.\n\n'
-                'Best regards,\n\nThe SciPost Team'
-                '\n\nDon\'t want to receive such emails? Unsubscribe by visiting '
-                + url_unsubscribe + '.')
-            email_text_html += (
-                '<p>Your work has been cited in a manuscript submitted to SciPost,</p>'
-                '<p>{{ sub_title }} <br>by {{ sub_author_list }},</p>'
-                '<p>which you can find online at the '
-                '<a href="https://scipost.org/submission/{{ arxiv_nr_w_vn_nr }}">'
-                'submission\'s page</a>.</p>'
-                '<p>You might for example consider reporting or '
-                'commenting on the above submission before the refereeing deadline.</p>'
-                '<p>Best regards,</p><p>The SciPost Team</p><br/>'
-                + EMAIL_FOOTER + '<br/>'
-                '\n<p style="font-size: 10px;">Don\'t want to receive such emails? '
-                '<a href="%s">Unsubscribe</a>.</p>' % url_unsubscribe)
-            email_context['sub_title'] = cls.notification.cited_in_submission.title
-            email_context['sub_author_list'] = cls.notification.cited_in_submission.author_list
-            email_context['arxiv_identifier_w_vn_nr'] = cls.notification.cited_in_submission.arxiv_identifier_w_vn_nr
-            email_context['key'] = cls.notification.contributor.activation_key
-
-        emailmessage = EmailMultiAlternatives(
-            'SciPost: citation notification', email_text,
-            'SciPost admin <admin@scipost.org>',
-            [cls.notification.contributor.user.email],
-            bcc=['admin@scipost.org'],
-            reply_to=['admin@scipost.org'])
-        emailmessage.attach_alternative(html_version, 'text/html')
-        emailmessage.send(fail_silently=False)
diff --git a/scipost/views.py b/scipost/views.py
index b9d8656f910498ac50b5d7993d097c7f8b7eb00b..915df08f3fa3e0bfdc34fbef5b55fdda1e969eb5 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import json
 
 from django.utils import timezone
@@ -5,7 +9,7 @@ from django.shortcuts import get_object_or_404, render
 from django.conf import settings
 from django.contrib import messages
 from django.contrib.auth import login, logout, update_session_auth_hash
-from django.contrib.auth.decorators import login_required, user_passes_test
+from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import Group
 from django.contrib.auth.views import password_reset, password_reset_confirm
 from django.core import mail
@@ -23,32 +27,29 @@ from django.views.debug import cleanse_setting
 from django.views.static import serve
 
 from guardian.decorators import permission_required
-from guardian.shortcuts import assign_perm, get_objects_for_user
 from haystack.generic_views import SearchView
 
-from .constants import SCIPOST_SUBJECT_AREAS, subject_areas_raw_dict, SciPost_from_addresses_dict,\
-                       CONTRIBUTOR_NORMAL
-from .decorators import has_contributor
-from .models import Contributor, CitationNotification, UnavailabilityPeriod,\
-                    DraftInvitation, RegistrationInvitation,\
-                    AuthorshipClaim, EditorialCollege, EditorialCollegeFellowship
-from .forms import AuthenticationForm, DraftInvitationForm, UnavailabilityPeriodForm,\
-                   RegistrationForm, RegistrationInvitationForm, AuthorshipClaimForm,\
-                   ModifyPersonalMessageForm, SearchForm, VetRegistrationForm, reg_ref_dict,\
-                   UpdatePersonalDataForm, UpdateUserDataForm, PasswordChangeForm,\
-                   EmailGroupMembersForm, EmailParticularForm, SendPrecookedEmailForm,\
-                   ContributorsFilterForm
+from .constants import (
+    SCIPOST_SUBJECT_AREAS, subject_areas_raw_dict, SciPost_from_addresses_dict, NORMAL_CONTRIBUTOR)
+from .decorators import has_contributor, is_contributor_user
+from .models import (
+    Contributor, UnavailabilityPeriod, AuthorshipClaim, EditorialCollege,
+    EditorialCollegeFellowship)
+from .forms import (
+    AuthenticationForm, UnavailabilityPeriodForm, RegistrationForm, AuthorshipClaimForm,
+    SearchForm, VetRegistrationForm, reg_ref_dict, UpdatePersonalDataForm, UpdateUserDataForm,
+    PasswordChangeForm, EmailGroupMembersForm, EmailParticularForm, SendPrecookedEmailForm)
 from .utils import Utils, EMAIL_FOOTER, SCIPOST_SUMMARY_FOOTER, SCIPOST_SUMMARY_FOOTER_HTML
 
 from affiliations.forms import AffiliationsFormset
 from colleges.permissions import fellowship_or_admin_required
 from commentaries.models import Commentary
 from comments.models import Comment
+from invitations.constants import STATUS_REGISTERED
+from invitations.models import RegistrationInvitation
 from journals.models import Publication, Journal, PublicationAuthorsTable
-from mails.views import MailEditingSubView
 from news.models import NewsItem
-from submissions.models import Submission, RefereeInvitation,\
-                               Report, EICRecommendation
+from submissions.models import Submission, RefereeInvitation, Report, EICRecommendation
 from partners.models import MembershipAgreement
 from theses.models import ThesisLink
 
@@ -58,25 +59,21 @@ from theses.models import ThesisLink
 ##############
 
 def is_registered(user):
-    """
-    This method checks if user is activated assuming an validated user
-    has at least one permission group (`Registered Contributor` or `Partner Accounts`).
-    """
+    """Check if user is a validated user; has at least one permission group."""
     return user.groups.exists()
 
 
 class SearchView(SearchView):
+    """Search CBV inherited from Haystack."""
+
     template_name = 'search/search.html'
     form_class = SearchForm
 
     def get_context_data(self, *args, **kwargs):
+        """Update context with some additional information."""
         ctx = super().get_context_data(*args, **kwargs)
         ctx['search_query'] = self.request.GET.get('q')
         ctx['results_count'] = kwargs['object_list'].count()
-
-        # Methods not supported by Whoosh engine
-        # ctx['stats_results'] = kwargs['object_list'].stats_results()
-        # ctx['facet_counts'] = kwargs['object_list'].facet('text').facet_counts()
         return ctx
 
 
@@ -85,7 +82,7 @@ class SearchView(SearchView):
 #############
 
 def index(request):
-    '''Main page.'''
+    """Homepage view of SciPost."""
     context = {
         'latest_newsitem': NewsItem.objects.filter(on_homepage=True).order_by('-date').first(),
         'submissions': Submission.objects.public().order_by('-submission_date')[:3],
@@ -98,7 +95,8 @@ def index(request):
 
 
 def protected_serve(request, path, show_indexes=False):
-    """
+    """Serve media files from outside the public MEDIA_ROOT folder.
+
     Serve files that are saved outside the default MEDIA_ROOT folder for superusers only!
     This will be usefull eg. in the admin pages.
     """
@@ -114,6 +112,7 @@ def protected_serve(request, path, show_indexes=False):
 ###############
 
 def feeds(request):
+    """Information page for RSS and Atom feeds."""
     context = {'subject_areas_physics': SCIPOST_SUBJECT_AREAS[0][1]}
     return render(request, 'scipost/feeds.html', context)
 
@@ -123,7 +122,8 @@ def feeds(request):
 ################
 
 def register(request):
-    """
+    """Contributor registration form page.
+
     This public registration view shows and processes the form
     that will create new user account requests. After registration
     the Contributor will need to activate its account via the mail
@@ -140,8 +140,8 @@ def register(request):
         Utils.send_registration_email()
 
         # Disable invitations related to the new Contributor
-        (RegistrationInvitation.objects.filter(email=form.cleaned_data['email'])
-         .update(responded=True))
+        RegistrationInvitation.objects.declined_or_without_response().filter(
+            email=form.cleaned_data['email']).update(status=STATUS_REGISTERED)
 
         context = {
             'ack_header': 'Thanks for registering to SciPost.',
@@ -157,13 +157,14 @@ def register(request):
 
 
 def invitation(request, key):
-    """
+    """Registration Invitation reception page.
+
     If a scientist has recieved an invitation (RegistrationInvitation)
     he/she will finish it's invitation via still view which will prefill
     the default registration form.
     """
     invitation = get_object_or_404(RegistrationInvitation, invitation_key=key)
-    if invitation.responded:
+    if invitation.has_responded:
         errormessage = ('This invitation token has already been used, '
                         'or this email address is already associated to a registration.')
     elif timezone.now() > invitation.key_expires:
@@ -246,9 +247,8 @@ def unsubscribe(request, contributor_id, key):
 
 @permission_required('scipost.can_vet_registration_requests', return_403=True)
 def vet_registration_requests(request):
-    contributors_to_vet = (Contributor.objects
-                           .awaiting_vetting()
-                           .order_by('key_expires'))
+    """List of new Registration requests to vet."""
+    contributors_to_vet = Contributor.objects.awaiting_vetting().order_by('key_expires')
     form = VetRegistrationForm()
     context = {'contributors_to_vet': contributors_to_vet, 'form': form}
     return render(request, 'scipost/vet_registration_requests.html', context)
@@ -256,12 +256,12 @@ def vet_registration_requests(request):
 
 @permission_required('scipost.can_vet_registration_requests', return_403=True)
 def vet_registration_request_ack(request, contributor_id):
-    # process the form
+    """Form view to vet new Registration requests."""
     form = VetRegistrationForm(request.POST or None)
     contributor = Contributor.objects.get(pk=contributor_id)
     if form.is_valid():
         if form.promote_to_registered_contributor():
-            contributor.status = 1
+            contributor.status = NORMAL_CONTRIBUTOR
             contributor.vetted_by = request.user.contributor
             contributor.save()
             group = Group.objects.get(name='Registered Contributors')
@@ -276,11 +276,10 @@ def vet_registration_request_ack(request, contributor_id):
             except RefereeInvitation.DoesNotExist:
                 pending_ref_inv_exists = False
 
-            email_text = ('Dear ' + contributor.get_title_display() + ' '
-                          + contributor.user.last_name +
-                          ', \n\nYour registration to the SciPost publication portal '
-                          'has been accepted. '
-                          'You can now login at https://scipost.org and contribute. \n\n')
+            email_text = (
+                'Dear ' + contributor.get_title_display() + ' ' + contributor.user.last_name +
+                ', \n\nYour registration to the SciPost publication portal has been accepted. '
+                'You can now login at https://scipost.org and contribute. \n\n')
             if pending_ref_inv_exists:
                 email_text += (
                     'Note that you have pending refereeing invitations; please navigate to '
@@ -294,18 +293,16 @@ def vet_registration_request_ack(request, contributor_id):
                                         reply_to=['registration@scipost.org'])
             emailmessage.send(fail_silently=False)
         else:
-            ref_reason = int(form.cleaned_data['refusal_reason'])
-            email_text = ('Dear ' + contributor.get_title_display() + ' '
-                          + contributor.user.last_name +
-                          ', \n\nYour registration to the SciPost publication portal '
-                          'has been turned down, the reason being: '
-                          + reg_ref_dict[ref_reason] + '. You can however still view '
-                          'all SciPost contents, just not submit papers, '
-                          'comments or votes. We nonetheless thank you for your interest.'
-                          '\n\nThe SciPost Team.')
+            ref_reason = form.cleaned_data['refusal_reason']
+            email_text = (
+                'Dear ' + contributor.get_title_display() + ' ' + contributor.user.last_name +
+                ', \n\nYour registration to the SciPost publication portal has been turned down,'
+                ' the reason being: ' + reg_ref_dict[ref_reason] + '. You can however still view '
+                'all SciPost contents, just not submit papers, comments or votes. We nonetheless '
+                'thank you for your interest.\n\nThe SciPost Team.')
             if form.cleaned_data['email_response_field']:
-                email_text += ('\n\nFurther explanations: '
-                               + form.cleaned_data['email_response_field'])
+                email_text += (
+                    '\n\nFurther explanations: ' + form.cleaned_data['email_response_field'])
             emailmessage = EmailMessage('SciPost registration: unsuccessful',
                                         email_text,
                                         'SciPost registration <registration@scipost.org>',
@@ -339,9 +336,7 @@ def registration_requests(request):
 @require_POST
 @permission_required('scipost.can_resend_registration_requests', return_403=True)
 def registration_requests_reset(request, contributor_id):
-    '''
-    Reset specific activation_key for Contributor and resend activation mail.
-    '''
+    """Reset specific activation_key for Contributor and resend activation mail."""
     contributor = get_object_or_404(Contributor.objects.awaiting_validation(), id=contributor_id)
     contributor.generate_key()
     contributor.save()
@@ -352,296 +347,8 @@ def registration_requests_reset(request, contributor_id):
     return redirect(reverse('scipost:registration_requests'))
 
 
-@permission_required('scipost.can_draft_registration_invitations', return_403=True)
-def draft_registration_invitation(request):
-    """
-    For officers to prefill registration invitations.
-    This is similar to the registration_invitations method,
-    which is used to complete the invitation process.
-    """
-    form = DraftInvitationForm(request.POST or None, current_user=request.user)
-    if form.is_valid():
-        invitation = form.save(commit=False)
-        invitation.drafted_by = request.user.contributor
-        invitation.save()
-
-        # Assign permission to 'drafter' to edit the draft afterwards
-        assign_perm('comments.change_draftinvitation', request.user, invitation)
-        messages.success(request, 'Draft invitation saved.')
-        return redirect(reverse('scipost:draft_registration_invitation'))
-
-    existing_drafts = DraftInvitation.objects.filter(processed=False).order_by('last_name')
-
-    context = {
-        'form': form,
-        'existing_drafts': existing_drafts,
-    }
-    return render(request, 'scipost/draft_registration_invitation.html', context)
-
-
-@permission_required('scipost.can_draft_registration_invitations', return_403=True)
-def contributors_filter(request):
-    """
-    For Invitation Officers that use lists of scientists as a to-do. This
-    view returns all entries of those lists with users that are certainly not registered
-    or invitated.
-    """
-    names_found = names_not_found = invitations_found = None
-    form = ContributorsFilterForm(request.POST or None)
-    if form.is_valid():
-        names_found, names_not_found, invitations_found = form.filter()
-
-    context = {
-        'form': form,
-        'names_found': names_found,
-        'names_not_found': names_not_found,
-        'invitations_found': invitations_found,
-    }
-    return render(request, 'scipost/contributors_filter.html', context)
-
-
-@login_required
-def edit_draft_reg_inv(request, draft_id):
-    """
-    Edit DraftInvitation instance. It's only possible to edit istances created by the User itself.
-    """
-    draft = get_object_or_404((get_objects_for_user(request.user, 'scipost.change_draftinvitation')
-                               .filter(processed=False)),
-                              id=draft_id)
-
-    draft_inv_form = DraftInvitationForm(request.POST or None, current_user=request.user,
-                                         instance=draft)
-    if draft_inv_form.is_valid():
-        draft = draft_inv_form.save()
-        messages.success(request, 'Draft invitation saved.')
-        return redirect(reverse('scipost:registration_invitations'))
-
-    context = {'draft_inv_form': draft_inv_form}
-    return render(request, 'scipost/edit_draft_reg_inv.html', context)
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def map_draft_reg_inv_to_contributor(request, draft_id, contributor_id):
-    """
-    If a draft invitation actually points to an already-registered
-    Contributor, this method marks the draft invitation as processed
-    and, if the draft invitation was for a citation type,
-    creates an instance of CitationNotification.
-    """
-    draft = get_object_or_404(DraftInvitation, id=draft_id)
-    contributor = get_object_or_404(Contributor, id=contributor_id)
-    draft.processed = True
-    draft.save()
-    citation = CitationNotification(
-        contributor=contributor,
-        cited_in_submission=draft.cited_in_submission,
-        cited_in_publication=draft.cited_in_publication,
-        processed=False)
-    citation.save()
-    return redirect(reverse('scipost:registration_invitations'))
-
-
-@permission_required('scipost.can_invite_Fellows', return_403=True)
-def registration_invitations(request, draft_id=None):
-    """ Overview and tools for administrators """
-    # List invitations sent; send new ones
-    associated_contributors = None
-    initial = {}
-    if draft_id:
-        # Fill draft data if draft_id given
-        draft = get_object_or_404(DraftInvitation, id=draft_id)
-        associated_contributors = Contributor.objects.filter(
-            user__last_name__icontains=draft.last_name)
-        initial = {
-            'title': draft.title,
-            'first_name': draft.first_name,
-            'last_name': draft.last_name,
-            'email': draft.email,
-            'invitation_type': draft.invitation_type,
-            'cited_in_submission': draft.cited_in_submission,
-            'cited_in_publication': draft.cited_in_publication,
-        }
-
-    # Send invitation from form information
-    reg_inv_form = RegistrationInvitationForm(request.POST or None, initial=initial,
-                                              current_user=request.user)
-    if reg_inv_form.is_valid():
-        invitation = reg_inv_form.save(commit=False)
-        invitation.invited_by = request.user.contributor
-        invitation.save()
-        invitation.refresh_keys()
-
-        Utils.load({'invitation': invitation})
-        Utils.send_registration_invitation_email()
-        (DraftInvitation.objects.filter(email=reg_inv_form.cleaned_data['email'])
-         .update(processed=True))
-
-        messages.success(request, 'Registration Invitation sent')
-        return redirect(reverse('scipost:registration_invitations'))
-
-    sent_reg_inv = RegistrationInvitation.objects.filter(responded=False, declined=False)
-    sent_reg_inv_fellows = sent_reg_inv.filter(invitation_type='F').order_by('last_name')
-    sent_reg_inv_contrib = sent_reg_inv.filter(invitation_type='C').order_by('last_name')
-    sent_reg_inv_ref = sent_reg_inv.filter(invitation_type='R').order_by('last_name')
-    sent_reg_inv_cited_sub = sent_reg_inv.filter(invitation_type='ci').order_by('last_name')
-    sent_reg_inv_cited_pub = sent_reg_inv.filter(invitation_type='cp').order_by('last_name')
-
-    resp_reg_inv = RegistrationInvitation.objects.filter(responded=True, declined=False)
-    resp_reg_inv_fellows = resp_reg_inv.filter(invitation_type='F').order_by('last_name')
-    resp_reg_inv_contrib = resp_reg_inv.filter(invitation_type='C').order_by('last_name')
-    resp_reg_inv_ref = resp_reg_inv.filter(invitation_type='R').order_by('last_name')
-    resp_reg_inv_cited_sub = resp_reg_inv.filter(invitation_type='ci').order_by('last_name')
-    resp_reg_inv_cited_pub = resp_reg_inv.filter(invitation_type='cp').order_by('last_name')
-
-    decl_reg_inv = RegistrationInvitation.objects.filter(responded=True, declined=True)
-
-    names_reg_contributors = Contributor.objects.filter(
-        status=1).order_by('user__last_name').values_list(
-        'user__first_name', 'user__last_name')
-    existing_drafts = DraftInvitation.objects.filter(processed=False).order_by('last_name')
-
-    context = {
-        'reg_inv_form': reg_inv_form,
-        'sent_reg_inv_fellows': sent_reg_inv_fellows,
-        'sent_reg_inv_contrib': sent_reg_inv_contrib,
-        'sent_reg_inv_ref': sent_reg_inv_ref,
-        'sent_reg_inv_cited_sub': sent_reg_inv_cited_sub,
-        'sent_reg_inv_cited_pub': sent_reg_inv_cited_pub,
-        'resp_reg_inv_fellows': resp_reg_inv_fellows,
-        'resp_reg_inv_contrib': resp_reg_inv_contrib,
-        'resp_reg_inv_ref': resp_reg_inv_ref,
-        'resp_reg_inv_cited_sub': resp_reg_inv_cited_sub,
-        'resp_reg_inv_cited_pub': resp_reg_inv_cited_pub,
-        'decl_reg_inv': decl_reg_inv,
-        'names_reg_contributors': names_reg_contributors,
-        'existing_drafts': existing_drafts,
-        'associated_contributors': associated_contributors,
-    }
-    return render(request, 'scipost/registration_invitations.html', context)
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def registration_invitations_cleanup(request):
-    """
-    Compares the email addresses of invitations with those in the
-    database of registered Contributors. Flags overlaps.
-    """
-    contributor_email_list = Contributor.objects.values_list('user__email', flat=True)
-    invs_to_cleanup = RegistrationInvitation.objects.filter(
-        responded=False, email__in=contributor_email_list)
-    context = {'invs_to_cleanup': invs_to_cleanup}
-    return render(request, 'scipost/registration_invitations_cleanup.html', context)
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def remove_registration_invitation(request, invitation_id):
-    """
-    Remove an invitation (called from registration_invitations_cleanup).
-    """
-    invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
-    invitation.delete()
-    return redirect(reverse('scipost:registration_invitations_cleanup'))
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def edit_invitation_personal_message(request, invitation_id):
-    """
-
-    DOES THIS THING STILL WORK? OR CAN IT BE REMOVED?
-
-    -- JdW (August 14th, 2017)
-
-    """
-    invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
-    errormessage = None
-    if request.method == 'POST':
-        form = ModifyPersonalMessageForm(request.POST)
-        if form.is_valid():
-            invitation.personal_message = form.cleaned_data['personal_message']
-            invitation.save()
-            return redirect(reverse('scipost:registration_invitations'))
-        else:
-            errormessage = 'The form was invalid.'
-    else:
-        form = ModifyPersonalMessageForm(
-            initial={'personal_message': invitation.personal_message, })
-    context = {'invitation': invitation,
-               'form': form, 'errormessage': errormessage, }
-    return render(request, 'scipost/edit_invitation_personal_message.html', context)
-
-
-@permission_required('scipost.can_invite_Fellows', return_403=True)
-def renew_registration_invitation(request, invitation_id):
-    """
-    Renew an invitation (called from registration_invitations).
-    """
-    invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
-
-    # Utils.load({'invitation': invitation})
-    # Utils.send_registration_invitation_email(True)
-    mail_request = MailEditingSubView(request, mail_code='registration_invitation_renewal',
-                                      invitation=invitation)
-    if mail_request.is_valid():
-        invitation.nr_reminders += 1
-        invitation.date_last_reminded = timezone.now()
-        invitation.save()
-        invitation.refresh_keys()
-        messages.success(request, 'Registration invitation has been sent.')
-        mail_request.send()
-        return redirect('scipost:registration_invitations')
-    else:
-        return mail_request.return_render()
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def mark_reg_inv_as_declined(request, invitation_id):
-    """
-    Mark an invitation as declined (called from registration_invitations.html).
-    """
-    invitation = get_object_or_404(RegistrationInvitation, pk=invitation_id)
-    invitation.responded = True
-    invitation.declined = True
-    invitation.save()
-    return redirect(reverse('scipost:registration_invitations'))
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def citation_notifications(request):
-    unprocessed_notifications = CitationNotification.objects.filter(
-        processed=False).order_by('contributor__user__last_name')
-    context = {'unprocessed_notifications': unprocessed_notifications, }
-    return render(request, 'scipost/citation_notifications.html', context)
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def process_citation_notification(request, cn_id):
-    notification = get_object_or_404(CitationNotification, id=cn_id)
-    notification.processed = True
-    notification.save()
-    if notification.contributor.accepts_SciPost_emails:
-        Utils.load({'notification': notification})
-        Utils.send_citation_notification_email()
-    return redirect(reverse('scipost:citation_notifications'))
-
-
-@permission_required('scipost.can_manage_registration_invitations', return_403=True)
-def mark_draft_inv_as_processed(request, draft_id):
-    draft = get_object_or_404(DraftInvitation, id=draft_id)
-    draft.processed = True
-    draft.save()
-    return redirect(reverse('scipost:registration_invitations'))
-
-
 def login_view(request):
-    """
-    This view shows and processes a user's login session.
-
-    The function based method login() is deprecated from
-    Django 1.11 and replaced by Class Based Views.
-
-    See:
-    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth
-    """
+    """Login form page."""
     form = AuthenticationForm(request.POST or None, initial=request.GET)
     if form.is_valid():
         user = form.authenticate()
@@ -663,13 +370,7 @@ def login_view(request):
 
 
 def logout_view(request):
-    """
-    The function based method logout() is deprecated from
-    Django 1.11 and replaced by Class Based Views.
-
-    See:
-    https://docs.djangoproject.com/en/1.11/releases/1.11/#django-contrib-auth
-    """
+    """Logout form page."""
     logout(request)
     messages.success(request, ('<h3>Keep contributing!</h3>'
                                'You are now logged out of SciPost.'))
@@ -677,11 +378,9 @@ def logout_view(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def mark_unavailable_period(request):
-    '''
-    Mark period unavailable for Contributor using this view.
-    '''
+    """Form view to mark period unavailable for Contributor."""
     unav_form = UnavailabilityPeriodForm(request.POST or None)
     if unav_form.is_valid():
         unav = unav_form.save(commit=False)
@@ -697,11 +396,9 @@ def mark_unavailable_period(request):
 
 @require_POST
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def delete_unavailable_period(request, period_id):
-    '''
-    Delete period unavailable registered.
-    '''
+    """Delete period unavailable registered."""
     unav = get_object_or_404(UnavailabilityPeriod,
                              contributor=request.user.contributor, id=int(period_id))
     unav.delete()
@@ -710,11 +407,9 @@ def delete_unavailable_period(request, period_id):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_editorial_account(request):
-    """
-    The Personal Page tab: Account
-    """
+    """Personal Page tab: Account."""
     contributor = request.user.contributor
     context = {
         'contributor': contributor,
@@ -724,11 +419,9 @@ def _personal_page_editorial_account(request):
     return render(request, 'partials/scipost/personal_page/account.html', context)
 
 
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_editorial_actions(request):
-    """
-    The Personal Page tab: Editorial Actions
-    """
+    """Personal Page tab: Editorial Actions."""
     permission = request.user.groups.filter(name__in=[
         'Ambassadors',
         'Advisory Board',
@@ -773,11 +466,9 @@ def _personal_page_editorial_actions(request):
 
 
 @permission_required('scipost.can_referee', return_403=True)
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_refereeing(request):
-    """
-    The Personal Page tab: Refereeing
-    """
+    """Personal Page tab: Refereeing."""
     context = {
         'contributor': request.user.contributor
     }
@@ -785,15 +476,13 @@ def _personal_page_refereeing(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_publications(request):
-    """
-    The Personal Page tab: Publications
-    """
+    """Personal Page tab: Publications."""
     contributor = request.user.contributor
     context = {
         'contributor': contributor,
-        'own_publications': contributor.publications.order_by('-publication_date')
+        'own_publications': contributor.publications.published().order_by('-publication_date')
     }
     context['nr_publication_authorships_to_claim'] = Publication.objects.filter(
         author_list__contains=request.user.last_name).exclude(
@@ -804,11 +493,9 @@ def _personal_page_publications(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_submissions(request):
-    """
-    The Personal Page tab: Submissions
-    """
+    """Personal Page tab: Submissions."""
     contributor = request.user.contributor
     context = {'contributor': contributor}
 
@@ -823,11 +510,9 @@ def _personal_page_submissions(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_commentaries(request):
-    """
-    The Personal Page tab: Commentaries
-    """
+    """Personal Page tab: Commentaries."""
     contributor = request.user.contributor
     context = {'contributor': contributor}
 
@@ -841,11 +526,9 @@ def _personal_page_commentaries(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_theses(request):
-    """
-    The Personal Page tab: Theses
-    """
+    """Personal Page tab: Theses."""
     contributor = request.user.contributor
     context = {'contributor': contributor}
 
@@ -859,11 +542,9 @@ def _personal_page_theses(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_comments(request):
-    """
-    The Personal Page tab: Comments
-    """
+    """Personal Page tab: Comments."""
     contributor = request.user.contributor
     context = {
         'contributor': contributor,
@@ -874,11 +555,9 @@ def _personal_page_comments(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def _personal_page_author_replies(request):
-    """
-    The Personal Page tab: Author Replies
-    """
+    """Personal Page tab: Author Replies."""
     contributor = request.user.contributor
     context = {
         'contributor': contributor,
@@ -890,9 +569,7 @@ def _personal_page_author_replies(request):
 
 @login_required
 def personal_page(request, tab='account'):
-    """
-    The Personal Page is the main view for accessing user functions.
-    """
+    """Personal Page is the main view for accessing user functions."""
     if request.is_ajax():
         if tab == 'account':
             return _personal_page_editorial_account(request)
@@ -922,7 +599,7 @@ def personal_page(request, tab='account'):
 
     try:
         contributor = Contributor.objects.select_related('user').get(user=request.user)
-        context['needs_validation'] = contributor.status != CONTRIBUTOR_NORMAL
+        context['needs_validation'] = contributor.status != NORMAL_CONTRIBUTOR
     except Contributor.DoesNotExist:
         contributor = None
 
@@ -941,6 +618,7 @@ def personal_page(request, tab='account'):
 
 @login_required
 def change_password(request):
+    """Change password form view."""
     form = PasswordChangeForm(request.POST or None, current_user=request.user)
     if form.is_valid():
         form.save_new_password()
@@ -994,9 +672,6 @@ def _update_personal_data_contributor(request):
             cont_form.propagate_orcid()
         messages.success(request, 'Your personal data has been updated.')
         return redirect(reverse('scipost:update_personal_data'))
-    else:
-        user_form = UpdateUserDataForm(instance=contributor.user)
-        cont_form = UpdatePersonalDataForm(instance=contributor)
 
     context = {
         'user_form': user_form,
@@ -1014,7 +689,7 @@ def update_personal_data(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def claim_authorships(request):
     """
     The system auto-detects potential authorships (of submissions,
@@ -1063,7 +738,7 @@ def claim_authorships(request):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def claim_pub_authorship(request, publication_id, claim):
     if request.method == 'POST':
         contributor = Contributor.objects.get(user=request.user)
@@ -1079,7 +754,7 @@ def claim_pub_authorship(request, publication_id, claim):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def claim_sub_authorship(request, submission_id, claim):
     if request.method == 'POST':
         contributor = Contributor.objects.get(user=request.user)
@@ -1095,7 +770,7 @@ def claim_sub_authorship(request, submission_id, claim):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def claim_com_authorship(request, commentary_id, claim):
     if request.method == 'POST':
         contributor = Contributor.objects.get(user=request.user)
@@ -1111,7 +786,7 @@ def claim_com_authorship(request, commentary_id, claim):
 
 
 @login_required
-@user_passes_test(has_contributor)
+@is_contributor_user()
 def claim_thesis_authorship(request, thesis_id, claim):
     if request.method == 'POST':
         contributor = Contributor.objects.get(user=request.user)
@@ -1193,10 +868,10 @@ def contributor_info(request, contributor_id):
     contributor_submissions = Submission.objects.public_unlisted().filter(authors=contributor)
     contributor_commentaries = Commentary.objects.filter(authors=contributor)
     contributor_theses = ThesisLink.objects.vetted().filter(author_as_cont=contributor)
-    contributor_comments = (Comment.objects.vetted()
+    contributor_comments = (Comment.objects.vetted().publicly_visible()
                             .filter(author=contributor, is_author_reply=False)
                             .order_by('-date_submitted'))
-    contributor_authorreplies = (Comment.objects.vetted()
+    contributor_authorreplies = (Comment.objects.vetted().publicly_visible()
                                  .filter(author=contributor, is_author_reply=True)
                                  .order_by('-date_submitted'))
     context = {'contributor': contributor,
diff --git a/scipost/widgets.py b/scipost/widgets.py
index 93602aef98bc498f1d6081e6cba02cfbb7e60aa6..ee2eadc4fceefe78194bcb77fb28de22f730662d 100644
--- a/scipost/widgets.py
+++ b/scipost/widgets.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.forms.widgets import CheckboxSelectMultiple
 
 
diff --git a/stats/admin.py b/stats/admin.py
index 8c38f3f3dad51e4585f3984282c2a4bec5349c1e..7369721f25ab135cebb50385897ad2f9b4265d26 100644
--- a/stats/admin.py
+++ b/stats/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 # Register your models here.
diff --git a/stats/apps.py b/stats/apps.py
index 2d09b92ca1ba59e93693ada2c0c0dd7340a9df15..bccdfc081919b84e761b3f8232a1640b66ffffa3 100644
--- a/stats/apps.py
+++ b/stats/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/stats/models.py b/stats/models.py
index 71a836239075aa6e6e4ecb700e9c42c95c022d91..b34b93c2a0f6de3dfc117c2f0947e2ab8143af7a 100644
--- a/stats/models.py
+++ b/stats/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 # Create your models here.
diff --git a/stats/templates/stats/statistics.html b/stats/templates/stats/statistics.html
index 23e5ba55d74407e294bfab43697556b705755cd1..1e45058b4448e4f2183dc84bdc1f4fa20441ba0a 100644
--- a/stats/templates/stats/statistics.html
+++ b/stats/templates/stats/statistics.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_pool_base.html' %}
+{% extends 'submissions/pool/base.html' %}
 
 {% block pagetitle %}: statistics for submisisons{% endblock pagetitle %}
 
@@ -21,141 +21,141 @@
 <p>Clicking on a Journal/Volume/Issue gives aggregates for all publications in that object.</p>
 <ul>
   {% for journal in journals|dictsort:"doi_label" %}
-  <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label %}">{{ journal }}</a></li>
-  <ul>
-  {% for year in journal|journal_publication_years %}
-  <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label year=year %}">{{ year }}</a></li>
-  {% endfor %}
-  </ul>
-  <ul>
-{% for volume in journal.volume_set.all|dictsort:"number" %}
-<li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label volume_nr=volume.number %}">{{ volume }}</a></li>
-<ul>
-  {% for issue in volume.issue_set.all|dictsort:"number" %}
-  <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label volume_nr=volume.number issue_nr=issue.number %}">{{ issue }}</a></li>
-  {% endfor %}
-</ul>
-{% endfor %}
-  </ul>
+      <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label %}">{{ journal }}</a></li>
+      <ul>
+      {% for year in journal|journal_publication_years %}
+          <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label year=year %}">{{ year }}</a></li>
+      {% endfor %}
+      </ul>
+      <ul>
+        {% for volume in journal.volumes.all|dictsort:"number" %}
+            <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label volume_nr=volume.number %}">{{ volume }}</a></li>
+            <ul>
+              {% for issue in volume.issues.all|dictsort:"number" %}
+                  <li><a href="{% url 'stats:statistics' journal_doi_label=journal.doi_label volume_nr=volume.number issue_nr=issue.number %}">{{ issue }}</a></li>
+              {% endfor %}
+            </ul>
+        {% endfor %}
+      </ul>
   {% endfor %}
 </ul>
 
 {% if journal %}
-<h2>Results:</h2>
-<table class="table">
-  <tr>
-    <th>DOI label</th>
-    {% if year %}
-    <th>Year</th>
-    <th>Nr submissions<br/>(distinct)</th>
-    <th>Nr submissions<br/>(including resubmissions)</th>
-    <th>Nr assignment failed</th>
-    <th>Nr accepted/<br/>published</th>
-    <th>Nr rejected</th>
-    <th>Nr withdrawn</th>
-    {% else %}
-    <th>Nr publications</th>
-    <th>Duration average</th>
-    <th>Citation rate (per paper per year)</th>
-    {% endif %}
-  </tr>
-  <tr>
-    {% if issue %}
-    <td>{{ issue.doi_label }}</td>
-    <td>{% nr_publications issue %}</td>
-    <td>{% avg_processing_duration issue as avg %}{{ avg|floatformat:2 }} days</td>
-    <td>{% citation_rate issue as cr %}{{ cr|floatformat:2 %}</td>
-    {% elif volume %}
-    <td>{{ volume.doi_label }}</td>
-    <td>{% nr_publications volume %}</td>
-    <td>{% avg_processing_duration volume as avg %}{{ avg|floatformat:2 }} days</td>
-    <td>{% citation_rate volume as cr %}{{ cr|floatformat:2 }}</td>
-    {% else %}
-    <td>{{ journal.doi_label }}</td>
-    {% if year %}
-    <td>{{ year }}</td>
-    <td>{{ submissions|submissions_count_distinct }}</td>
-    <td>{{ submissions|length }}</td>
-    <td>{{ submissions.assignment_failed.count }}</td>
-    <td>{{ submissions.accepted.count|add:submissions.published.count }}</td>
-    <td>{{ submissions.rejected.count }}</td>
-    <td>{{ submissions.withdrawn.count }}</td>
-    {% else %}
-    <td>{% nr_publications journal %}</td>
-    <td>{% avg_processing_duration journal as avg %}{{ avg|floatformat:2 }} days</td>
-    <td>{% citation_rate journal as cr %}{{ cr|floatformat:2 }}</td>
-    {% endif %}
-    {% endif %}
-  </tr>
-</table>
+    <h2>Results:</h2>
+    <table class="table">
+      <tr>
+        <th>DOI label</th>
+        {% if year %}
+            <th>Year</th>
+            <th>Nr submissions<br/>(distinct)</th>
+            <th>Nr submissions<br/>(including resubmissions)</th>
+            <th>Nr assignment failed</th>
+            <th>Nr accepted/<br/>published</th>
+            <th>Nr rejected</th>
+            <th>Nr withdrawn</th>
+        {% else %}
+            <th>Nr publications</th>
+            <th>Duration average</th>
+            <th>Citation rate (per paper per year)</th>
+        {% endif %}
+      </tr>
+      <tr>
+        {% if issue %}
+            <td>{{ issue.doi_label }}</td>
+            <td>{% nr_publications issue %}</td>
+            <td>{% avg_processing_duration issue as avg %}{{ avg|floatformat:2 }} days</td>
+            <td>{% citation_rate issue as cr %}{{ cr|floatformat:2 }}</td>
+        {% elif volume %}
+            <td>{{ volume.doi_label }}</td>
+            <td>{% nr_publications volume %}</td>
+            <td>{% avg_processing_duration volume as avg %}{{ avg|floatformat:2 }} days</td>
+            <td>{% citation_rate volume as cr %}{{ cr|floatformat:2 }}</td>
+        {% else %}
+            <td>{{ journal.doi_label }}</td>
+            {% if year %}
+                <td>{{ year }}</td>
+                <td>{{ submissions|submissions_count_distinct }}</td>
+                <td>{{ submissions|length }}</td>
+                <td>{{ submissions.assignment_failed.count }}</td>
+                <td>{{ submissions.accepted.count|add:submissions.published.count }}</td>
+                <td>{{ submissions.rejected.count }}</td>
+                <td>{{ submissions.withdrawn.count }}</td>
+            {% else %}
+                <td>{% nr_publications journal %}</td>
+                <td>{% avg_processing_duration journal as avg %}{{ avg|floatformat:2 }} days</td>
+                <td>{% citation_rate journal as cr %}{{ cr|floatformat:2 }}</td>
+            {% endif %}
+        {% endif %}
+      </tr>
+    </table>
 
-<table class="table">
-  <tr>
-    <th>DOI label</th>
-    <th colspan="3">Nr per Tier</th>
-    <th colspan="3">Citation rate (per paper per year)</th>
-  </tr>
-  <tr>
-    <th></th>
-    <th>I</th>
-    <th>II</th>
-    <th>IIII</th>
-    <th>I</th>
-    <th>II</th>
-    <th>IIII</th>
-  </tr>
-  <tr>
-    {% if issue %}
-    <td>{{ issue.doi_label }}</td>
-    <td>{% nr_publications issue tier=1 %}</td>
-    <td>{% nr_publications issue tier=2 %}</td>
-    <td>{% nr_publications issue tier=3 %}</td>
-    <td>{% citation_rate issue tier=1 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate issue tier=2 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate issue tier=3 as cr %}{{ cr|floatformat:2 }}</td>
-    {% elif volume %}
-    <td>{{ volume.doi_label }}</td>
-    <td>{% nr_publications volume tier=1 %}</td>
-    <td>{% nr_publications volume tier=2 %}</td>
-    <td>{% nr_publications volume tier=3 %}</td>
-    <td>{% citation_rate volume tier=1 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate volume tier=2 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate volume tier=3 as cr %}{{ cr|floatformat:2 }}</td>
-    {% else %}
-    <td>{{ journal.doi_label }}</td>
-    <td>{% nr_publications journal tier=1 %}</td>
-    <td>{% nr_publications journal tier=2 %}</td>
-    <td>{% nr_publications journal tier=3 %}</td>
-    <td>{% citation_rate journal tier=1 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate journal tier=2 as cr %}{{ cr|floatformat:2 }}</td>
-    <td>{% citation_rate journal tier=3 as cr %}{{ cr|floatformat:2 }}</td>
-    {% endif %}
-  </tr>
-</table>
+    <table class="table">
+      <tr>
+        <th>DOI label</th>
+        <th colspan="3">Nr per Tier</th>
+        <th colspan="3">Citation rate (per paper per year)</th>
+      </tr>
+      <tr>
+        <th></th>
+        <th>I</th>
+        <th>II</th>
+        <th>IIII</th>
+        <th>I</th>
+        <th>II</th>
+        <th>IIII</th>
+      </tr>
+      <tr>
+        {% if issue %}
+            <td>{{ issue.doi_label }}</td>
+            <td>{% nr_publications issue tier=1 %}</td>
+            <td>{% nr_publications issue tier=2 %}</td>
+            <td>{% nr_publications issue tier=3 %}</td>
+            <td>{% citation_rate issue tier=1 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate issue tier=2 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate issue tier=3 as cr %}{{ cr|floatformat:2 }}</td>
+        {% elif volume %}
+            <td>{{ volume.doi_label }}</td>
+            <td>{% nr_publications volume tier=1 %}</td>
+            <td>{% nr_publications volume tier=2 %}</td>
+            <td>{% nr_publications volume tier=3 %}</td>
+            <td>{% citation_rate volume tier=1 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate volume tier=2 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate volume tier=3 as cr %}{{ cr|floatformat:2 }}</td>
+        {% else %}
+            <td>{{ journal.doi_label }}</td>
+            <td>{% nr_publications journal tier=1 %}</td>
+            <td>{% nr_publications journal tier=2 %}</td>
+            <td>{% nr_publications journal tier=3 %}</td>
+            <td>{% citation_rate journal tier=1 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate journal tier=2 as cr %}{{ cr|floatformat:2 }}</td>
+            <td>{% citation_rate journal tier=3 as cr %}{{ cr|floatformat:2 }}</td>
+        {% endif %}
+      </tr>
+    </table>
 {% endif %}
 
 {% if year %}
-<h2>Refereeing stats for {{ year }}</h2>
-<table class="table">
-  <tr>
-    <th>Nr refereeing<br/>invitations</th>
-    <th>Nr accepted</th>
-    <th>Nr declined</th>
-    <th>Nr pending</th>
-    <th>Nr reports<br/>obtained</th>
-    <th>Nr obtained<br/>(invited)</th>
-    <th>Nr obtained<br/>(contributed)</th>
-  </tr>
-  <tr>
-    <td>{{ nr_ref_inv }}</td>
-    <td>{{ nr_acc }} ({% widthratio nr_acc nr_ref_inv 100 %}&#37;)</td>
-    <td>{{ nr_dec }} ({% widthratio nr_dec nr_ref_inv 100 %}&#37;)</td>
-    <td>{{ nr_pen }} ({% widthratio nr_pen nr_ref_inv 100 %}&#37;)</td>
-    <td>{{ nr_rep_obt }}</td>
-    <td>{{ nr_rep_obt_inv }} ({% widthratio nr_rep_obt_inv nr_rep_obt 100 %}&#37;)</td>
-    <td>{{ nr_rep_obt_con }} ({% widthratio nr_rep_obt_con nr_rep_obt 100 %}&#37;)</td>
-  </tr>
-</table>
+    <h2>Refereeing stats for {{ year }}</h2>
+    <table class="table">
+      <tr>
+        <th>Nr refereeing<br/>invitations</th>
+        <th>Nr accepted</th>
+        <th>Nr declined</th>
+        <th>Nr pending</th>
+        <th>Nr reports<br/>obtained</th>
+        <th>Nr obtained<br/>(invited)</th>
+        <th>Nr obtained<br/>(contributed)</th>
+      </tr>
+      <tr>
+        <td>{{ nr_ref_inv }}</td>
+        <td>{{ nr_acc }} ({% widthratio nr_acc nr_ref_inv 100 %}&#37;)</td>
+        <td>{{ nr_dec }} ({% widthratio nr_dec nr_ref_inv 100 %}&#37;)</td>
+        <td>{{ nr_pen }} ({% widthratio nr_pen nr_ref_inv 100 %}&#37;)</td>
+        <td>{{ nr_rep_obt }}</td>
+        <td>{{ nr_rep_obt_inv }} ({% widthratio nr_rep_obt_inv nr_rep_obt 100 %}&#37;)</td>
+        <td>{{ nr_rep_obt_con }} ({% widthratio nr_rep_obt_con nr_rep_obt 100 %}&#37;)</td>
+      </tr>
+    </table>
 {% endif %}
 
 
diff --git a/stats/templatetags/stats_extras.py b/stats/templatetags/stats_extras.py
index 335c813cc216907cb5ee9828390e200a42969854..7eb65db6a3c1ffecd635ec6431865fbe474af7d7 100644
--- a/stats/templatetags/stats_extras.py
+++ b/stats/templatetags/stats_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 register = template.Library()
@@ -29,8 +33,10 @@ def submissions_count_distinct(submissions):
 
 @register.filter(name='journal_publication_years')
 def journal_publication_years(journal):
+    """Return a sorted list of active years of the Journal."""
     years = []
-    for volume in journal.volume_set.all():
-        if volume.until_date.year not in years:
-            years.append(volume.until_date.year)
-    return sorted(years)
+    if journal.has_volumes:
+        years = journal.volumes.dates('until_date', 'year')
+    else:
+        years = journal.publications.dates('publication_date', 'year')
+    return [x.year for x in years]
diff --git a/stats/tests.py b/stats/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/stats/tests.py
+++ b/stats/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/stats/urls.py b/stats/urls.py
index cddb6d0f7376ab3143acf99f2937b93c09dd8282..7024875212ec6668d717cb5e70f38b3d0a449dd4 100644
--- a/stats/urls.py
+++ b/stats/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/stats/views.py b/stats/views.py
index dd416c843a34dfa75973cb963d437ddbd601ba5e..4e2de0c8bf8c25b5c33e42aaba3da753577a1d16 100644
--- a/stats/views.py
+++ b/stats/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.contrib.auth.decorators import permission_required
diff --git a/strings/__init__.py b/strings/__init__.py
index 614455a3452553b019e2f375efa0ad241bd8f690..998a181fbfb946b295405959ea7f108fa08f4e20 100644
--- a/strings/__init__.py
+++ b/strings/__init__.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 acknowledge_request_thesis_link = (
     "Thank you for your request for a Thesis Link. Your request"
     " will soon be handled by an editor."
diff --git a/submissions/__init__.py b/submissions/__init__.py
index 1c2ca927d5cf740e7bfc6703a73f1e0f550ea623..9aabdc60bf649596e79a00cbf3a8df700725e17b 100644
--- a/submissions/__init__.py
+++ b/submissions/__init__.py
@@ -1 +1,5 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 default_app_config = 'submissions.apps.SubmissionsConfig'
diff --git a/submissions/admin.py b/submissions/admin.py
index 41ecfd38bdc3d4c0a9432d067cd531a997618f80..ba3f07bc800272d6c77c8504342f8cb50545d9a4 100644
--- a/submissions/admin.py
+++ b/submissions/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 from django.contrib.contenttypes.admin import GenericTabularInline
 from django import forms
diff --git a/submissions/apps.py b/submissions/apps.py
index 51d7411cf0f3b4c3d4c41624e4b11733d3bded4f..1c00c7f7852f5ad4bbff43763dbec6d7652f862a 100644
--- a/submissions/apps.py
+++ b/submissions/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 from django.db.models.signals import post_save
 
diff --git a/submissions/behaviors.py b/submissions/behaviors.py
index 27ed6ecaf106e82235680f9816a5645198560c94..4599889884d52119ca82058655eeab65c49ecfcd 100644
--- a/submissions/behaviors.py
+++ b/submissions/behaviors.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 class SubmissionRelatedObjectMixin:
     def save(self, *args, **kwargs):
         obj = super().save(*args, **kwargs)
diff --git a/submissions/constants.py b/submissions/constants.py
index aa9be27dc7e48407998958972538552bcde607d5..299d132dd96e1d95c9dbef6cf972ff79f7efacf6 100644
--- a/submissions/constants.py
+++ b/submissions/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from journals.constants import SCIPOST_JOURNAL_PHYSICS
 
 
diff --git a/submissions/exceptions.py b/submissions/exceptions.py
index d52fa4fa099696c1eaaf8c59d104e3607018ad1a..49896315d1c347497a2116486228d1b9f7f16530 100644
--- a/submissions/exceptions.py
+++ b/submissions/exceptions.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 class BaseCustomException(Exception):
     def __init__(self, name):
         self.name = name
diff --git a/submissions/factories.py b/submissions/factories.py
index d9c32c745fd079caed4ab17d02fd3511c0605ff9..fbd863c4b1131c6f402d95e6c4833c1171b73ab9 100644
--- a/submissions/factories.py
+++ b/submissions/factories.py
@@ -1,108 +1,179 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 import pytz
+import random
 
-from django.utils import timezone
-
+from comments.factories import SubmissionCommentFactory
 from scipost.constants import SCIPOST_SUBJECT_AREAS
 from scipost.models import Contributor
 from journals.constants import SCIPOST_JOURNALS_DOMAINS
-from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal
+from common.helpers import random_arxiv_identifier_without_version_number, random_scipost_journal,\
+    random_scipost_report_doi_label
 
 from .constants import STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_RESUBMISSION_INCOMING,\
                        STATUS_PUBLISHED, SUBMISSION_TYPE, STATUS_RESUBMITTED, STATUS_VETTED,\
                        REFEREE_QUALIFICATION, RANKING_CHOICES, QUALITY_SPEC, REPORT_REC,\
                        REPORT_STATUSES, STATUS_UNVETTED, STATUS_DRAFT
-from .models import Submission, Report, RefereeInvitation
+from .models import Submission, Report, RefereeInvitation, EICRecommendation, EditorialAssignment
 
 from faker import Faker
 
 
 class SubmissionFactory(factory.django.DjangoModelFactory):
-    class Meta:
-        model = Submission
-
     author_list = factory.Faker('name')
     submitted_by = factory.Iterator(Contributor.objects.all())
+    submission_type = factory.Iterator(SUBMISSION_TYPE, getter=lambda c: c[0])
     submitted_to_journal = factory.Sequence(lambda n: random_scipost_journal())
-    title = factory.lazy_attribute(lambda x: Faker().sentence())
-    abstract = factory.lazy_attribute(lambda x: Faker().paragraph())
+    title = factory.Faker('sentence')
+    abstract = factory.Faker('paragraph', nb_sentences=10)
     arxiv_link = factory.Faker('uri')
     arxiv_identifier_wo_vn_nr = factory.Sequence(
-                                    lambda n: random_arxiv_identifier_without_version_number())
+        lambda n: random_arxiv_identifier_without_version_number())
     subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0])
     domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0])
-    abstract = Faker().paragraph()
-    author_comments = Faker().paragraph()
-    remarks_for_editors = Faker().paragraph()
-    submission_type = factory.Iterator(SUBMISSION_TYPE, getter=lambda c: c[0])
+    abstract = factory.Faker('paragraph')
+    author_comments = factory.Faker('paragraph')
+    remarks_for_editors = factory.Faker('paragraph')
     is_current = True
+    arxiv_vn_nr = 1
+    arxiv_link = factory.lazy_attribute(lambda o: (
+        'https://arxiv.org/abs/%s' % o.arxiv_identifier_wo_vn_nr))
+    arxiv_identifier_w_vn_nr = factory.lazy_attribute(lambda o: '%sv%i' % (
+        o.arxiv_identifier_wo_vn_nr, o.arxiv_vn_nr))
+    submission_date = factory.Faker('date_this_decade')
+    latest_activity = factory.LazyAttribute(lambda o: Faker().date_time_between(
+        start_date=o.submission_date, end_date="now", tzinfo=pytz.UTC))
 
-    @factory.post_generation
-    def fill_arxiv_fields(self, create, extracted, **kwargs):
-        '''Fill empty arxiv fields.'''
-        self.arxiv_link = 'https://arxiv.org/abs/%s' % self.arxiv_identifier_wo_vn_nr
-        self.arxiv_identifier_w_vn_nr = '%sv1' % self.arxiv_identifier_wo_vn_nr
-        self.arxiv_vn_nr = kwargs.get('arxiv_vn_nr', 1)
+    class Meta:
+        model = Submission
 
     @factory.post_generation
     def contributors(self, create, extracted, **kwargs):
-        contributors = list(Contributor.objects.order_by('?')[:4])
+        contributors = Contributor.objects.all()
+        if self.editor_in_charge:
+            contributors = contributors.exclude(id=self.editor_in_charge.id)
+        contributors = contributors.order_by('?')[:random.randint(1, 6)]
 
         # Auto-add the submitter as an author
-        self.submitted_by = contributors.pop()
+        self.submitted_by = contributors[0]
+        self.author_list = ', '.join([
+            '%s %s' % (c.user.first_name, c.user.last_name) for c in contributors])
 
         if not create:
             return
-        self.authors.add(self.submitted_by)
 
         # Add three random authors
-        for contrib in contributors:
-            self.authors.add(contrib)
-            self.author_list += ', %s %s' % (contrib.user.first_name, contrib.user.last_name)
-
-    @factory.post_generation
-    def dates(self, create, extracted, **kwargs):
-        timezone.now()
-        if kwargs.get('submission', False):
-            self.submission_date = kwargs['submission']
-            self.cycle.update_deadline()
-            return
-        self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
-                                                         tzinfo=pytz.UTC).date()
-        self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
-                                                         end_date="now", tzinfo=pytz.UTC)
+        self.authors.add(*contributors)
         self.cycle.update_deadline()
 
 
 class UnassignedSubmissionFactory(SubmissionFactory):
-    '''This Submission is a 'new request' by a Contributor for its Submission.'''
+    """
+    A new incoming Submission without any EIC assigned.
+    """
     status = STATUS_UNASSIGNED
 
 
 class EICassignedSubmissionFactory(SubmissionFactory):
+    """
+    A Submission with an EIC assigned, visible in the pool and refereeing in process.
+    """
     status = STATUS_EIC_ASSIGNED
     open_for_commenting = True
     open_for_reporting = True
 
+    @factory.lazy_attribute
+    def editor_in_charge(self):
+        return Contributor.objects.order_by('?').first()
+
+    @factory.post_generation
+    def eic_assignment(self, create, extracted, **kwargs):
+        if create:
+            EditorialAssignmentFactory(submission=self, to=self.editor_in_charge)
+
+    @factory.post_generation
+    def referee_invites(self, create, extracted, **kwargs):
+        for i in range(random.randint(1, 3)):
+            RefereeInvitationFactory(submission=self)
+
+        for i in range(random.randint(0, 2)):
+            AcceptedRefereeInvitationFactory(submission=self)
+
+        for i in range(random.randint(0, 2)):
+            FulfilledRefereeInvitationFactory(submission=self)
+
     @factory.post_generation
-    def eic(self, create, extracted, **kwargs):
-        '''Assign an EIC to submission.'''
-        author_ids = list(self.authors.values_list('id', flat=True))
-        self.editor_in_charge = (Contributor.objects.order_by('?')
-                                            .exclude(pk=self.submitted_by.pk)
-                                            .exclude(pk__in=author_ids).first())
+    def comments(self, create, extracted, **kwargs):
+        if create:
+            for i in range(random.randint(0, 3)):
+                SubmissionCommentFactory(content_object=self)
+
+    @factory.post_generation
+    def eic_recommendation(self, create, extracted, **kwargs):
+        if create:
+            EICRecommendationFactory(submission=self)
 
 
-class ResubmittedSubmissionFactory(SubmissionFactory):
-    '''This Submission is a `resubmitted` version.'''
+class ResubmittedSubmissionFactory(EICassignedSubmissionFactory):
+    """
+    A Submission that has a newer Submission version in the database
+    with a successive version number.
+    """
     status = STATUS_RESUBMITTED
     open_for_commenting = False
     open_for_reporting = False
     is_current = False
     is_resubmission = False
 
+    @factory.post_generation
+    def successive_submission(self, create, extracted, **kwargs):
+        """
+        Generate a second Submission that's the successive version of the resubmitted Submission
+        """
+        if create and extracted is not False:
+            # Prevent infinite loops by checking the extracted argument
+            ResubmissionFactory(arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr,
+                                previous_submission=False)
+
+    @factory.post_generation
+    def gather_successor_data(self, create, extracted, **kwargs):
+        """
+        Gather some data from Submission with same arxiv id such that this Submission
+        more or less looks like any regular real resubmission.
+        """
+        submission = Submission.objects.filter(
+            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).exclude(
+            arxiv_vn_nr=self.arxiv_vn_nr).first()
+        if not submission:
+            return
+
+        self.author_list = submission.author_list
+        self.submitted_by = submission.submitted_by
+        self.editor_in_charge = submission.editor_in_charge
+        self.submission_type = submission.submission_type
+        self.submitted_to_journal = submission.submitted_to_journal
+        self.title = submission.title
+        self.subject_area = submission.subject_area
+        self.domain = submission.domain
+        self.title = submission.title
+        self.authors.set(self.authors.all())
+
+    @factory.post_generation
+    def referee_invites(self, create, extracted, **kwargs):
+        """
+        This Submission is deactivated for refereeing.
+        """
+        for i in range(random.randint(0, 2)):
+            FulfilledRefereeInvitationFactory(submission=self)
+
+        for i in range(random.randint(1, 3)):
+            CancelledRefereeInvitationFactory(submission=self)
+
 
-class ResubmissionFactory(SubmissionFactory):
+class ResubmissionFactory(EICassignedSubmissionFactory):
     """
     This Submission is a newer version of a Submission which is
     already known by the SciPost database.
@@ -111,63 +182,99 @@ class ResubmissionFactory(SubmissionFactory):
     open_for_commenting = True
     open_for_reporting = True
     is_resubmission = True
+    arxiv_vn_nr = 2
 
     @factory.post_generation
-    def fill_arxiv_fields(self, create, extracted, **kwargs):
-        '''Fill empty arxiv fields.'''
-        self.arxiv_link = 'https://arxiv.org/abs/%s' % self.arxiv_identifier_wo_vn_nr
-        self.arxiv_identifier_w_vn_nr = '%sv2' % self.arxiv_identifier_wo_vn_nr
-        self.arxiv_vn_nr = 2
+    def previous_submission(self, create, extracted, **kwargs):
+        if create and extracted is not False:
+            # Prevent infinite loops by checking the extracted argument
+            ResubmittedSubmissionFactory(arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr,
+                                         successive_submission=False)
 
     @factory.post_generation
-    def eic(self, create, extracted, **kwargs):
-        '''Assign an EIC to submission.'''
-        author_ids = list(self.authors.values_list('id', flat=True))
-        self.editor_in_charge = (Contributor.objects.order_by('?')
-                                            .exclude(pk=self.submitted_by.pk)
-                                            .exclude(pk__in=author_ids).first())
+    def gather_predecessor_data(self, create, extracted, **kwargs):
+        """
+        Gather some data from Submission with same arxiv id such that this Submission
+        more or less looks like any regular real resubmission.
+        """
+        submission = Submission.objects.filter(
+            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).exclude(
+            arxiv_vn_nr=self.arxiv_vn_nr).first()
+        if not submission:
+            return
+
+        self.author_list = submission.author_list
+        self.submitted_by = submission.submitted_by
+        self.editor_in_charge = submission.editor_in_charge
+        self.submission_type = submission.submission_type
+        self.submitted_to_journal = submission.submitted_to_journal
+        self.title = submission.title
+        self.subject_area = submission.subject_area
+        self.domain = submission.domain
+        self.title = submission.title
+        self.authors.set(self.authors.all())
 
     @factory.post_generation
-    def dates(self, create, extracted, **kwargs):
-        """Overwrite the parent `dates` method to skip the update_deadline call."""
-        timezone.now()
-        if kwargs.get('submission', False):
-            self.submission_date = kwargs['submission']
-            return
-        self.submission_date = Faker().date_time_between(start_date="-3y", end_date="now",
-                                                         tzinfo=pytz.UTC).date()
-        self.latest_activity = Faker().date_time_between(start_date=self.submission_date,
-                                                         end_date="now", tzinfo=pytz.UTC)
+    def referee_invites(self, create, extracted, **kwargs):
+        """
+        Referees for resubmissions are invited once the cycle has been chosen.
+        """
+        pass
 
 
-class PublishedSubmissionFactory(SubmissionFactory):
+class PublishedSubmissionFactory(EICassignedSubmissionFactory):
     status = STATUS_PUBLISHED
     open_for_commenting = False
     open_for_reporting = False
 
+    @factory.post_generation
+    def generate_publication(self, create, extracted, **kwargs):
+        if create and extracted is not False:
+            from journals.factories import PublicationFactory
+            PublicationFactory(
+                journal=self.submitted_to_journal,
+                accepted_submission=self, title=self.title, author_list=self.author_list)
+
+    @factory.post_generation
+    def eic_assignment(self, create, extracted, **kwargs):
+        if create:
+            EditorialAssignmentFactory(submission=self, to=self.editor_in_charge, completed=True)
+
+    @factory.post_generation
+    def referee_invites(self, create, extracted, **kwargs):
+        for i in range(random.randint(2, 4)):
+            FulfilledRefereeInvitationFactory(submission=self)
+
+        for i in range(random.randint(0, 2)):
+            CancelledRefereeInvitationFactory(submission=self)
 
-class ReportFactory(factory.django.DjangoModelFactory):
-    class Meta:
-        model = Report
 
+class ReportFactory(factory.django.DjangoModelFactory):
     status = factory.Iterator(REPORT_STATUSES, getter=lambda c: c[0])
     submission = factory.Iterator(Submission.objects.all())
-    date_submitted = Faker().date_time_between(start_date="-3y", end_date="now", tzinfo=pytz.UTC)
+    date_submitted = factory.Faker('date_time_this_decade')
     vetted_by = factory.Iterator(Contributor.objects.all())
     author = factory.Iterator(Contributor.objects.all())
-    qualification = factory.Iterator(REFEREE_QUALIFICATION, getter=lambda c: c[0])
-    strengths = Faker().paragraph()
-    weaknesses = Faker().paragraph()
-    report = Faker().paragraph()
-    requested_changes = Faker().paragraph()
-    validity = factory.Iterator(RANKING_CHOICES, getter=lambda c: c[0])
-    significance = factory.Iterator(RANKING_CHOICES, getter=lambda c: c[0])
-    originality = factory.Iterator(RANKING_CHOICES, getter=lambda c: c[0])
-    clarity = factory.Iterator(RANKING_CHOICES, getter=lambda c: c[0])
-    formatting = factory.Iterator(QUALITY_SPEC, getter=lambda c: c[0])
-    grammar = factory.Iterator(QUALITY_SPEC, getter=lambda c: c[0])
-    recommendation = factory.Iterator(REPORT_REC, getter=lambda c: c[0])
-    remarks_for_editors = Faker().paragraph()
+    strengths = factory.Faker('paragraph')
+    weaknesses = factory.Faker('paragraph')
+    report = factory.Faker('paragraph')
+    requested_changes = factory.Faker('paragraph')
+
+    qualification = factory.Iterator(REFEREE_QUALIFICATION[1:], getter=lambda c: c[0])
+    validity = factory.Iterator(RANKING_CHOICES[1:], getter=lambda c: c[0])
+    significance = factory.Iterator(RANKING_CHOICES[1:], getter=lambda c: c[0])
+    originality = factory.Iterator(RANKING_CHOICES[1:], getter=lambda c: c[0])
+    clarity = factory.Iterator(RANKING_CHOICES[1:], getter=lambda c: c[0])
+    formatting = factory.Iterator(QUALITY_SPEC[1:], getter=lambda c: c[0])
+    grammar = factory.Iterator(QUALITY_SPEC[1:], getter=lambda c: c[0])
+    recommendation = factory.Iterator(REPORT_REC[1:], getter=lambda c: c[0])
+
+    remarks_for_editors = factory.Faker('paragraph')
+    flagged = factory.Faker('boolean', chance_of_getting_true=10)
+    anonymous = factory.Faker('boolean', chance_of_getting_true=75)
+
+    class Meta:
+        model = Report
 
 
 class DraftReportFactory(ReportFactory):
@@ -182,26 +289,88 @@ class UnVettedReportFactory(ReportFactory):
 
 class VettedReportFactory(ReportFactory):
     status = STATUS_VETTED
+    needs_doi = True
+    doideposit_needs_updating = factory.Faker('boolean')
+    doi_label = factory.lazy_attribute(lambda n: random_scipost_report_doi_label())
+    pdf_report = factory.Faker('file_name', extension='pdf')
 
 
 class RefereeInvitationFactory(factory.django.DjangoModelFactory):
+    submission = factory.SubFactory('submissions.factories.SubmissionFactory')
+    referee = factory.lazy_attribute(lambda o: Contributor.objects.exclude(
+        id__in=o.submission.authors.all()).order_by('?').first())
+
+    title = factory.lazy_attribute(lambda o: o.referee.title)
+    first_name = factory.lazy_attribute(lambda o: o.referee.user.first_name)
+    last_name = factory.lazy_attribute(lambda o: o.referee.user.last_name)
+    email_address = factory.lazy_attribute(lambda o: o.referee.user.email)
+    date_invited = factory.lazy_attribute(lambda o: o.submission.latest_activity)
+    nr_reminders = factory.lazy_attribute(lambda o: random.randint(0, 4))
+    date_last_reminded = factory.lazy_attribute(lambda o: o.submission.latest_activity)
+
+    invitation_key = factory.Faker('md5')
+    invited_by = factory.lazy_attribute(lambda o: o.submission.editor_in_charge)
+
     class Meta:
         model = RefereeInvitation
 
-    submission = factory.SubFactory('submissions.factories.SubmissionFactory')
-    referee = factory.Iterator(Contributor.objects.all())
 
-    invitation_key = factory.Faker('md5')
-    invited_by = factory.Iterator(Contributor.objects.all())
+class AcceptedRefereeInvitationFactory(RefereeInvitationFactory):
+    accepted = True
+    date_responded = factory.lazy_attribute(lambda o: Faker().date_time_between(
+        start_date=o.date_invited, end_date="now", tzinfo=pytz.UTC))
 
     @factory.post_generation
-    def contributor_fields(self, create, extracted, **kwargs):
-        self.title = self.referee.title
-        self.first_name = self.referee.user.first_name
-        self.last_name = self.referee.user.last_name
-        self.email_address = self.referee.user.email
+    def report(self, create, extracted, **kwargs):
+        if create:
+            VettedReportFactory(submission=self.submission, author=self.referee)
 
 
-class AcceptedRefereeInvitationFactory(RefereeInvitationFactory):
+class FulfilledRefereeInvitationFactory(AcceptedRefereeInvitationFactory):
+    fulfilled = True
+    date_responded = factory.lazy_attribute(lambda o: Faker().date_time_between(
+        start_date=o.date_invited, end_date="now", tzinfo=pytz.UTC))
+
+    @factory.post_generation
+    def report(self, create, extracted, **kwargs):
+        if create:
+            VettedReportFactory(submission=self.submission, author=self.referee)
+
+
+class CancelledRefereeInvitationFactory(AcceptedRefereeInvitationFactory):
+    fulfilled = False
+    cancelled = True
+    date_responded = factory.lazy_attribute(lambda o: Faker().date_time_between(
+        start_date=o.date_invited, end_date="now", tzinfo=pytz.UTC))
+
+
+class EICRecommendationFactory(factory.django.DjangoModelFactory):
+    submission = factory.Iterator(Submission.objects.all())
+    date_submitted = factory.lazy_attribute(lambda o: Faker().date_time_between(
+        start_date=o.submission.submission_date, end_date="now", tzinfo=pytz.UTC))
+    remarks_for_authors = factory.Faker('paragraph')
+    requested_changes = factory.Faker('paragraph')
+    remarks_for_editorial_college = factory.Faker('paragraph')
+    recommendation = factory.Iterator(REPORT_REC[1:], getter=lambda c: c[0])
+    version = 1
+    active = True
+
+    class Meta:
+        model = EICRecommendation
+
+
+class EditorialAssignmentFactory(factory.django.DjangoModelFactory):
+    """
+    A EditorialAssignmentFactory should always have a `submission` explicitly assigned. This will
+    mostly be done using the post_generation hook in any SubmissionFactory.
+    """
+    submission = None
+    to = factory.Iterator(Contributor.objects.all())
     accepted = True
-    date_responded = Faker().date_time_between(start_date="-1y", end_date="now", tzinfo=pytz.UTC)
+    deprecated = False
+    completed = False
+    date_created = factory.lazy_attribute(lambda o: o.submission.latest_activity)
+    date_answered = factory.lazy_attribute(lambda o: o.submission.latest_activity)
+
+    class Meta:
+        model = EditorialAssignment
diff --git a/submissions/forms.py b/submissions/forms.py
index 3784031645d090097fa265db42b42111e08258cb..c07f76b1fe3bd5a4ad07c51f5b3455930140ee98 100644
--- a/submissions/forms.py
+++ b/submissions/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 import re
 
@@ -6,19 +10,22 @@ from django.conf import settings
 from django.db import transaction
 from django.utils import timezone
 
-from .constants import ASSIGNMENT_BOOL, ASSIGNMENT_REFUSAL_REASONS, STATUS_RESUBMITTED,\
-                       REPORT_ACTION_CHOICES, REPORT_REFUSAL_CHOICES, STATUS_REVISION_REQUESTED,\
-                       STATUS_REJECTED, STATUS_REJECTED_VISIBLE, STATUS_RESUBMISSION_INCOMING,\
-                       STATUS_DRAFT, STATUS_UNVETTED, REPORT_ACTION_ACCEPT, REPORT_ACTION_REFUSE,\
-                       STATUS_VETTED, EXPLICIT_REGEX_MANUSCRIPT_CONSTRAINTS, SUBMISSION_STATUS,\
-                       POST_PUBLICATION_STATUSES, REPORT_POST_EDREC, REPORT_NORMAL
+from .constants import (
+    ASSIGNMENT_BOOL, ASSIGNMENT_REFUSAL_REASONS, STATUS_RESUBMITTED, REPORT_ACTION_CHOICES,
+    REPORT_REFUSAL_CHOICES, STATUS_REVISION_REQUESTED, STATUS_REJECTED, STATUS_REJECTED_VISIBLE,
+    STATUS_RESUBMISSION_INCOMING, STATUS_DRAFT, STATUS_UNVETTED, REPORT_ACTION_ACCEPT,
+    REPORT_ACTION_REFUSE, STATUS_VETTED, EXPLICIT_REGEX_MANUSCRIPT_CONSTRAINTS, SUBMISSION_STATUS,
+    POST_PUBLICATION_STATUSES, REPORT_POST_EDREC, REPORT_NORMAL)
 from . import exceptions, helpers
-from .models import Submission, RefereeInvitation, Report, EICRecommendation, EditorialAssignment,\
-                    iThenticateReport, EditorialCommunication
+from .models import (
+    Submission, RefereeInvitation, Report, EICRecommendation, EditorialAssignment,
+    iThenticateReport, EditorialCommunication)
 
+from common.helpers import get_new_secrets_key
 from colleges.models import Fellowship
+from invitations.models import RegistrationInvitation
 from journals.constants import SCIPOST_JOURNAL_PHYSICS_PROC
-from scipost.constants import SCIPOST_SUBJECT_AREAS
+from scipost.constants import SCIPOST_SUBJECT_AREAS, INVITATION_REFEREEING
 from scipost.services import ArxivCaller
 from scipost.models import Contributor
 import strings
@@ -338,38 +345,30 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm):
         if not self.last_submission:
             raise Submission.DoesNotExist
 
-        # Open for comment and reporting
-        submission.open_for_reporting = True
-        submission.open_for_commenting = True
-
         # Close last submission
-        self.last_submission.is_current = False
-        self.last_submission.open_for_reporting = False
-        self.last_submission.status = STATUS_RESUBMITTED
-        self.last_submission.save()
-
-        # Editor-in-charge
-        submission.editor_in_charge = self.last_submission.editor_in_charge
-        submission.status = STATUS_RESUBMISSION_INCOMING
-
-        # Author claim fields
+        Submission.objects.filter(id=self.last_submission.id).update(
+            is_current=False,
+            open_for_reporting=False,
+            status=STATUS_RESUBMITTED)
+
+        # Open for comment and reporting and copy EIC info
+        Submission.objects.filter(id=submission.id).update(
+            open_for_reporting=True,
+            open_for_commenting=True,
+            editor_in_charge=self.last_submission.editor_in_charge,
+            status=STATUS_RESUBMISSION_INCOMING)
+
+        # Add author(s) (claim) fields
         submission.authors.add(*self.last_submission.authors.all())
         submission.authors_claims.add(*self.last_submission.authors_claims.all())
         submission.authors_false_claims.add(*self.last_submission.authors_false_claims.all())
-        submission.save()
-        return submission
 
-    @transaction.atomic
-    def reassign_eic_and_admins(self, submission):
-        # Assign editor
+        # Create new EditorialAssigment for the current Editor-in-Charge
         assignment = EditorialAssignment(
             submission=submission,
-            to=submission.editor_in_charge,
-            accepted=True
-        )
+            to=self.last_submission.editor_in_charge,
+            accepted=True)
         assignment.save()
-        submission.save()
-        return submission
 
     def set_pool(self, submission):
         qs = Fellowship.objects.active()
@@ -406,11 +405,12 @@ class RequestSubmissionForm(SubmissionChecks, forms.ModelForm):
         # Save
         submission.save()
         if self.submission_is_resubmission():
-            submission = self.copy_and_save_data_from_resubmission(submission)
-            submission = self.reassign_eic_and_admins(submission)
+            self.copy_and_save_data_from_resubmission(submission)
         submission.authors.add(self.requested_by.contributor)
         self.set_pool(submission)
-        return submission
+
+        # Return latest version of the Submission. It could be outdated by now.
+        return Submission.objects.get(id=submission.id)
 
 
 class SubmissionReportsForm(forms.ModelForm):
@@ -435,7 +435,7 @@ class EditorialAssignmentForm(forms.ModelForm):
         self.submission = kwargs.pop('submission')
         super().__init__(*args, **kwargs)
         self.fields['to'].queryset = Contributor.objects.available().filter(
-            fellowships__pool=self.submission).distinct()
+            fellowships__pool=self.submission).distinct().order_by('user__last_name')
 
     def save(self, commit=True):
         self.instance.submission = self.submission
@@ -458,14 +458,52 @@ class RefereeSelectForm(forms.Form):
 
 
 class RefereeRecruitmentForm(forms.ModelForm):
+    """Invite non-registered scientist to register and referee a Submission."""
+
     class Meta:
         model = RefereeInvitation
-        fields = ['title', 'first_name', 'last_name', 'email_address']
+        fields = [
+            'title',
+            'first_name',
+            'last_name',
+            'email_address',
+            'invitation_key']
+        widgets = {
+            'invitation_key': forms.HiddenInput()
+        }
 
     def __init__(self, *args, **kwargs):
-        super(RefereeRecruitmentForm, self).__init__(*args, **kwargs)
-        self.fields['first_name'].widget.attrs.update({'size': 20})
-        self.fields['last_name'].widget.attrs.update({'size': 20})
+        self.request = kwargs.pop('request', None)
+        self.submission = kwargs.pop('submission', None)
+
+        initial = kwargs.pop('initial', {})
+        initial['invitation_key'] = get_new_secrets_key()
+        kwargs['initial'] = initial
+        super().__init__(*args, **kwargs)
+
+    def save(self, commit=True):
+        if not self.request or not self.submission:
+            raise forms.ValidationError('No request or Submission given.')
+
+        self.instance.submission = self.submission
+        self.instance.invited_by = self.request.user.contributor
+        referee_invitation = super().save(commit=False)
+
+        registration_invitation = RegistrationInvitation(
+            title=referee_invitation.title,
+            first_name=referee_invitation.first_name,
+            last_name=referee_invitation.last_name,
+            email=referee_invitation.email_address,
+            invitation_type=INVITATION_REFEREEING,
+            created_by=self.request.user,
+            invited_by=self.request.user,
+            invitation_key=referee_invitation.invitation_key,
+            key_expires=timezone.now() + datetime.timedelta(days=365))
+
+        if commit:
+            referee_invitation.save()
+            registration_invitation.save()
+        return (referee_invitation, registration_invitation)
 
 
 class ConsiderRefereeInvitationForm(forms.Form):
@@ -495,11 +533,8 @@ class VotingEligibilityForm(forms.ModelForm):
 
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
-        # Do we need this discipline filter still with the new Pool construction???
-        # -- JdW; Oct 20th, 2017
         self.fields['eligible_fellows'].queryset = Contributor.objects.filter(
                 fellowships__pool=self.instance.submission,
-                discipline=self.instance.submission.discipline,
                 expertises__contains=[self.instance.submission.subject_area]
                 ).order_by('user__last_name')
 
@@ -539,7 +574,7 @@ class ReportForm(forms.ModelForm):
         if kwargs.get('instance'):
             if kwargs['instance'].is_followup_report:
                 # Prefill data from latest report in the series
-                latest_report = kwargs['instance'].latest_report_from_series()
+                latest_report = kwargs['instance'].latest_report_from_thread()
                 kwargs.update({
                     'initial': {
                         'qualification': latest_report.qualification,
@@ -833,9 +868,10 @@ class SubmissionCycleChoiceForm(forms.ModelForm):
     def __init__(self, *args, **kwargs):
         super().__init__(*args, **kwargs)
         self.fields['refereeing_cycle'].default = None
-        other_submission = self.instance.other_versions_pool.first()
-        if other_submission:
-            self.fields['referees_reinvite'].queryset = other_submission.referee_invitations.all()
+        other_submissions = self.instance.other_versions.all()
+        if other_submissions:
+            self.fields['referees_reinvite'].queryset = RefereeInvitation.objects.filter(
+                submission__in=other_submissions).distinct()
 
 
 class iThenticateReportForm(forms.ModelForm):
diff --git a/submissions/helpers.py b/submissions/helpers.py
index 1d7a8b5fdf2eaec109b9304c38f8b82287d243fe..766a11c8f493b2833674f2a1b5fb6681c6a9a0f4 100644
--- a/submissions/helpers.py
+++ b/submissions/helpers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import requests
 
 from .exceptions import ArxivPDFNotFound
diff --git a/submissions/management/commands/create_submissions.py b/submissions/management/commands/create_submissions.py
new file mode 100644
index 0000000000000000000000000000000000000000..602cce2f2ef29cd1f89f8f7dcf69aa1a944d6b56
--- /dev/null
+++ b/submissions/management/commands/create_submissions.py
@@ -0,0 +1,40 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from submissions import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Submission objects by using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of submissions to add',
+        )
+        parser.add_argument(
+            '-s', '--status',
+            choices=['unassigned', 'assigned', 'resubmitted', 'resubmission', 'published'],
+            action='store', dest='status', default='assigned',
+            help='Current status of the Submission',
+        )
+
+    def handle(self, *args, **kwargs):
+        if kwargs['number']:
+            self.create_submissions(kwargs['number'], status=kwargs['status'])
+
+    def create_submissions(self, n, status='assigned'):
+        if status == 'unassigned':
+            factories.UnassignedSubmissionFactory.create_batch(n)
+        elif status == 'assigned':
+            factories.EICassignedSubmissionFactory.create_batch(n)
+        elif status == 'resubmitted':
+            factories.ResubmittedSubmissionFactory.create_batch(n)
+        elif status == 'resubmission':
+            factories.ResubmissionFactory.create_batch(n)
+        elif status == 'published':
+            factories.PublishedSubmissionFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Submissions.'.format(n=n)))
diff --git a/submissions/management/commands/email_fellows_tasklist.py b/submissions/management/commands/email_fellows_tasklist.py
index 36c562ecfc30fceb0e165a22d32baeec33f0a275..7fb1beabf27785818255f71caac61098076fcfe0 100644
--- a/submissions/management/commands/email_fellows_tasklist.py
+++ b/submissions/management/commands/email_fellows_tasklist.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.management import BaseCommand
 
 from ...models import Submission, EditorialAssignment
diff --git a/submissions/management/commands/remind_fellows_to_submit_report.py b/submissions/management/commands/remind_fellows_to_submit_report.py
index d7a7a6988cad29edf8318667627eecaaa38d59fd..9623097fd38df3c51894c0bb041bbc03bddc5bb5 100644
--- a/submissions/management/commands/remind_fellows_to_submit_report.py
+++ b/submissions/management/commands/remind_fellows_to_submit_report.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.management.base import BaseCommand
 # from django.contrib.auth.models import User
 
diff --git a/submissions/managers.py b/submissions/managers.py
index c31adb4fce82e763def9e11c969cea246e5d2223..ff3e92c924778b67d47ec6a1e1e83cc92e3e53d9 100644
--- a/submissions/managers.py
+++ b/submissions/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.db import models
diff --git a/submissions/migrations/0009_auto_20180220_2120.py b/submissions/migrations/0009_auto_20180220_2120.py
new file mode 100644
index 0000000000000000000000000000000000000000..27e5bb19515abcea5cb5333e0becd781ea764dd7
--- /dev/null
+++ b/submissions/migrations/0009_auto_20180220_2120.py
@@ -0,0 +1,30 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-02-20 20:20
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0008_auto_20180127_2208'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='refereeinvitation',
+            name='first_name',
+            field=models.CharField(max_length=30),
+        ),
+        migrations.AlterField(
+            model_name='refereeinvitation',
+            name='invitation_key',
+            field=models.CharField(max_length=40),
+        ),
+        migrations.AlterField(
+            model_name='refereeinvitation',
+            name='last_name',
+            field=models.CharField(max_length=30),
+        ),
+    ]
diff --git a/submissions/migrations/0010_auto_20180314_1607.py b/submissions/migrations/0010_auto_20180314_1607.py
new file mode 100644
index 0000000000000000000000000000000000000000..7bbd633195f6d1b3e4dfb44a9552f18d9586275f
--- /dev/null
+++ b/submissions/migrations/0010_auto_20180314_1607.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.11.4 on 2018-03-14 15:07
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('submissions', '0009_auto_20180220_2120'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='submission',
+            name='submission_type',
+            field=models.CharField(choices=[('Letter', 'Letter (broad-interest breakthrough results)'), ('Article', 'Article (in-depth reports on specialized research)'), ('Review', 'Review (candid snapshot of current research in a given area)')], default='', max_length=10),
+            preserve_default=False,
+        ),
+    ]
diff --git a/submissions/mixins.py b/submissions/mixins.py
index 467ceab478632e655f21000bbd08b7499f0f099d..7a6826f97ee5ef85b8040d7ceef1915480965325 100644
--- a/submissions/mixins.py
+++ b/submissions/mixins.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.exceptions import ImproperlyConfigured
 from django.contrib.auth.mixins import PermissionRequiredMixin
 from django.views.generic.list import ListView
diff --git a/submissions/models.py b/submissions/models.py
index 99b5b94ce18dec2828e43db2d9f45e4ae93668c9..9c3bbcf7b50c7927ca7cf7f65379de024bcd27d0 100644
--- a/submissions/models.py
+++ b/submissions/models.py
@@ -1,4 +1,9 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
+import feedparser
 
 from django.contrib.postgres.fields import JSONField
 from django.contrib.contenttypes.fields import GenericRelation
@@ -9,36 +14,38 @@ from django.urls import reverse
 from django.utils.functional import cached_property
 
 from .behaviors import SubmissionRelatedObjectMixin
-from .constants import ASSIGNMENT_REFUSAL_REASONS, ASSIGNMENT_NULLBOOL,\
-                       SUBMISSION_TYPE, ED_COMM_CHOICES, REFEREE_QUALIFICATION, QUALITY_SPEC,\
-                       RANKING_CHOICES, REPORT_REC, SUBMISSION_STATUS, STATUS_UNASSIGNED,\
-                       REPORT_STATUSES, STATUS_UNVETTED, SUBMISSION_EIC_RECOMMENDATION_REQUIRED,\
-                       SUBMISSION_CYCLES, CYCLE_DEFAULT, CYCLE_SHORT, CYCLE_DIRECT_REC,\
-                       EVENT_GENERAL, EVENT_TYPES, EVENT_FOR_AUTHOR, EVENT_FOR_EIC,\
-                       REPORT_TYPES, REPORT_NORMAL, STATUS_DRAFT, STATUS_VETTED,\
-                       STATUS_VOTING_IN_PREPARATION, STATUS_PUT_TO_EC_VOTING
-from .managers import SubmissionQuerySet, EditorialAssignmentQuerySet, EICRecommendationQuerySet,\
-                      ReportQuerySet, SubmissionEventQuerySet, RefereeInvitationQuerySet,\
-                      EditorialCommunicationQueryset
-from .utils import ShortSubmissionCycle, DirectRecommendationSubmissionCycle,\
-                   GeneralSubmissionCycle
+from .constants import (
+    ASSIGNMENT_REFUSAL_REASONS, ASSIGNMENT_NULLBOOL, SUBMISSION_TYPE,
+    ED_COMM_CHOICES, REFEREE_QUALIFICATION, QUALITY_SPEC, RANKING_CHOICES, REPORT_REC,
+    SUBMISSION_STATUS, STATUS_UNASSIGNED, REPORT_STATUSES, STATUS_UNVETTED,
+    SUBMISSION_EIC_RECOMMENDATION_REQUIRED, SUBMISSION_CYCLES, CYCLE_DEFAULT, CYCLE_SHORT,
+    CYCLE_DIRECT_REC, EVENT_GENERAL, EVENT_TYPES, EVENT_FOR_AUTHOR, EVENT_FOR_EIC, REPORT_TYPES,
+    REPORT_NORMAL, STATUS_DRAFT, STATUS_VETTED, STATUS_VOTING_IN_PREPARATION,
+    STATUS_PUT_TO_EC_VOTING)
+from .managers import (
+    SubmissionQuerySet, EditorialAssignmentQuerySet, EICRecommendationQuerySet, ReportQuerySet,
+    SubmissionEventQuerySet, RefereeInvitationQuerySet, EditorialCommunicationQueryset)
+from .utils import (
+    ShortSubmissionCycle, DirectRecommendationSubmissionCycle, GeneralSubmissionCycle)
 
 from comments.models import Comment
 from scipost.behaviors import TimeStampedModel
 from scipost.constants import TITLE_CHOICES
-from scipost.fields import ChoiceArrayField
 from scipost.constants import SCIPOST_DISCIPLINES, SCIPOST_SUBJECT_AREAS
+from scipost.fields import ChoiceArrayField
 from journals.constants import SCIPOST_JOURNALS_SUBMIT, SCIPOST_JOURNALS_DOMAINS
 from journals.models import Publication
 
 
 class Submission(models.Model):
+    """SciPost register of an preprint (ArXiv articles only for now).
+
+    A Submission is a centralized information package used in the refereeing cycle of a preprint.
+    It collects information about authors, referee reports, editorial recommendations,
+    college decisions, etc. etc. After an 'acceptance editorial recommendation', the Publication
+    will directly be related to the latest Submission in the thread.
     """
-    Submission is a SciPost register of an ArXiv article. This object is the central
-    instance for every action, recommendation, communication, etc. etc. that is related to the
-    refereeing cycle of a Submission. A possible Publication object is later directly related
-    to this Submission instance.
-    """
+
     author_comments = models.TextField(blank=True)
     author_list = models.CharField(max_length=1000, verbose_name="author list")
     discipline = models.CharField(max_length=20, choices=SCIPOST_DISCIPLINES, default='physics')
@@ -64,10 +71,11 @@ class Submission(models.Model):
                                         default=CYCLE_DEFAULT)
     fellows = models.ManyToManyField('colleges.Fellowship', blank=True,
                                      related_name='pool')
+    # visible_pool = models.BooleanField(default=True)
+    # visible_public = models.BooleanField(default=False)
     subject_area = models.CharField(max_length=10, choices=SCIPOST_SUBJECT_AREAS,
                                     verbose_name='Primary subject area', default='Phys:QP')
-    submission_type = models.CharField(max_length=10, choices=SUBMISSION_TYPE,
-                                       blank=True, null=True, default=None)
+    submission_type = models.CharField(max_length=10, choices=SUBMISSION_TYPE)
     submitted_by = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE,
                                      related_name='submitted_submissions')
     voting_fellows = models.ManyToManyField('colleges.Fellowship', blank=True,
@@ -117,129 +125,132 @@ class Submission(models.Model):
     class Meta:
         app_label = 'submissions'
 
-    def __init__(self, *args, **kwargs):
-        super().__init__(*args, **kwargs)
-        self._update_cycle()
-
     def save(self, *args, **kwargs):
-        # Fill `arxiv_identifier_w_vn_nr` as a dummy field for convenience
+        """Prefill some fields before saving."""
         arxiv_w_vn = '{arxiv}v{version}'.format(
             arxiv=self.arxiv_identifier_wo_vn_nr,
             version=self.arxiv_vn_nr)
         self.arxiv_identifier_w_vn_nr = arxiv_w_vn
 
         obj = super().save(*args, **kwargs)
-        self._update_cycle()
+        if hasattr(self, 'cycle'):
+            self.set_cycle()
         return obj
 
     def __str__(self):
-        header = (self.arxiv_identifier_w_vn_nr + ', '
-                  + self.title[:30] + ' by ' + self.author_list[:30])
+        """Summerize the Submission in a string."""
+        header = '{arxiv_id}, {title} by {authors}'.format(
+            arxiv_id=self.arxiv_identifier_w_vn_nr,
+            title=self.title[:30],
+            authors=self.author_list[:30])
         if self.is_current:
             header += ' (current version)'
         else:
             header += ' (deprecated version ' + str(self.arxiv_vn_nr) + ')'
-        try:
+        if hasattr(self, 'publication') and self.publication.is_published:
             header += ' (published as %s (%s))' % (
                 self.publication.doi_string, self.publication.publication_date.strftime('%Y'))
-        except Publication.DoesNotExist:
-            pass
         return header
 
     def touch(self):
-        """ Update latest activity as a service """
-        self.latest_activity = timezone.now()
-        self.save()
+        """Update latest activity timestamp."""
+        Submission.objects.filter(id=self.id).update(latest_activity=timezone.now())
 
     def comments_set_complete(self):
-        """
-        Return comments to Submission, comments on Reports of Submission and
-        nested comments related to this Submission.
-        """
+        """Return Comments on Submissions, Reports and other Comments."""
         return Comment.objects.filter(Q(submissions=self) |
                                       Q(reports__submission=self) |
                                       Q(comments__reports__submission=self) |
                                       Q(comments__submissions=self)).distinct()
 
-    def _update_cycle(self):
-        """
-        Append the specific submission cycle to the instance to eventually handle the
-        complete submission cycle outside the submission instance itself.
-        """
+    @property
+    def cycle(self):
+        """Get cycle object that's relevant for the Submission."""
+        if not hasattr(self, '__cycle'):
+            self.set_cycle()
+        return self.__cycle
+
+    def set_cycle(self):
+        """Set cycle to the Submission on request."""
         if self.refereeing_cycle == CYCLE_SHORT:
-            self.cycle = ShortSubmissionCycle(self)
+            cycle = ShortSubmissionCycle(self)
         elif self.refereeing_cycle == CYCLE_DIRECT_REC:
-            self.cycle = DirectRecommendationSubmissionCycle(self)
+            cycle = DirectRecommendationSubmissionCycle(self)
         else:
-            self.cycle = GeneralSubmissionCycle(self)
+            cycle = GeneralSubmissionCycle(self)
+        self.__cycle = cycle
 
     def get_absolute_url(self):
-        return reverse('submissions:submission', args=[self.arxiv_identifier_w_vn_nr])
+        """Return url of the Submission detail page."""
+        return reverse('submissions:submission', args=(self.arxiv_identifier_w_vn_nr,))
 
     @property
     def notification_name(self):
+        """Return string representation of this Submission as shown in Notifications."""
         return self.arxiv_identifier_w_vn_nr
 
     @property
     def eic_recommendation_required(self):
+        """Return if Submission needs a EICRecommendation to be formulated."""
         return self.status in SUBMISSION_EIC_RECOMMENDATION_REQUIRED
 
     @property
     def reporting_deadline_has_passed(self):
+        """Check if Submission has passed it's reporting deadline."""
         return timezone.now() > self.reporting_deadline
 
     @property
     def original_submission_date(self):
+        """Return the submission_date of the first Submission in the thread."""
         return Submission.objects.filter(
             arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).first().submission_date
 
     @cached_property
     def thread(self):
-        """
-        Return all versions of the Submission with that arxiv id.
-        """
+        """Return all (public) Submissions in the database in this ArXiv identifier series."""
         return Submission.objects.public().filter(
-            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr
-        ).order_by('-arxiv_vn_nr')
+            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).order_by('-arxiv_vn_nr')
 
     @cached_property
-    def other_versions(self):
-        """
-        Return all other versions of the Submission that are publicly accessible.
-        """
+    def other_versions_public(self):
+        """Return other (public) Submissions in the database in this ArXiv identifier series."""
         return Submission.objects.public().filter(
             arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr
         ).exclude(pk=self.id).order_by('-arxiv_vn_nr')
 
     @cached_property
-    def other_versions_pool(self):
-        """
-        Return all other versions of the Submission.
-        """
+    def other_versions(self):
+        """Return other Submissions in the database in this ArXiv identifier series."""
         return Submission.objects.filter(
-            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr
-        ).exclude(pk=self.id).order_by('-arxiv_vn_nr')
+            arxiv_identifier_wo_vn_nr=self.arxiv_identifier_wo_vn_nr).exclude(
+            pk=self.id).order_by('-arxiv_vn_nr')
 
-    # Underneath: All very inefficient methods as they initiate a new query
     def count_accepted_invitations(self):
+        """Count number of accepted RefereeInvitations for this Submission."""
         return self.referee_invitations.filter(accepted=True).count()
 
     def count_declined_invitations(self):
+        """Count number of declined RefereeInvitations for this Submission."""
         return self.referee_invitations.filter(accepted=False).count()
 
     def count_pending_invitations(self):
+        """Count number of RefereeInvitations awaiting response for this Submission."""
         return self.referee_invitations.filter(accepted=None).count()
 
     def count_invited_reports(self):
+        """Count number of invited Reports for this Submission."""
         return self.reports.accepted().filter(invited=True).count()
 
     def count_contrib_reports(self):
+        """Count number of contributed Reports for this Submission."""
         return self.reports.accepted().filter(invited=False).count()
 
     def count_obtained_reports(self):
+        """Count total number of Reports for this Submission."""
         return self.reports.accepted().filter(invited__isnull=False).count()
 
     def add_general_event(self, message):
+        """Generate message meant for EIC and authors."""
         event = SubmissionEvent(
             submission=self,
             event=EVENT_GENERAL,
@@ -248,6 +259,7 @@ class Submission(models.Model):
         event.save()
 
     def add_event_for_author(self, message):
+        """Generate message meant for authors only."""
         event = SubmissionEvent(
             submission=self,
             event=EVENT_FOR_AUTHOR,
@@ -256,6 +268,7 @@ class Submission(models.Model):
         event.save()
 
     def add_event_for_eic(self, message):
+        """Generate message meant for EIC and Editorial Administration only."""
         event = SubmissionEvent(
             submission=self,
             event=EVENT_FOR_EIC,
@@ -263,18 +276,44 @@ class Submission(models.Model):
         )
         event.save()
 
+    """
+    Identify coauthorships from arXiv, using author surname matching.
+    """
+    def flag_coauthorships_arxiv(self, fellows):
+        coauthorships = {}
+        if self.metadata and 'entries' in self.metadata:
+            author_last_names = []
+            for author in self.metadata['entries'][0]['authors']:
+                # Gather author data to do conflict-of-interest queries with
+                author_last_names.append(author['name'].split()[-1])
+            authors_last_names_str = '+OR+'.join(author_last_names)
+
+            for fellow in fellows:
+                # For each fellow found, so a query with the authors to check for conflicts
+                search_query = 'au:({fellow}+AND+({authors}))'.format(
+                    fellow=fellow.contributor.user.last_name,
+                    authors=authors_last_names_str)
+                queryurl = 'https://export.arxiv.org/api/query?search_query={sq}'.format(
+                    sq=search_query)
+                queryurl += '&sortBy=submittedDate&sortOrder=descending&max_results=5'
+                queryurl = queryurl.replace(' ', '+')  # Fallback for some last names with spaces
+                queryresults = feedparser.parse(queryurl)
+                if queryresults.entries:
+                    coauthorships[fellow.contributor.user.last_name] = queryresults.entries
+        return coauthorships
+
 
 class SubmissionEvent(SubmissionRelatedObjectMixin, TimeStampedModel):
-    """
-    The SubmissionEvent's goal is to act as a messaging/logging model
-    for the Submission cycle. Its main audience will be the author(s) and
-    the Editor-in-charge of a Submission.
+    """Private message directly related to a Submission.
 
-    Be aware!
-    Both the author and editor-in-charge will read the submission event.
-    Make sure the right text is given to the right event-type, to protect
+    The SubmissionEvent's goal is to act as a messaging model for the Submission cycle.
+    Its main audience will be the author(s) and the Editor-in-charge of a Submission.
+
+    Be aware that both the author and editor-in-charge will read the submission event.
+    Make sure the right text is given to the appropriate event-type, to protect
     the fellow's identity.
     """
+
     submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE,
                                    related_name='events')
     event = models.CharField(max_length=4, choices=EVENT_TYPES, default=EVENT_GENERAL)
@@ -286,6 +325,7 @@ class SubmissionEvent(SubmissionRelatedObjectMixin, TimeStampedModel):
         ordering = ['-created']
 
     def __str__(self):
+        """Summerize the SubmissionEvent's meta information."""
         return '%s: %s' % (str(self.submission), self.get_event_display())
 
 
@@ -294,11 +334,13 @@ class SubmissionEvent(SubmissionRelatedObjectMixin, TimeStampedModel):
 ######################
 
 class EditorialAssignment(SubmissionRelatedObjectMixin, models.Model):
+    """Unique Fellow assignment to a Submission as Editor-in-Charge.
+
+    An EditorialAssignment could be an invitation to be the Editor-in-Charge for a Submission,
+    containing either its acceptance or rejection, or it is an immediate accepted assignment. In
+    addition is registers whether the Fellow's duties are fullfilled or still ongoing.
     """
-    EditorialAssignment is a registration for Fellows of their duties of being a
-    Editor-in-charge for a specific Submission. This model could start as a invitation only,
-    which should then be accepted or declined by the invited.
-    """
+
     submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE)
     to = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE)
     accepted = models.NullBooleanField(choices=ASSIGNMENT_NULLBOOL, default=None)
@@ -318,29 +360,40 @@ class EditorialAssignment(SubmissionRelatedObjectMixin, models.Model):
         ordering = ['-date_created']
 
     def __str__(self):
+        """Summerize the EditorialAssignment's basic information."""
         return (self.to.user.first_name + ' ' + self.to.user.last_name + ' to become EIC of ' +
                 self.submission.title[:30] + ' by ' + self.submission.author_list[:30] +
                 ', requested on ' + self.date_created.strftime('%Y-%m-%d'))
 
     def get_absolute_url(self):
+        """Return url of the assignment's processing page."""
         return reverse('submissions:assignment_request', args=(self.id,))
 
     @property
     def notification_name(self):
+        """Return string representation of this EditorialAssigment as shown in Notifications."""
         return self.submission.arxiv_identifier_w_vn_nr
 
 
 class RefereeInvitation(SubmissionRelatedObjectMixin, models.Model):
+    """Invitation to a scientist to referee a Submission.
+
+    A RefereeInvitation will invite a Contributor or a non-registered scientist to send
+    a Report for a specific Submission. It will register its response to the invitation and
+    the current status its refereeing duty if the invitation has been accepted.
+    """
+
     submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE,
                                    related_name='referee_invitations')
     referee = models.ForeignKey('scipost.Contributor', related_name='referee_invitations',
                                 blank=True, null=True, on_delete=models.CASCADE)
     title = models.CharField(max_length=4, choices=TITLE_CHOICES)
-    first_name = models.CharField(max_length=30, default='')
-    last_name = models.CharField(max_length=30, default='')
+    first_name = models.CharField(max_length=30)
+    last_name = models.CharField(max_length=30)
     email_address = models.EmailField()
+
     # if Contributor not found, person is invited to register
-    invitation_key = models.CharField(max_length=40, default='')
+    invitation_key = models.CharField(max_length=40)
     date_invited = models.DateTimeField(default=timezone.now)
     invited_by = models.ForeignKey('scipost.Contributor', related_name='referee_invited_by',
                                    blank=True, null=True, on_delete=models.CASCADE)
@@ -356,28 +409,34 @@ class RefereeInvitation(SubmissionRelatedObjectMixin, models.Model):
     objects = RefereeInvitationQuerySet.as_manager()
 
     def __str__(self):
+        """Summerize the RefereeInvitation's basic information."""
         return (self.first_name + ' ' + self.last_name + ' to referee ' +
                 self.submission.title[:30] + ' by ' + self.submission.author_list[:30] +
                 ', invited on ' + self.date_invited.strftime('%Y-%m-%d'))
 
     def get_absolute_url(self):
+        """Return url of the invitation's processing page."""
         return reverse('submissions:accept_or_decline_ref_invitations', args=(self.id,))
 
     @property
     def referee_str(self):
+        """Return the most up-to-date name of the Referee."""
         if self.referee:
             return str(self.referee)
         return self.last_name + ', ' + self.first_name
 
     @property
     def notification_name(self):
+        """Return string representation of this RefereeInvitation as shown in Notifications."""
         return self.submission.arxiv_identifier_w_vn_nr
 
     @property
     def related_report(self):
+        """Return the Report that's been created for this invitation."""
         return self.submission.reports.filter(author=self.referee).first()
 
     def reset_content(self):
+        """Reset the invitation's information as a new invitation."""
         self.nr_reminders = 0
         self.date_last_reminded = None
         self.accepted = None
@@ -391,17 +450,14 @@ class RefereeInvitation(SubmissionRelatedObjectMixin, models.Model):
 ###########
 
 class Report(SubmissionRelatedObjectMixin, models.Model):
-    """
-    Both types of reports, invited or contributed.
-
-    This Report model acts as both a regular `Report` and a `FollowupReport`; A normal Report
-    should have all fields required, whereas a FollowupReport only has the `report` field as
-    a required field.
+    """Report on a Submission written by a Contributor.
 
-    Important note!
-    Due to the construction of the two different types within a single model, it is important
-    to explicitly implement the perticular differences in for example the form used.
+    The refereeing Report has evaluation (text) fields for different categories. In general,
+    the Report shall have all of these fields filled. In case the Contributor has already written
+    a Report on a earlier version of the Submission, he will be able to write a 'follow-up report'.
+    A follow-up report is a Report with only the general `report` evaluation field being required.
     """
+
     status = models.CharField(max_length=16, choices=REPORT_STATUSES, default=STATUS_UNVETTED)
     report_type = models.CharField(max_length=32, choices=REPORT_TYPES, default=REPORT_NORMAL)
     submission = models.ForeignKey('submissions.Submission', related_name='reports',
@@ -467,71 +523,74 @@ class Report(SubmissionRelatedObjectMixin, models.Model):
         ordering = ['-date_submitted']
 
     def __str__(self):
+        """Summerize the RefereeInvitation's basic information."""
         return (self.author.user.first_name + ' ' + self.author.user.last_name + ' on ' +
                 self.submission.title[:50] + ' by ' + self.submission.author_list[:50])
 
+    def save(self, *args, **kwargs):
+        """Update report number before saving on creation."""
+        if not self.report_nr:
+            new_report_nr = self.submission.reports.aggregate(
+                models.Max('report_nr')).get('report_nr__max')
+            if new_report_nr:
+                new_report_nr += 1
+            else:
+                new_report_nr = 1
+            self.report_nr = new_report_nr
+        return super().save(*args, **kwargs)
+
+    def get_absolute_url(self):
+        """Return url of the Report on the Submission detail page."""
+        return self.submission.get_absolute_url() + '#report_' + str(self.report_nr)
+
     @property
     def is_in_draft(self):
+        """Return if Report is in draft."""
         return self.status == STATUS_DRAFT
 
     @property
     def is_vetted(self):
+        """Return if Report is publicly available."""
         return self.status == STATUS_VETTED
 
-    def save(self, *args, **kwargs):
-        # Control Report count per Submission.
-        if not self.report_nr:
-            self.report_nr = self.submission.reports.count() + 1
-        return super().save(*args, **kwargs)
-
-    def create_doi_label(self):
-        self.doi_label = 'SciPost.Report.' + str(self.id)
-        self.save()
-
-    def get_absolute_url(self):
-        return self.submission.get_absolute_url() + '#report_' + str(self.report_nr)
-
     @property
     def notification_name(self):
+        """Return string representation of this Report as shown in Notifications."""
         return self.submission.arxiv_identifier_w_vn_nr
 
     @property
     def doi_string(self):
+        """Return the doi with the registrant identifier prefix."""
         if self.doi_label:
             return '10.21468/' + self.doi_label
         return ''
 
     @cached_property
     def title(self):
-        """
+        """Return the submission's title.
+
         This property is (mainly) used to let Comments get the title of the Submission without
-        annoying logic.
+        overcomplicated logic.
         """
         return self.submission.title
 
     @property
     def is_followup_report(self):
-        """
-        Check if current Report is a `FollowupReport`. A Report is a `FollowupReport` if the
-        author of the report already has a vetted report in the series of the specific Submission.
+        """Return if Report is a follow-up Report instead of a regular Report.
+
+        This property is used in the ReportForm, but will be candidate to become a database
+        field if this information will become necessary in more general information representation.
         """
         return (self.author.reports.accepted().filter(
             submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr,
             submission__arxiv_vn_nr__lt=self.submission.arxiv_vn_nr).exists())
 
-    def latest_report_from_series(self):
-        """
-        Get latest Report from the same author for the Submission series.
-        """
-        return (self.author.reports.accepted().filter(
-            submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr)
-                .order_by('submission__arxiv_identifier_wo_vn_nr').last())
-
     @property
     def associated_published_doi(self):
-        """
-        Check if the Report relates to a SciPost-published object.
-        If it is, return the doi of the published object.
+        """Return the related Publication doi.
+
+        Check if the Report relates to a SciPost-published object. If it is, return the doi
+        of the published object.
         """
         try:
             publication = Publication.objects.get(
@@ -542,10 +601,10 @@ class Report(SubmissionRelatedObjectMixin, models.Model):
 
     @property
     def relation_to_published(self):
-        """
-        Check if the Report relates to a SciPost-published object.
-        If it is, return a dict with info on relation to the published object,
-        based on Crossref's peer review content type.
+        """Return dictionary with published object information.
+
+        Check if the Report relates to a SciPost-published object. If it is, return a dict with
+        info on relation to the published object, based on Crossref's peer review content type.
         """
         try:
             publication = Publication.objects.get(
@@ -564,6 +623,7 @@ class Report(SubmissionRelatedObjectMixin, models.Model):
 
     @property
     def citation(self):
+        """Return the proper citation format for this Report."""
         citation = ''
         if self.doi_string:
             if self.anonymous:
@@ -575,16 +635,24 @@ class Report(SubmissionRelatedObjectMixin, models.Model):
             citation += 'doi: %s' % self.doi_string
         return citation
 
+    def create_doi_label(self):
+        """Create a doi in the default format."""
+        Report.objects.filter(id=self.id).update(doi_label='SciPost.Report.{}'.format(self.id))
+
+    def latest_report_from_thread(self):
+        """Get latest Report of this Report's author for the Submission thread."""
+        return self.author.reports.accepted().filter(
+            submission__arxiv_identifier_wo_vn_nr=self.submission.arxiv_identifier_wo_vn_nr
+        ).order_by('submission__arxiv_identifier_wo_vn_nr').last()
+
 
 ##########################
 # EditorialCommunication #
 ##########################
 
 class EditorialCommunication(SubmissionRelatedObjectMixin, models.Model):
-    """
-    Each individual communication between Editor-in-charge
-    to and from Referees and Authors becomes an instance of this class.
-    """
+    """Message between two of the EIC, referees, Editorial Administration and/or authors."""
+
     submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE)
     referee = models.ForeignKey('scipost.Contributor', on_delete=models.CASCADE,
                                 blank=True, null=True)
@@ -599,20 +667,24 @@ class EditorialCommunication(SubmissionRelatedObjectMixin, models.Model):
         default_related_name = 'editorial_communications'
 
     def __str__(self):
+        """Summerize the EditorialCommunication's meta information."""
         output = self.comtype
         if self.referee is not None:
             output += ' ' + self.referee.user.first_name + ' ' + self.referee.user.last_name
-        output += (' for submission ' + self.submission.title[:30] + ' by '
-                   + self.submission.author_list[:30])
+        output += ' for submission {title} by {authors}'.format(
+            title=self.submission.title[:30],
+            authors=self.submission.author_list[:30])
         return output
 
 
 class EICRecommendation(SubmissionRelatedObjectMixin, models.Model):
+    """The recommendation formulated for a specific Submission, formulated by the EIC.
+
+    The EICRecommendation is the recommendation of a Submission written by the Editor-in-charge
+    formulated at the end of the refereeing cycle. It can be voted for by a subset of Fellows and
+    should contain the actual publication decision.
     """
-    The EICRecommendation is the recommendation of a Submission written by
-    the Editor-in-charge made at the end of the refereeing cycle. It can be voted for by
-    a subset of Fellows and should contain the actual publication decision.
-    """
+
     submission = models.ForeignKey('submissions.Submission', on_delete=models.CASCADE,
                                    related_name='eicrecommendations')
     date_submitted = models.DateTimeField('date submitted', default=timezone.now)
@@ -642,6 +714,7 @@ class EICRecommendation(SubmissionRelatedObjectMixin, models.Model):
         ordering = ['version']
 
     def __str__(self):
+        """Summerize the EICRecommendation's meta information."""
         return '{title} by {author}, {recommendation} version {version}'.format(
             title=self.submission.title[:20],
             author=self.submission.author_list[:30],
@@ -650,26 +723,35 @@ class EICRecommendation(SubmissionRelatedObjectMixin, models.Model):
         )
 
     def get_absolute_url(self):
-        # TODO: Fix this weird redirect, but it's neccesary for the notifications to have one.
+        """Return url of the Submission detail page.
+
+        Note that the EICRecommendation is not publicly visible, so the use of this url
+        is limited.
+        """
         return self.submission.get_absolute_url()
 
     @property
     def notification_name(self):
+        """Return string representation of this EICRecommendation as shown in Notifications."""
         return self.submission.arxiv_identifier_w_vn_nr
 
     @property
     def nr_for(self):
+        """Return the number of votes 'for'."""
         return self.voted_for.count()
 
     @property
     def nr_against(self):
+        """Return the number of votes 'against'."""
         return self.voted_against.count()
 
     @property
     def nr_abstained(self):
+        """Return the number of votes 'abstained'."""
         return self.voted_abstain.count()
 
     def may_be_reformulated(self):
+        """Check if this EICRecommdation is allowed to be reformulated in a new version."""
         if not self.active:
             # Already reformulated before; please use the latest version
             return False
@@ -677,10 +759,12 @@ class EICRecommendation(SubmissionRelatedObjectMixin, models.Model):
 
 
 class iThenticateReport(TimeStampedModel):
+    """iThenticate report registration.
+
+    iThenticateReport is the SciPost register of an iThenticate report saving basic information
+    coming from iThenticate into the SciPost database for easy access.
     """
-    iThenticateReport is the SciPost register of an iThenticate report. It saves
-    basic information coming from iThenticate into the SciPost database for easy access.
-    """
+
     uploaded_time = models.DateTimeField(null=True, blank=True)
     processed_time = models.DateTimeField(null=True, blank=True)
     doc_id = models.IntegerField(primary_key=True)
@@ -691,16 +775,31 @@ class iThenticateReport(TimeStampedModel):
         verbose_name = 'iThenticate Report'
         verbose_name_plural = 'iThenticate Reports'
 
+    def __str__(self):
+        """Summerize the iThenticateReport's meta information."""
+        _str = 'Report {doc_id}'.format(doc_id=self.doc_id)
+        if hasattr(self, 'to_submission'):
+            _str += ' on Submission {arxiv}'.format(
+                arxiv=self.to_submission.arxiv_identifier_w_vn_nr)
+        return _str
+
+    def save(self, *args, **kwargs):
+        """Update the Submission's latest update timestamp on update."""
+        obj = super().save(*args, **kwargs)
+        if hasattr(self, 'to_submission') and kwargs.get('commit', True):
+            self.to_submission.touch()
+        return obj
+
     def get_absolute_url(self):
+        """Return url of the plagiarism detail page."""
         if hasattr(self, 'to_submission'):
-            return reverse('submissions:plagiarism', kwargs={
-                            'arxiv_identifier_w_vn_nr':
-                            self.to_submission.arxiv_identifier_w_vn_nr})
-        return None
+            return reverse(
+                'submissions:plagiarism',
+                kwargs={'arxiv_identifier_w_vn_nr': self.to_submission.arxiv_identifier_w_vn_nr})
+        return ''
 
     def get_report_url(self):
-        """
-        Request new read-only url from iThenticate and return.
+        """Request and return new read-only url from the iThenticate API.
 
         Note: The read-only link is valid for only 15 minutes, saving may be worthless
         """
@@ -711,19 +810,7 @@ class iThenticateReport(TimeStampedModel):
         plagiarism = iThenticate()
         return plagiarism.get_url(self.part_id)
 
-    def __str__(self):
-        _str = 'Report {doc_id}'.format(doc_id=self.doc_id)
-        if hasattr(self, 'to_submission'):
-            _str += ' on Submission {arxiv}'.format(
-                        arxiv=self.to_submission.arxiv_identifier_w_vn_nr)
-        return _str
-
-    def save(self, *args, **kwargs):
-        obj = super().save(*args, **kwargs)
-        if hasattr(self, 'to_submission') and kwargs.get('commit', True):
-            self.to_submission.touch()
-        return obj
-
     @property
     def score(self):
+        """Return the iThenticate score returned by their API as saved in the database."""
         return self.percent_match
diff --git a/submissions/plagiarism.py b/submissions/plagiarism.py
index ef08622621274f5cc13275c68b5ba6f715675e6c..96aa68e46eafc76c525b6c0bfb00451ffe93d7da 100644
--- a/submissions/plagiarism.py
+++ b/submissions/plagiarism.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf import settings
 
 from .exceptions import InvalidDocumentError
diff --git a/submissions/search_indexes.py b/submissions/search_indexes.py
index 688fb64113e70a7e4b1c255772acd30d538019c2..80f1cd4ad361278cd48e4fcfd767b3325f3d80e4 100644
--- a/submissions/search_indexes.py
+++ b/submissions/search_indexes.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # import datetime
 
 from haystack import indexes
diff --git a/submissions/signals.py b/submissions/signals.py
index be833cb833d351eab88e1d0d384e638ef4992762..e8e3b3fbe4852883e43ff62e596f768874aa7129 100644
--- a/submissions/signals.py
+++ b/submissions/signals.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib.auth.models import User, Group
 
 from notifications.constants import NOTIFICATION_REFEREE_DEADLINE, NOTIFICATION_REFEREE_OVERDUE
@@ -85,3 +89,17 @@ def notify_invitation_overdue(sender, instance, created, **kwargs):
                         verb=(' would like to remind you that your Refereeing Task is overdue, '
                               'please submit your Report'),
                         target=instance.submission, type=NOTIFICATION_REFEREE_OVERDUE)
+
+
+def notify_manuscript_accepted(sender, instance, created, **kwargs):
+    """
+    Notify authors about their manuscript decision.
+
+    instance --- Submission
+    """
+    college = Group.objects.get(name='Editorial College')
+    authors = User.objects.filter(contributor__submissions=instance)
+    for user in authors:
+        notify.send(sender=sender, recipient=user, actor=college,
+                    verb=' has accepted your manuscript for publication.',
+                    target=instance)
diff --git a/submissions/templates/partials/submissions/arxiv_queryresult.html b/submissions/templates/partials/submissions/arxiv_queryresult.html
new file mode 100644
index 0000000000000000000000000000000000000000..b6cb2a65fb2af2b3ad5d0c36306ce6db5f622542
--- /dev/null
+++ b/submissions/templates/partials/submissions/arxiv_queryresult.html
@@ -0,0 +1,12 @@
+<div class="card-body">
+    <h3 class="card-title">{{ item.title }}</h3>
+    <div class="card-text">
+        <div class="authors mb-2" id="arxiv_authors_{{ id }}" style="display: none;">
+            {% for author in item.authors %}
+                {{ author.name }}{% if not forloop.last %},{% endif %}
+            {% endfor %}
+        </div>
+        <a href="javascript:;" data-toggle="toggle" data-target="#arxiv_authors_{{ id }}">Toggle authors</a> &middot; <a href="{{ item.link }}" target="_blank">{{ item.id }}</a>
+    </div>
+    <p class="card-text text-muted">Published: {{ item.published }}</p>
+</div>
diff --git a/submissions/templates/submissions/_assignment_info.html b/submissions/templates/partials/submissions/pool/assignment_info.html
similarity index 100%
rename from submissions/templates/submissions/_assignment_info.html
rename to submissions/templates/partials/submissions/pool/assignment_info.html
diff --git a/submissions/templates/submissions/_editorial_communication_content.html b/submissions/templates/partials/submissions/pool/editorial_communication_content.html
similarity index 100%
rename from submissions/templates/submissions/_editorial_communication_content.html
rename to submissions/templates/partials/submissions/pool/editorial_communication_content.html
diff --git a/submissions/templates/submissions/_submission_refereeing_invitations.html b/submissions/templates/partials/submissions/pool/referee_invitations.html
similarity index 100%
rename from submissions/templates/submissions/_submission_refereeing_invitations.html
rename to submissions/templates/partials/submissions/pool/referee_invitations.html
diff --git a/submissions/templates/submissions/_submission_refereeing_status.html b/submissions/templates/partials/submissions/pool/referee_invitations_status.html
similarity index 100%
rename from submissions/templates/submissions/_submission_refereeing_status.html
rename to submissions/templates/partials/submissions/pool/referee_invitations_status.html
diff --git a/submissions/templates/submissions/_required_actions_block.html b/submissions/templates/partials/submissions/pool/required_actions_block.html
similarity index 100%
rename from submissions/templates/submissions/_required_actions_block.html
rename to submissions/templates/partials/submissions/pool/required_actions_block.html
diff --git a/submissions/templates/partials/submissions/pool/submission_assignment_request.html b/submissions/templates/partials/submissions/pool/submission_assignment_request.html
index 4a96fa72d300958b7de5768b244a8ccd0ba72349..c45ae8abcf11bcdf3adc81eb94cabe79aacc6321 100644
--- a/submissions/templates/partials/submissions/pool/submission_assignment_request.html
+++ b/submissions/templates/partials/submissions/pool/submission_assignment_request.html
@@ -1,7 +1,7 @@
 {% load bootstrap %}
 
 
-{% include 'submissions/_submission_summary.html' with submission=assignment.submission %}
+{% include 'partials/submissions/submission_summary.html' with submission=assignment.submission show_abstract=1 %}
 
 <h2 class="highlight">Accept or Decline this Assignment</h2>
 <h3 class="mb-2">By accepting, you will be required to start a refereeing round on the next screen.</h3>
diff --git a/submissions/templates/submissions/_form_submission_cycle_choice.html b/submissions/templates/partials/submissions/pool/submission_cycle_choice_form.html
similarity index 100%
rename from submissions/templates/submissions/_form_submission_cycle_choice.html
rename to submissions/templates/partials/submissions/pool/submission_cycle_choice_form.html
diff --git a/submissions/templates/partials/submissions/pool/submission_details.html b/submissions/templates/partials/submissions/pool/submission_details.html
index 766d9c28591f67b1a6b8aa8b0a9e760197b49da2..bc0e006926e75d812324d4f9a9f33afdd495c099 100644
--- a/submissions/templates/partials/submissions/pool/submission_details.html
+++ b/submissions/templates/partials/submissions/pool/submission_details.html
@@ -26,7 +26,7 @@
     <div>
         <h3>Remarks on this submission:</h3>
         {% if remark_form %}
-            {% include 'submissions/_remark_add_form.html' with submission=submission form=remark_form auto_show=1 %}
+            {% include 'partials/submissions/remark_form.html' with submission=submission form=remark_form auto_show=1 %}
         {% endif %}
         <p class="mb-1">Current remarks:</p>
         <ul>
@@ -39,7 +39,7 @@
 
         {% if is_editor_in_charge or is_editorial_admin or submission|is_voting_fellow:request.user %}
             <br>
-            {% include 'submissions/_required_actions_block.html' with submission=submission %}
+            {% include 'partials/submissions/pool/required_actions_block.html' with submission=submission %}
             <h4>
                 <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a>
             </h4>
@@ -56,7 +56,7 @@
                     <li>EIC Assignment requests:</li>
                     <ul class="pl-3">
                         {% for assignment in submission.editorial_assignments.all %}
-                            {% include 'submissions/_assignment_info.html' with assignment=assignment %}
+                            {% include 'partials/submissions/pool/assignment_info.html' with assignment=assignment %}
                         {% empty %}
                             <li>No assignment requests have been sent</li>
                         {% endfor %}
@@ -94,14 +94,14 @@
                 {# Accepted submission actions #}
                 {% if submission.status == 'accepted' %}
                     <li><a href="{% url 'submissions:treated_submission_pdf_compile' submission.arxiv_identifier_w_vn_nr %}">Update the Refereeing Package pdf</a></li>
-                    <li>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</li>
+                    <li><a href="{% url 'journals:update_publication' submission.arxiv_identifier_w_vn_nr %}">Draft Publication</a></li>
                 {% endif %}
 
             </ul>
 
             <h3>Events</h3>
             <div id="eventslist">
-                {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %}
+                {% include 'partials/submissions/submission_events.html' with events=submission.events.for_eic %}
             </div>
         {% endif %}
     </div>
diff --git a/submissions/templates/submissions/_recommendation_author_content.html b/submissions/templates/partials/submissions/recommendation_author_content.html
similarity index 100%
rename from submissions/templates/submissions/_recommendation_author_content.html
rename to submissions/templates/partials/submissions/recommendation_author_content.html
diff --git a/submissions/templates/submissions/_recommendation_fellow_content.html b/submissions/templates/partials/submissions/recommendation_fellow_content.html
similarity index 88%
rename from submissions/templates/submissions/_recommendation_fellow_content.html
rename to submissions/templates/partials/submissions/recommendation_fellow_content.html
index e2e3926a7571e729e8b1f8683e479bd170862049..996767c3adf52f649d24f4b15f4fdfca6192e16e 100644
--- a/submissions/templates/submissions/_recommendation_fellow_content.html
+++ b/submissions/templates/partials/submissions/recommendation_fellow_content.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_recommendation_author_content.html' %}
+{% extends 'partials/submissions/recommendation_author_content.html' %}
 
 {% block recommendation_header %}
     <h3 class="card-title text-muted mb-3">By {{recommendation.submission.editor_in_charge.get_title_display}} {{recommendation.submission.editor_in_charge.user.first_name}} {{recommendation.submission.editor_in_charge.user.last_name}}, formulated on {{recommendation.date_submitted}}</h3>
diff --git a/submissions/templates/submissions/_refereeing_pack_tex_template.html b/submissions/templates/partials/submissions/refereeing_pack_tex_template.html
similarity index 100%
rename from submissions/templates/submissions/_refereeing_pack_tex_template.html
rename to submissions/templates/partials/submissions/refereeing_pack_tex_template.html
diff --git a/submissions/templates/submissions/_remark_add_form.html b/submissions/templates/partials/submissions/remark_form.html
similarity index 69%
rename from submissions/templates/submissions/_remark_add_form.html
rename to submissions/templates/partials/submissions/remark_form.html
index f2872b2a19755ab5d12e5f230171d049ad97a865..5144eea030929d0ba91b890bb7684da2b10c23c5 100644
--- a/submissions/templates/submissions/_remark_add_form.html
+++ b/submissions/templates/partials/submissions/remark_form.html
@@ -20,15 +20,15 @@ $(document).ready(function(){
     <form action="{% url 'submissions:add_remark' submission.arxiv_identifier_w_vn_nr %}" method="post" class="pb-2">
         {% csrf_token %}
         {{ form|bootstrap:'0,12' }}
-        <input class="btn btn-secondary" type="submit" value="Submit" />
+        <input class="btn btn-outline-secondary" type="submit" value="Submit" />
     </form>
 {% else %}
-    <button class="btn btn-secondary mb-2" data-toggle="toggle" data-target="#remarkForm{{ submission.id }}" id="remarkButton{{ submission.id }}">Add a remark on this Submission</button>
+    <button class="btn btn-outline-secondary mb-2" data-toggle="toggle" data-target="#remarkForm{{ submission.id }}" id="remarkButton{{ submission.id }}">Add a remark on this Submission</button>
     <div class="submitRemarkForm pb-2" id="remarkForm{{ submission.id }}" style="display:none;">
         <form action="{% url 'submissions:add_remark' submission.arxiv_identifier_w_vn_nr %}" method="post">
             {% csrf_token %}
             {{ form|bootstrap:'0,12' }}
-            <input class="btn btn-secondary" type="submit" value="Submit" />
+            <input class="btn btn-outline-secondary" type="submit" value="Submit" />
         </form>
     </div>
 {% endif %}
diff --git a/submissions/templates/submissions/_single_report_content.html b/submissions/templates/partials/submissions/report_content.html
similarity index 92%
rename from submissions/templates/submissions/_single_report_content.html
rename to submissions/templates/partials/submissions/report_content.html
index b9f945df58a9ddf98e1963cdfa8aaa9f4f1fd10c..a93c921270cdc2ca611d13804c7985cd26094d1c 100644
--- a/submissions/templates/submissions/_single_report_content.html
+++ b/submissions/templates/partials/submissions/report_content.html
@@ -34,4 +34,4 @@
     </div>
 {% endif %}
 
-{% include 'submissions/_single_report_ratings.html' with report=report %}
+{% include 'partials/submissions/report_ratings.html' with report=report %}
diff --git a/submissions/templates/partials/submissions/report_preview.html b/submissions/templates/partials/submissions/report_preview.html
new file mode 100644
index 0000000000000000000000000000000000000000..e783a89efc1158f052c6f4de207cc359c46f4e9f
--- /dev/null
+++ b/submissions/templates/partials/submissions/report_preview.html
@@ -0,0 +1,44 @@
+<h3 class="mb-4">Preview of your report as it will publicly be shown</h3>
+
+<div class="report report-preview">
+    <div class="reportid">
+        <h3><span data-receive="report-identity"><span if-anonymous="true" style="display: none;">Anonymous</span><span if-anonymous="false" style="display: none;">{{ request.user.first_name }} {{ request.user.last_name }}</span> on <span data-receive="report-date">{% now "SHORT_DATE_FORMAT" %}</span></h3>
+    </div>
+
+    <div class="row">
+        <div class="col">
+            <h3 class="highlight tight">Strengths</h3>
+            <div class="pl-md-4"><p data-receive="report-strengths"></p></div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col">
+            <h3 class="highlight tight">Weaknesses</h3>
+            <div class="pl-md-4"><p data-receive="report-weaknesses"></p></div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col">
+            <h3 class="highlight tight">Report</h3>
+            <div class="pl-md-4"><p data-receive="report-report"></p></div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col">
+            <h3 class="highlight tight">Requested changes</h3>
+            <div class="pl-md-4"><p data-receive="report-requested_changes"></p></div>
+        </div>
+    </div>
+
+    <div class="ratings">
+        <ul>
+            <li>validity: <span data-receive="report-validity"></span></li>
+            <li>significance: <span data-receive="report-significance"></span></li>
+            <li>originality: <span data-receive="report-originality"></span></li>
+            <li>clarity: <span data-receive="report-clarity"></span></li>
+            <li>formatting: <span data-receive="report-formatting"></span></li>
+            <li>grammar: <span data-receive="report-grammar"></span></li>
+        </ul>
+    </div>
+
+</div>
diff --git a/submissions/templates/submissions/_single_public_report.html b/submissions/templates/partials/submissions/report_public.html
similarity index 87%
rename from submissions/templates/submissions/_single_public_report.html
rename to submissions/templates/partials/submissions/report_public.html
index c39fcdc22220cb2a003b96a637c94a49f6f19fca..68e18f4cff19509ebbe58837df602f486d60bfcf 100644
--- a/submissions/templates/submissions/_single_public_report.html
+++ b/submissions/templates/partials/submissions/report_public.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_single_public_report_without_comments.html' %}
+{% extends 'partials/submissions/report_public_without_comments.html' %}
 
 {% block single_report_footer %}
     {% if user.is_authenticated and perms.scipost.can_submit_comments %}
diff --git a/submissions/templates/submissions/_single_public_report_without_comments.html b/submissions/templates/partials/submissions/report_public_without_comments.html
similarity index 97%
rename from submissions/templates/submissions/_single_public_report_without_comments.html
rename to submissions/templates/partials/submissions/report_public_without_comments.html
index af833812c9e19c8bba2d595264b754c305a2b92e..9555c67c431dcabe7495f5bb1b48ef030249c6c8 100644
--- a/submissions/templates/submissions/_single_public_report_without_comments.html
+++ b/submissions/templates/partials/submissions/report_public_without_comments.html
@@ -47,7 +47,7 @@
                     </div>
                 </div>
 
-                {% include 'submissions/_single_report_content.html' with report=report %}
+                {% include 'partials/submissions/report_content.html' with report=report %}
 
                 <div class="row">
                     <div class="col-12">
@@ -93,7 +93,7 @@
                     {% endif %}
                 </div>
 
-                {% include 'submissions/_single_report_content.html' with report=report %}
+                {% include 'partials/submissions/report_content.html' with report=report %}
             {% endif %}
 
             {% block single_report_footer %}{% endblock %}
diff --git a/submissions/templates/submissions/_single_report_ratings.html b/submissions/templates/partials/submissions/report_ratings.html
similarity index 100%
rename from submissions/templates/submissions/_single_report_ratings.html
rename to submissions/templates/partials/submissions/report_ratings.html
diff --git a/submissions/templates/submissions/_single_report_card_summary.html b/submissions/templates/partials/submissions/report_summary.html
similarity index 100%
rename from submissions/templates/submissions/_single_report_card_summary.html
rename to submissions/templates/partials/submissions/report_summary.html
diff --git a/submissions/templates/submissions/_report_tex_template.html b/submissions/templates/partials/submissions/report_tex_template.html
similarity index 100%
rename from submissions/templates/submissions/_report_tex_template.html
rename to submissions/templates/partials/submissions/report_tex_template.html
diff --git a/submissions/templates/partials/submissions/submission_card_content.html b/submissions/templates/partials/submissions/submission_card_content.html
index aa9128c75d3e9ac2f5ff0e87f181f13e5c4bcceb..6d85c8e89df696506f0bb331158aa91b377d6796 100644
--- a/submissions/templates/partials/submissions/submission_card_content.html
+++ b/submissions/templates/partials/submissions/submission_card_content.html
@@ -1,11 +1,11 @@
-{% include 'partials/submissions/submission_title.html' with submission=submission %}
+{% extends 'partials/submissions/submission_li.html' %}
 
 {% block card_footer %}
-    <p class="text-muted mb-0">
+    <p class="meta">
         Version {{ submission.arxiv_vn_nr }} ({% if submission.is_current %}current version{% else %}deprecated version {{ submission.arxiv_vn_nr }}{% endif %})
         <br>
-        {% if submission.publication %}
-            Published as <a href="{{ submission.publication.get_absolute_url }}">{{ submission.publication.in_issue.in_volume.in_journal.get_abbreviation_citation }} <strong>{{ submission.publication.in_issue.in_volume.number }}</strong>, {{ submission.publication.get_paper_nr }} ({{ submission.publication.publication_date|date:'Y' }})</a>
+        {% if submission.publication and submission.publication.is_published %}
+            Published as <a href="{{ submission.publication.get_absolute_url }}">{{ submission.publication.in_issue.in_volume.in_journal.abbreviation_citation }} <strong>{{ submission.publication.in_issue.in_volume.number }}</strong>, {{ submission.publication.get_paper_nr }} ({{ submission.publication.publication_date|date:'Y' }})</a>
         {% else %}
             Submitted {{ submission.submission_date }} to {{ submission.get_submitted_to_journal_display }}
         {% endif %} &middot; latest activity: {{ submission.latest_activity }}
diff --git a/submissions/templates/partials/submissions/submission_card_content_homepage.html b/submissions/templates/partials/submissions/submission_card_content_homepage.html
index 8a0ba52f29bbe99148348e51435ef6e926cfd1a8..18dac36ba2e7bd46f4829e9c6e25cf2bac0540c8 100644
--- a/submissions/templates/partials/submissions/submission_card_content_homepage.html
+++ b/submissions/templates/partials/submissions/submission_card_content_homepage.html
@@ -1,7 +1,7 @@
 {% extends 'partials/submissions/submission_card_content.html' %}
 
 {% block card_footer %}
-    <div class="text-muted mb-0">
+    <div class="meta">
         Submitted {{submission.submission_date}} to {{submission.get_submitted_to_journal_display}}</span>
     </div>
 {% endblock %}
diff --git a/submissions/templates/submissions/submission_event_list.html b/submissions/templates/partials/submissions/submission_events.html
similarity index 100%
rename from submissions/templates/submissions/submission_event_list.html
rename to submissions/templates/partials/submissions/submission_events.html
diff --git a/submissions/templates/submissions/submission_event_list_general.html b/submissions/templates/partials/submissions/submission_events_explicit.html
similarity index 100%
rename from submissions/templates/submissions/submission_event_list_general.html
rename to submissions/templates/partials/submissions/submission_events_explicit.html
diff --git a/submissions/templates/partials/submissions/submission_li.html b/submissions/templates/partials/submissions/submission_li.html
new file mode 100644
index 0000000000000000000000000000000000000000..c0202ef2b1bb890db63491bf6f117dbe91c77d1f
--- /dev/null
+++ b/submissions/templates/partials/submissions/submission_li.html
@@ -0,0 +1,6 @@
+<div class="li submission">
+    <h5 class="subject">{{ submission.get_subject_area_display }}</h5>
+    <h3 class="title"><a href="{{ submission.get_absolute_url }}">{{ submission.title }}</a></h3>
+    <p class="authors">by {{ submission.author_list }}</p>
+    {% block card_footer %}{% endblock %}
+</div>
diff --git a/submissions/templates/partials/submissions/submission_status.html b/submissions/templates/partials/submissions/submission_status.html
new file mode 100644
index 0000000000000000000000000000000000000000..2f3e16e7fbf6782fdb84023c6dbfb5c10fccc770
--- /dev/null
+++ b/submissions/templates/partials/submissions/submission_status.html
@@ -0,0 +1,15 @@
+<div class="submission status">
+    <h6 class="prefix">Current status:</h6>
+    <div class="status">
+        <span class="label label-secondary">{{submission.get_status_display}}</span>
+        {% if submission.publication and submission.publication.is_published %}
+            as <a href="{{submission.publication.get_absolute_url}}">
+                {% if submission.publication.in_issue %}
+                    {{submission.publication.in_issue.in_volume.in_journal.abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}}
+                {% else %}
+                    {{submission.publication.in_journal.abbreviation_citation}}, {{submission.publication.paper_nr}}
+                {% endif %}
+                ({{submission.publication.publication_date|date:'Y'}})</a>
+        {% endif %}
+    </div>
+</div>
diff --git a/submissions/templates/submissions/_submission_summary_short.html b/submissions/templates/partials/submissions/submission_summary.html
similarity index 80%
rename from submissions/templates/submissions/_submission_summary_short.html
rename to submissions/templates/partials/submissions/submission_summary.html
index ff72a5fc218c790d1c9300e8def634a897876246..427d36973ac5380c969af0418e26df2e96a7283c 100644
--- a/submissions/templates/submissions/_submission_summary_short.html
+++ b/submissions/templates/partials/submissions/submission_summary.html
@@ -54,4 +54,12 @@
     </tr>
 </table>
 
-{% block submission_summary_footer %}{% endblock %}
+{% if show_abstract %}
+    {% if submission.pdf_refereeing_pack %}
+        <p class="mt-3">
+            <a href="{% url 'submissions:refereeing_package_pdf' submission.arxiv_identifier_w_vn_nr %}" target="_blank" class="btn btn-outline-primary">Download Refereeing Package</a>
+        </p>
+    {% endif %}
+    <h3 class="mt-3">Abstract</h3>
+    <p>{{submission.abstract}}</p>
+{% endif %}
diff --git a/submissions/templates/partials/submissions/submission_title.html b/submissions/templates/partials/submissions/submission_title.html
deleted file mode 100644
index 8545ab7f5dbc8a51a5521c6139ad7f24183deb04..0000000000000000000000000000000000000000
--- a/submissions/templates/partials/submissions/submission_title.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="submission_title">
-    <h5 class="pb-0 subject_area">{{ submission.get_subject_area_display }}</h5>
-    <h3 class="card-title mb-0 submisssion_title">
-        <a href="{{ submission.get_absolute_url }}">{{ submission.title }}</a>
-    </h3>
-    <p class="mb-3 author_list">by {{ submission.author_list }}</p>
-</div>
diff --git a/submissions/templates/partials/submissions/submission_version.html b/submissions/templates/partials/submissions/submission_version.html
new file mode 100644
index 0000000000000000000000000000000000000000..a06f0aac66da95cea0278d8e4a1500a10d43b032
--- /dev/null
+++ b/submissions/templates/partials/submissions/submission_version.html
@@ -0,0 +1,10 @@
+<div class="py-1">
+    <a href="{{submission.get_absolute_url}}" class="pubtitleli">version {{submission.arxiv_vn_nr}}</a>
+    <span class="version-suffix">
+        {% if submission.is_current %}
+            (current version)
+        {% else %}
+            (deprecated version {{submission.arxiv_vn_nr}})
+        {% endif %}
+    </span>
+</div>
diff --git a/submissions/templates/submissions/_arxiv_queryresult.html b/submissions/templates/submissions/_arxiv_queryresult.html
deleted file mode 100644
index 5f2ad667f742f9c0ea66a2915602b3fde1172c26..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_arxiv_queryresult.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<div class="card-body">
-    <h3 class="card-title">{{ item.title }}</h3>
-    <div class="card-text">
-        {% for author in item.authors %}
-            {{ author.name }}{% if not forloop.last %},{% endif %}
-        {% endfor %}
-        - <a href="{{ item.id }}" target="_blank">{{ item.id }}</a>
-    </div>
-    <p class="card-text text-muted">Published: {{ item.published }}</p>
-</div>
diff --git a/submissions/templates/submissions/_pool_base.html b/submissions/templates/submissions/_pool_base.html
deleted file mode 100644
index f2c5074cef8ced37641ffbf53c052ccf2cf9329f..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_pool_base.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% extends 'scipost/base.html' %}
-
-{% block breadcrumb %}
-    <div class="container-outside header">
-        <div class="container">
-            <nav class="breadcrumb hidden-sm-down">
-                {% block breadcrumb_items %}
-                    <a href="{% url 'scipost:personal_page' %}" class="breadcrumb-item">Personal Page</a>
-                {% endblock %}
-            </nav>
-        </div>
-    </div>
-{% endblock %}
diff --git a/submissions/templates/submissions/_submission_card_base.html b/submissions/templates/submissions/_submission_card_base.html
deleted file mode 100644
index 1d3be2c52c30e32892f05b473ad70a2ce46991b3..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_submission_card_base.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<div class="submission_title">
-    <h5 class="pb-0">{{submission.get_subject_area_display}}</h5>
-    <h3 class="card-title {% block title_class_block %}{% endblock %}">
-        <a href="{{submission.get_absolute_url}}">{{submission.title}}</a>
-    </h3>
-</div>
-
-{% block card_block_footer %}{% endblock %}
diff --git a/submissions/templates/submissions/_submission_card_in_pool.html b/submissions/templates/submissions/_submission_card_in_pool.html
deleted file mode 100644
index cd69c1f89a6cc73f5e9862b197b9ccf7c96ef382..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_submission_card_in_pool.html
+++ /dev/null
@@ -1,63 +0,0 @@
-{% load guardian_tags %}
-{% load scipost_extras %}
-{% load submissions_extras %}
-{% load user_groups %}
-
-{% is_editor_in_charge request.user submission as is_editor_in_charge %}
-{% is_edcol_admin request.user as is_editorial_admin %}
-
-{# !! TODO: Remove this template as soon as new pool in active !! #}
-
-<div class="card-body px-0">
-    {% include 'partials/submissions/submission_title.html' with submission=submission %}
-    {% include 'partials/submissions/pool/submission_info_table.html' with submission=submission %}
-</div>
-
-<div class="card-body">
-    {% if submission.remarks.all %}
-        <h4>Remarks on this submission:</h4>
-        <ul>
-          {% for rem in submission.remarks.all %}
-              {% include 'scipost/_remark_li.html' with remark=rem %}
-          {% endfor %}
-        </ul>
-    {% endif %}
-
-    {% if remark_form %}
-        {% include 'submissions/_remark_add_form.html' with submission=submission form=remark_form %}
-    {% endif %}
-
-    {% if is_editor_in_charge or is_editorial_admin %}
-        {% include 'submissions/_required_actions_block.html' with submission=submission %}
-        <h4>
-            <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a>
-        </h4>
-    {% endif %}
-
-    {% if perms.scipost.can_assign_submissions %}
-        {% if submission.editorial_assignments.exists %}
-            <h4>EIC Assignment requests:</h4>
-            <ul>
-              {% for assignment in submission.editorial_assignments.all %}
-                  {% include 'submissions/_assignment_info.html' with assignment=assignment %}
-              {% endfor %}
-            </ul>
-        {% endif %}
-        {% if submission.editor_in_charge == None %}
-            <h4>Actions:</h4>
-            <ul>
-              <li><a href="{% url 'submissions:assign_submission' submission.arxiv_identifier_w_vn_nr %}">Send a new assignment request</a></li>
-              <li><a href="{% url 'submissions:assignment_failed' submission.arxiv_identifier_w_vn_nr %}">Close pre-screening: failure to find EIC</a></li>
-            </ul>
-        {% endif %}
-    {% endif %}
-
-    {% if is_editorial_admin %}
-        <h4>
-            <a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}">Send a communication to the Editor-in-charge</a>
-        </h4>
-        {% if submission.status == 'accepted' %}
-            <h4>After proofs have been accepted, you can <a href="{% url 'journals:initiate_publication' %}">initiate the publication process</a> (leads to the validation page)</h4>
-        {% endif %}
-    {% endif %}
-</div>
diff --git a/submissions/templates/submissions/_submission_status_block.html b/submissions/templates/submissions/_submission_status_block.html
deleted file mode 100644
index f4812d1d3a9a41215a6f8d8c637707088e4d4e41..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_submission_status_block.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<h4 class="d-inline-block">Current status:</h4>
-<div class="d-inline">
-    <span class="label label-secondary">{{submission.get_status_display}}</span>
-    {% if submission.publication %}
-        as <a href="{{submission.publication.get_absolute_url}}">{{submission.publication.in_issue.in_volume.in_journal.get_abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}} ({{submission.publication.publication_date|date:'Y'}})</a>
-    {% endif %}
-</div>
diff --git a/submissions/templates/submissions/_submission_summary.html b/submissions/templates/submissions/_submission_summary.html
deleted file mode 100644
index 613cc023ff67d310dc160c307b72ce562be694b6..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_submission_summary.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'submissions/_submission_summary_short.html' %}
-
-{% block submission_summary_footer %}
-    {% if submission.pdf_refereeing_pack %}
-        <p class="mt-3">
-            <a href="{% url 'submissions:refereeing_package_pdf' submission.arxiv_identifier_w_vn_nr %}" target="_blank" class="btn btn-outline-primary">Download Refereeing Package</a>
-        </p>
-    {% endif %}
-    <h3 class="mt-3">Abstract</h3>
-    <p>{{submission.abstract}}</p>
-{% endblock %}
diff --git a/submissions/templates/submissions/_submission_version.html b/submissions/templates/submissions/_submission_version.html
deleted file mode 100644
index f32d7c5f22928d60fcdd2a22371be9f32671b782..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/_submission_version.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<div class="py-1">
-    {% if editorial_page %}
-        <a href="{% url 'submissions:editorial_page' submission.arxiv_identifier_w_vn_nr %}" class="pubtitleli">version {{submission.arxiv_vn_nr}}</a>
-    {% else %}
-        <a href="{{submission.get_absolute_url}}" class="pubtitleli">version {{submission.arxiv_vn_nr}}</a>
-    {% endif %}
-    <span class="version-suffix">
-        {% if submission.is_current %}
-            (current version)
-        {% else %}
-            (deprecated version {{submission.arxiv_vn_nr}})
-        {% endif %}
-    </span>
-</div>
diff --git a/submissions/templates/submissions/assignment_failed.html b/submissions/templates/submissions/admin/editorial_assignment_failed.html
similarity index 100%
rename from submissions/templates/submissions/assignment_failed.html
rename to submissions/templates/submissions/admin/editorial_assignment_failed.html
diff --git a/submissions/templates/submissions/assign_submission.html b/submissions/templates/submissions/admin/editorial_assignment_form.html
similarity index 50%
rename from submissions/templates/submissions/assign_submission.html
rename to submissions/templates/submissions/admin/editorial_assignment_form.html
index 54574a668dbc3eee84644aaf5253beea98d93e53..0761db76ba37f126cea40b4f53ae96df497623da 100644
--- a/submissions/templates/submissions/assign_submission.html
+++ b/submissions/templates/submissions/admin/editorial_assignment_form.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_pool_base.html' %}
+{% extends 'submissions/pool/base.html' %}
 
 {% load bootstrap %}
 
@@ -19,7 +19,7 @@
     </div>
 </div>
 
-{% include 'submissions/_submission_summary.html' with submission=submission_to_assign %}
+{% include 'partials/submissions/submission_summary.html' with submission=submission_to_assign show_abstract=1 %}
 
 <div class="row">
     <div class="col-12">
@@ -33,7 +33,7 @@
           <p>{{ submission_to_assign.referees_flagged }}</p>
       {% endif %}
 
-      {% include 'submissions/_submission_status_block.html' with submission=submission_to_assign %}
+      {% include 'partials/submissions/submission_status.html' with submission=submission_to_assign %}
     </div>
 </div>
 
@@ -44,7 +44,7 @@
           <h3>If more than 5 Fellows have declined an assignment for a red-marked reason, the Submission should be rejected.</h3>
           <ul>
             {% for assignment in sub.editorial_assignments.all %}
-                {% include 'submissions/_assignment_info.html' with assignment=assignment %}
+                {% include 'partials/submissions/pool/assignment_info.html' with assignment=assignment %}
             {% endfor %}
           </ul>
       {% endif %}
@@ -57,9 +57,43 @@
       <form action="{% url 'submissions:assign_submission' arxiv_identifier_w_vn_nr=submission_to_assign.arxiv_identifier_w_vn_nr %}" method="post">
         {% csrf_token %}
         {{ form|bootstrap }}
-        <input class="btn btn-secondary" type="submit" value="Submit" />
+        <input class="btn btn-outline-secondary" type="submit" value="Submit" />
       </form>
     </div>
 </div>
 
+
+<div class="row">
+    <div class="col-12">
+        {% if coauthorships %}
+            <div class="card card-outline-danger">
+                <div class="card-body">
+                    <h3 class="card-title text-danger">The system identified the following potential coauthorships (from arXiv database)</h3>
+                    <p class="card-text text-danger">(only up to 5 most recent shown; if within the last 3 years, referee is disqualified):</p>
+                </div>
+                <div class="card-body">
+                    <ul class="list-group list-group-flush">
+                        {% for author, entries in coauthorships.items %}
+                            <li class="list-group-item pt-3">
+                                <div class="card-content">
+                                    <h3>For Fellow: {{ author }}</h3>
+                                </div>{{ value}}
+                            </li>
+                            {% for entry in entries %}
+                                <li class="list-group-item">
+                                    {% include 'partials/submissions/arxiv_queryresult.html' with item=entry id=forloop.counter %}
+                                </li>
+                            {% endfor %}
+                        {% endfor %}
+                    </ul>
+                </div>
+            </div>
+        {% else %}
+            <h3 class="text-success">The system has not identified any coauthorships (from arXiv database)</h3>
+        {% endif %}
+    </div>
+</div>
+
+
+
 {% endblock %}
diff --git a/submissions/templates/submissions/admin/recommendation_prepare_for_voting.html b/submissions/templates/submissions/admin/recommendation_prepare_for_voting.html
index 86e795e657b8447e3b5aec0b851337701c105d4d..8f9b0781085769edc12de0b7bf0536852e1bd677 100644
--- a/submissions/templates/submissions/admin/recommendation_prepare_for_voting.html
+++ b/submissions/templates/submissions/admin/recommendation_prepare_for_voting.html
@@ -14,11 +14,11 @@
 
 <h1 class="highlight">Prepare Editorial Recommendation for Voting</h1>
 
-{% include 'partials/submissions/submission_title.html' with submission=recommendation.submission %}
+{% include 'partials/submissions/submission_li.html' with submission=recommendation.submission %}
 {% include 'partials/submissions/pool/submission_info_table.html' with submission=recommendation.submission %}
 
 <br>
-{% include 'submissions/_recommendation_fellow_content.html' with recommendation=recommendation %}
+{% include 'partials/submissions/recommendation_fellow_content.html' with recommendation=recommendation %}
 
 {% if recommendation.submission.referees_flagged %}
     <br>
@@ -56,15 +56,15 @@
                 </div>
                 <div class="card-body">
                     <ul class="list-group list-group-flush">
-                        {% for key, value in coauthorships.items %}
+                        {% for author, entries in coauthorships.items %}
                             <li class="list-group-item pt-3">
                                 <div class="card-content">
-                                    <h3>For Fellow {{key}}:</h3>
-                                </div>
+                                    <h3>For Fellow: {{ author }}</h3>
+                                </div>{{ value}}
                             </li>
-                            {% for entry in value.entries %}
+                            {% for entry in entries %}
                                 <li class="list-group-item">
-                                    {% include 'submissions/_arxiv_queryresult.html' with item=entry %}
+                                    {% include 'partials/submissions/arxiv_queryresult.html' with item=entry id=forloop.counter %}
                                 </li>
                             {% endfor %}
                         {% endfor %}
diff --git a/submissions/templates/submissions/admin/refereeing_overview.html b/submissions/templates/submissions/admin/refereeing_overview.html
index 398e14c535879434ed3fae731fc7bc8ba1e88f87..2c71d7884dd078f6fd4c342208b92995ba83646e 100644
--- a/submissions/templates/submissions/admin/refereeing_overview.html
+++ b/submissions/templates/submissions/admin/refereeing_overview.html
@@ -27,11 +27,11 @@
         	    Refereeing deadline: {{ submission.reporting_deadline }}<br>
                 <br>
         	    Refereeing status summary:<br>
-            	{% include 'submissions/_submission_refereeing_status.html' with submission=submission %}
+            	{% include 'partials/submissions/pool/referee_invitations_status.html' with submission=submission %}
             </div>
 
             <p class="mb-2">Detail of refereeing invitations:</p>
-        	{% include 'submissions/_submission_refereeing_invitations.html' with submission=submission invitations=submission.referee_invitations.all %}
+        	{% include 'partials/submissions/pool/referee_invitations.html' with submission=submission invitations=submission.referee_invitations.all %}
         	<a href="{% url 'submissions:communication' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr comtype='StoE' %}" target="_blank">Send a communication to the Editor-in-charge</a>
         </div>
     </div>
diff --git a/submissions/templates/submissions/reports_pdf_compile.html b/submissions/templates/submissions/admin/report_compile_form.html
similarity index 88%
rename from submissions/templates/submissions/reports_pdf_compile.html
rename to submissions/templates/submissions/admin/report_compile_form.html
index bf46e0b6860c836b3d5a3c7d843508ea94253412..6bea35822dd1804482bf391b6badef032685723c 100644
--- a/submissions/templates/submissions/reports_pdf_compile.html
+++ b/submissions/templates/submissions/admin/report_compile_form.html
@@ -16,7 +16,7 @@
         <div class="col-12">
             <h1 class="highlight">Upload Report PDF</h1>
             <div class="card">
-                {% include 'submissions/_single_report_card_summary.html' with submission=report %}
+                {% include 'partials/submissions/report_summary.html' with submission=report %}
             </div>
         </div>
     </div>
@@ -25,7 +25,7 @@
         <div class="col-12">
             <h3>Please process this code in your Tex Compiler:</h3>
             <p>To compile, one needs the SciPost Latex Package. Please <a href="mailto: info@scipost.org">contact SciPost</a> if you did not receive it.</p>
-            <pre class="clickfocus" style="max-height: 200px;"><code>{% include 'submissions/_report_tex_template.html' with report=report %}</code></pre>
+            <pre class="clickfocus" style="max-height: 200px;"><code>{% include 'partials/submissions/report_tex_template.html' with report=report %}</code></pre>
         </div>
     </div>
 
@@ -35,7 +35,7 @@
           <form method="post" enctype="multipart/form-data">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input class="btn btn-secondary" type="submit" value="Upload"/>
+            <input class="btn btn-outline-secondary" type="submit" value="Upload"/>
           </form>
         </div>
     </div>
diff --git a/submissions/templates/submissions/reports_accepted_list.html b/submissions/templates/submissions/admin/report_list.html
similarity index 100%
rename from submissions/templates/submissions/reports_accepted_list.html
rename to submissions/templates/submissions/admin/report_list.html
diff --git a/submissions/templates/submissions/pool/assignments.html b/submissions/templates/submissions/pool/assignments.html
index 73dfcb932ee00dbb41e9e8da8c19e13a37ee2f5f..9d9161994ca9cd7e775944a1c9efbd99b7e98fc2 100644
--- a/submissions/templates/submissions/pool/assignments.html
+++ b/submissions/templates/submissions/pool/assignments.html
@@ -26,10 +26,10 @@
 {% for assignment in current_assignments %}
     {% if not forloop.first %}<hr class="small">{% endif %}
 
-    {% include 'partials/submissions/submission_title.html' with submission=assignment.submission %}
+    {% include 'partials/submissions/submission_li.html' with submission=assignment.submission %}
     {% include 'partials/submissions/pool/submission_info_table.html' with submission=assignment.submission %}
 
-    {% include 'submissions/_required_actions_block.html' with submission=submission %}
+    {% include 'partials/submissions/pool/required_actions_block.html' with submission=submission %}
     <h4 class="d-block mt-2">
         <a href="{% url 'submissions:editorial_page' arxiv_identifier_w_vn_nr=assignment.submission.arxiv_identifier_w_vn_nr %}">Go to this Submission's Editorial Page</a>
     </h4>
diff --git a/submissions/templates/submissions/editorial_page.html b/submissions/templates/submissions/pool/editorial_page.html
similarity index 91%
rename from submissions/templates/submissions/editorial_page.html
rename to submissions/templates/submissions/pool/editorial_page.html
index 2711220d5e2bcb6800d0401fb1d3b272e5a152bd..31a0d61ca514f136e00b50c5a4c522ef1e19d2a9 100644
--- a/submissions/templates/submissions/editorial_page.html
+++ b/submissions/templates/submissions/pool/editorial_page.html
@@ -26,7 +26,7 @@
         </div>
 
         <h3 class="mt-4">Submission summary</h3>
-        {% include 'submissions/_submission_summary_short.html' with submission=submission hide_title=1 %}
+        {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 %}
 
         <br>
         {% if submission.author_comments %}
@@ -56,7 +56,7 @@
 
 
         {% for recommendation in submission.eicrecommendations.all %}
-            {% include 'submissions/_recommendation_author_content.html' with recommendation=recommendation %}
+            {% include 'partials/submissions/recommendation_author_content.html' with recommendation=recommendation %}
             {% if recommendation.may_be_reformulated %}
                 <a href="{% url 'submissions:reformulate_eic_recommendation' submission.arxiv_identifier_w_vn_nr %}">Reformulate this Editorial Recommendation</a>
             {% endif %}
@@ -77,7 +77,7 @@
 
 <div class="row"><!-- Status -->
     <div class="col-md-12">
-        {% include 'submissions/_submission_status_block.html' with submission=submission %}
+        {% include 'partials/submissions/submission_status.html' with submission=submission %}
         {% if submission.plagiarism_report %}
             <h4>Plagiarism report status: {% if submission.plagiarism_report.percent_match %}<b>{{submission.plagiarism_report.percent_match}}%</b>{% else %}<em>Scan in progress</em>{% endif %}</h4>
         {% endif %}
@@ -87,7 +87,7 @@
 {% if full_access %}
     <div class="row">
         <div class="col-md-10 col-lg-8">
-            {% include 'submissions/_required_actions_block.html' with submission=submission %}
+            {% include 'partials/submissions/pool/required_actions_block.html' with submission=submission %}
         </div>
     </div>
 {% endif %}
@@ -96,7 +96,7 @@
     {% if full_access %}
         <div class="row">
             <div class="col-12">
-                {% include 'submissions/_form_submission_cycle_choice.html' with form=cycle_choice_form submission=submission %}
+                {% include 'partials/submissions/pool/submission_cycle_choice_form.html' with form=cycle_choice_form submission=submission %}
             </div>
         </div>
     {% else %}
@@ -111,7 +111,7 @@
         <div class="row">
             <div class="col-12">
                 <h3>Refereeing status summary:</h3>
-                {% include 'submissions/_submission_refereeing_status.html' with submission=submission %}
+                {% include 'partials/submissions/pool/referee_invitations_status.html' with submission=submission %}
             </div>
         </div>
 
@@ -119,7 +119,7 @@
             <div class="row">
                 <div class="col-12">
                     <h3 class="mb-2">Detail of refereeing invitations:</h3>
-                    {% include 'submissions/_submission_refereeing_invitations.html' with submission=submission invitations=submission.referee_invitations.all %}
+                    {% include 'partials/submissions/pool/referee_invitations.html' with submission=submission invitations=submission.referee_invitations.all %}
                 </div>
             </div>
         {% endif %}
@@ -168,7 +168,7 @@
                                     {{ set_deadline_form|bootstrap_inline:'0,12' }}
                                     <div class="ml-2 form-group row">
                                         <div class="col-12">
-                                            <input class="btn btn-secondary" type="submit" value="Set deadline"/>
+                                            <input class="btn btn-outline-secondary" type="submit" value="Set deadline"/>
                                         </div>
                                     </div>
                                 </form>
@@ -245,7 +245,7 @@
                 <ul class="list-group list-group-flush">
                     {% for comm in submission.editorial_communications.all %}
                         <li class="list-group-item">
-                            {% include 'submissions/_editorial_communication_content.html' with communication=comm %}
+                            {% include 'partials/submissions/pool/editorial_communication_content.html' with communication=comm %}
                         </li>
                     {% empty %}
                         <li class="list-group-item">There have been no communications for this Submission.</li>
@@ -255,8 +255,7 @@
     </div>
 
     <h2 class="mt-3">Events</h2>
-    {% include 'submissions/submission_event_list.html' with events=submission.events.for_eic %}
-
+    {% include 'partials/submissions/submission_events.html' with events=submission.events.for_eic %}
 {% endif %}
 
 <div class="mb-5"></div>
diff --git a/submissions/templates/submissions/pool/pool.html b/submissions/templates/submissions/pool/pool.html
index e64124a83bdf0397e76a22156c6a89bced31181f..92ae237be3333eb98e753ecaac6f0c2d873c06d5 100644
--- a/submissions/templates/submissions/pool/pool.html
+++ b/submissions/templates/submissions/pool/pool.html
@@ -55,7 +55,7 @@
                         {% if latest_submission_events %}
                             <a href="javascript:void(0)" class="btn" data-toggle="toggle" data-target="#lastest_events_list"><i class="fa fa-comments-o"></i> View/hide latest events ({{ latest_submission_events|length }}) in the last 24 hours</a>
                             <div id="lastest_events_list" style="display: none;">
-                                {% include 'submissions/submission_event_list_general.html' with events=latest_submission_events %}
+                                {% include 'partials/submissions/submission_events_explicit.html' with events=latest_submission_events %}
                             </div>
                         {% endif %}
                     </div>
diff --git a/submissions/templates/submissions/pool/recommendation.html b/submissions/templates/submissions/pool/recommendation.html
index e4022613693d85d850eb27fe1f8d338c8bf6aad6..61aeab9f9c925a003f4a35f4af8e914cf1060f73 100644
--- a/submissions/templates/submissions/pool/recommendation.html
+++ b/submissions/templates/submissions/pool/recommendation.html
@@ -14,14 +14,14 @@
     <h1>Editorial Recommendation to vote on</h1>
 
 
-    {% include 'partials/submissions/submission_title.html' with submission=recommendation.submission %}
+    {% include 'partials/submissions/submission_li.html' with submission=recommendation.submission %}
 
     <a class="d-inline-block mb-3" href="{{ recommendation.submission.get_absolute_url }}" target="_blank">View Reports and Submission details</a>
 
     {% include 'partials/submissions/pool/submission_info_table.html' with submission=recommendation.submission %}
     <br>
 
-    {% include 'submissions/_recommendation_fellow_content.html' with recommendation=recommendation %}
+    {% include 'partials/submissions/recommendation_fellow_content.html' with recommendation=recommendation %}
 
     <div class="card">
         <div class="card-body">
@@ -82,7 +82,7 @@
         <form action="{% url 'submissions:vote_on_rec' rec_id=recommendation.id %}" method="post">
             {% csrf_token %}
             {{ form|bootstrap:'0,12' }}
-            <input type="submit" name="submit" value="Cast your vote" class="btn btn-primary submitButton" id="submit-id-submit">
+            <input type="submit" name="submit" value="Cast your vote" class="btn btn-primary" id="submit-id-submit">
         </form>
     {% endif %}
 
diff --git a/submissions/templates/submissions/pool/recommendation_formulate.html b/submissions/templates/submissions/pool/recommendation_formulate.html
index 2ae4a3ce76cf271233f8012359db8eb607af13c7..7ff9df4c9f07415c6c1a208911143508ee34ccc5 100644
--- a/submissions/templates/submissions/pool/recommendation_formulate.html
+++ b/submissions/templates/submissions/pool/recommendation_formulate.html
@@ -16,7 +16,7 @@
 <h1 class="highlight">Formulate Editorial Recommendation for Submission</h1>
 
 <br>
-{% include 'submissions/_submission_summary.html' with submission=submission %}
+{% include 'partials/submissions/submission_summary.html' with submission=submission show_abstract=1 %}
 
 <br>
 <div class="card card-grey">
diff --git a/submissions/templates/submissions/pool/recommendation_formulate_rewrite.html b/submissions/templates/submissions/pool/recommendation_formulate_rewrite.html
index 58b73d22d4a46f9f5313b830eb8743ed00495376..17dcf9a8b4d07500609657b9ce741e021d1e3708 100644
--- a/submissions/templates/submissions/pool/recommendation_formulate_rewrite.html
+++ b/submissions/templates/submissions/pool/recommendation_formulate_rewrite.html
@@ -16,7 +16,7 @@
 <h1 class="highlight">Reformulate Editorial Recommendation for Submission</h1>
 
 <br>
-{% include 'submissions/_submission_summary.html' with submission=submission %}
+{% include 'partials/submissions/submission_summary.html' with submission=submission show_abstract=1 %}
 
 <br>
 <div class="card card-grey">
diff --git a/submissions/templates/submissions/select_referee.html b/submissions/templates/submissions/referee_form.html
similarity index 95%
rename from submissions/templates/submissions/select_referee.html
rename to submissions/templates/submissions/referee_form.html
index ecaa27de42430dcc9483b18e0c3b2272a5597677..8fae92385d4bde0416a0f6bffbb356bec371811f 100644
--- a/submissions/templates/submissions/select_referee.html
+++ b/submissions/templates/submissions/referee_form.html
@@ -28,7 +28,7 @@
 <div class="row">
     <div class="col-12">
         <h2>Submission:</h2>
-        {% include 'submissions/_submission_summary.html' with submission=submission %}
+        {% include 'partials/submissions/submission_summary.html' with submission=submission show_abstract=1 %}
 
         {% if submission.referees_flagged %}
             <h3>Referees flagged upon submission (treat reports with caution):</h3>
@@ -61,7 +61,7 @@
                 <ul class="list-group list-group-flush">
                     {% for entry in queryresults.entries %}
                         <li class="list-group-item">
-                            {% include 'submissions/_arxiv_queryresult.html' with item=entry %}
+                            {% include 'partials/submissions/arxiv_queryresult.html' with item=entry %}
                         </li>
                     {% endfor %}
                 </ul>
diff --git a/submissions/templates/submissions/decline_ref_invitation.html b/submissions/templates/submissions/referee_invitations_decline.html
similarity index 93%
rename from submissions/templates/submissions/decline_ref_invitation.html
rename to submissions/templates/submissions/referee_invitations_decline.html
index 8923b77afa84d2f41305e5d473a3b6698b578526..950cf215b3c5abf74aea4fcfc513de14b7a2a80a 100644
--- a/submissions/templates/submissions/decline_ref_invitation.html
+++ b/submissions/templates/submissions/referee_invitations_decline.html
@@ -34,7 +34,7 @@ $(document).ready(function(){
     <form action="{% url 'submissions:decline_ref_invitation' invitation_key=invitation.invitation_key %}" method="post">
       {% csrf_token %}
       {{ form|bootstrap }}
-      <input type="submit" class="btn btn-secondary" value="Submit" />
+      <input type="submit" class="btn btn-outline-secondary" value="Submit" />
     </form>
   </div>
 </div>
diff --git a/submissions/templates/submissions/accept_or_decline_ref_invitations.html b/submissions/templates/submissions/referee_invitations_form.html
similarity index 93%
rename from submissions/templates/submissions/accept_or_decline_ref_invitations.html
rename to submissions/templates/submissions/referee_invitations_form.html
index b20a59fba2ad3223205d1952dff2fc7a0e94df35..7d23dc5c50f54fa41dba998b216420617cbd2054 100644
--- a/submissions/templates/submissions/accept_or_decline_ref_invitations.html
+++ b/submissions/templates/submissions/referee_invitations_form.html
@@ -36,7 +36,7 @@ $(document).ready(function(){
     <div class="row">
         <div class="col-12">
             <h1 class="highlight">SciPost Submission which you are asked to Referee (see below to accept/decline):</h1>
-            {% include 'submissions/_submission_summary.html' with submission=invitation.submission %}
+            {% include 'partials/submissions/submission_summary.html' with submission=invitation.submission show_abstract=1 %}
         </div>
     </div>
     <div class="row">
diff --git a/submissions/templates/submissions/report_form.html b/submissions/templates/submissions/report_form.html
new file mode 100644
index 0000000000000000000000000000000000000000..84b69c692cf125c1b5ab90effb2b5580cf4847a2
--- /dev/null
+++ b/submissions/templates/submissions/report_form.html
@@ -0,0 +1,124 @@
+{% extends 'scipost/_personal_page_base.html' %}
+
+{% block breadcrumb_items %}
+    {{block.super}}
+    <span class="breadcrumb-item">Submit a report</span>
+{% endblock %}
+
+{% load bootstrap %}
+
+{% block pagetitle %}: submit report{% endblock pagetitle %}
+
+{% block content %}
+    <script>
+        $(function(){
+            function set_preview(el) {
+                $('[data-receive$="' + $(el).attr('id').split('id_')[1] + '"]').text($(el).val())
+            }
+            function set_preview_select(el) {
+                $('[data-receive$="' + $(el).attr('id').split('id_')[1] + '"]').text($(el).find('option:selected').text())
+            }
+            function update_identity_preview(show_identity) {
+                $('[data-receive="report-identity"] [if-anonymous]').hide();
+                if (show_identity) {
+                    $('[data-receive="report-identity"] [if-anonymous="false"]').show();
+                } else {
+                    $('[data-receive="report-identity"] [if-anonymous="true"]').show();
+                }
+            }
+            $('#id_weaknesses, #id_strengths, #id_report, #id_requested_changes').on('keyup', function(){
+                set_preview(this)
+                if (typeof MathJax !== "undefined") {
+                    // First trigger will fail since MathJax is loaded in the footer.
+                    MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
+                }
+            }).trigger('keyup');
+            $('#id_validity, #id_originality, #id_significance, #id_clarity, #id_formatting, #id_grammar').on('change', function(){
+                set_preview_select(this);
+            }).trigger('change');
+
+            $('input[name$="anonymous"]').on('change', function() {
+                $('.anonymous-alert').show()
+                .children('h3').hide()
+                if ($(this).prop('checked')) {
+                    update_identity_preview(false);
+                    $('.anonymous-yes').show();
+                } else {
+                    update_identity_preview(true);
+                    $('.anonymous-no').show();
+                }
+            }).trigger('change');
+        });
+    </script>
+
+
+{% if user.is_authenticated %}
+    <div class="row">
+        <div class="col-12">
+            <h1 class="highlight">Submit a Report on a SciPost Submission</h1>
+        </div>
+    </div>
+
+    <div class="row">
+        <div class="col-12">
+            <h3>Submission</h3>
+            {% include 'partials/submissions/submission_summary.html' with submission=submission show_abstract=1 %}
+        </div>
+    </div>
+
+    <hr class="divider">
+    <div class="row">
+        <div class="col-12">
+            <div class="card card-grey">
+                <div class="card-body">
+                    <h2>Your {% if form.instance.is_followup_report %}followup {% endif %}report:</h2>
+                    <p>A preview of text areas will appear below as you type (you can use $\LaTeX$ \$...\$ for in-text equations or \ [ ... \ ] for on-line equations).</p>
+                    <p class="mb-0">Any fields with an asterisk (*) are required.</p>
+                    {% if form.instance.is_followup_report %}
+                        <p class="mb-0">
+                            Because you have already submitted a Report for this Submission series, not all fields are required.
+                        </p>
+                    {% endif %}
+                </div>
+            </div>
+            {% if form.report_type == 'report_post_edrec' %}
+                <div class="card border-warning my-4">
+                    <div class="card-body">The Editorial Recommendation for this Submission has already been formulated. Therefore, your report will be labelled as <label class="label label-warning">Post-Editorial Recommendation Report</label>.
+                    </div>
+                </div>
+            {% endif %}
+
+            <div class="row">
+                <div class="col-md-6">
+                    <br>
+                    <form action="{% url 'submissions:submit_report' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}" method="post">
+                        {% csrf_token %}
+                        {{ form|bootstrap:'12,12' }}
+                        <div class="anonymous-alert" style="display: none;">
+                            <h3 class="anonymous-yes">Your Report will remain anonymous.</h3>
+                            <h3 class="anonymous-no"><span class="text-danger">Your Report will be <span class="text-underline">signed</span>.</span> Thank you very much!</h3>
+                        </div>
+                        <p>Any fields with an asterisk (*) are required.</p>
+                        <input class="btn btn-primary" type="submit" name="save_submit" value="Submit your report"/>
+                        <input class="btn btn-outline-secondary ml-2" type="submit" name="save_draft" value="Save your report as draft"/>
+                        {% if form.report_type == 'report_post_edrec' %}
+                            <div class="card border-warning mt-4">
+                                <div class="card-body">The Editorial Recommendation for this Submission has already been formulated. Therefore, your report will be labelled as <label class="label label-warning">Post-Editorial Recommendation Report</label>.
+                                </div>
+                            </div>
+                        {% endif %}
+                        <div class="my-4">
+                            <em>By clicking on Submit, you state that you abide by the <a href="{% url 'journals:journals_terms_and_conditions' %}#referee_code_of_conduct" target="_blank">referee code of conduct</a>.</em>
+                        </div>
+                    </form>
+                </div>
+                <div class="col-md-6">
+                    {% include 'partials/submissions/report_preview.html' %}
+                </div>
+            </div>
+        </div>
+    </div>
+
+{% endif %}
+
+{% endblock %}
diff --git a/submissions/templates/submissions/submission_detail.html b/submissions/templates/submissions/submission_detail.html
index 3642ad9bda4636c439c99105244da83e4edd0e7c..1c27d127c1bfbeb5d0239821f8e7e4a1766f4453 100644
--- a/submissions/templates/submissions/submission_detail.html
+++ b/submissions/templates/submissions/submission_detail.html
@@ -26,8 +26,8 @@
         <h3 class="mb-3">by {{submission.author_list}}</h3>
 
         <div class="pl-2">
-            {% if submission.publication %}
-                <h3>- Published as <a href="{{submission.publication.get_absolute_url}}">{{submission.publication.in_issue.in_volume.in_journal.get_abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}} ({{submission.publication.publication_date|date:'Y'}})</a></h3>
+            {% if submission.publication and submission.publication.is_published %}
+                <h3>- Published as <a href="{{submission.publication.get_absolute_url}}">{{submission.publication.in_issue.in_volume.in_journal.abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}} ({{submission.publication.publication_date|date:'Y'}})</a></h3>
             {% endif %}
 
 
@@ -42,31 +42,12 @@
             {% if not submission.is_current %}
                 <h3><span class="text-danger">- This is not the current version.</span></h3>
             {% endif %}
-
-            {% comment %}
-                {% if submission.other_versions or not submission.is_current %}
-                    <ul class="mt-3 mb-1 list-unstyled pl-4">
-                        {% if not submission.is_current %}
-                            <li><h3 class="text-danger">This is not the current version.</h3></li>
-                        {% endif %}
-
-                        {% if submission.other_versions %}
-                            <li>Other versions of this Submission (with Reports) exist:</li>
-                            <ul class="list-unstyled">
-                                {% for vn in submission.other_versions %}
-                                    <li>{% include 'submissions/_submission_version.html' with submission=vn %}</li>
-                                {% endfor %}
-                            </ul>
-                        {% endif %}
-                    </ul>
-                {% endif %}
-            {% endcomment %}
         </div>
 
         <h3 class="mt-2">Submission summary</h3>
-        {% include 'submissions/_submission_summary.html' with submission=submission hide_title=1 %}
+        {% include 'partials/submissions/submission_summary.html' with submission=submission hide_title=1 show_abstract=1 %}
 
-        {% include 'submissions/_submission_status_block.html' with submission=submission %}
+        {% include 'partials/submissions/submission_status.html' with submission=submission %}
 
         <br>
         <br>
@@ -96,14 +77,14 @@
 {% if is_author or user|is_in_group:'Editorial College' or user|is_in_group:'Editorial Administrators' %}
     {% for recommendation in recommendations %}
         {% if user|is_in_group:'Editorial College' or user|is_in_group:'Editorial Administrators' or recommendation|is_viewable_by_authors %}
-            {% include 'submissions/_recommendation_author_content.html' with recommendation=recommendation %}
+            {% include 'partials/submissions/recommendation_author_content.html' with recommendation=recommendation %}
         {% endif %}
     {% endfor %}
 
     <div class="mb-4">
-        <h2>Events</h2>
+        <h3>Events</h3>
         <div id="eventslist">
-            {% include 'submissions/submission_event_list.html' with events=submission.events.for_author %}
+            {% include 'partials/submissions/submission_events.html' with events=submission.events.for_author %}
         </div>
     </div>
 {% endif %}
@@ -111,7 +92,7 @@
 {% if is_author or user|is_in_group:'Editorial Administrators' %}
     {% if submission.production_stream.proofs.for_authors.exists %}
         <div class="mb-4" id="proofsslist">
-            <h2>Proofs</h2>
+            <h3>Proofs</h3>
             <ul>
                 {% for proofs in submission.production_stream.proofs.for_authors %}
                     <li>
@@ -194,7 +175,7 @@
 
 <div id="invitedreportslist">
     {% for report in invited_reports %}
-        {% include 'submissions/_single_public_report.html' with report=report user=request.user perms=perms %}
+        {% include 'partials/submissions/report_public.html' with report=report user=request.user perms=perms %}
     {% endfor %}
 </div>
 
@@ -216,7 +197,7 @@
 
 <div id="contributedreportslist">
     {% for report in contributed_reports %}
-        {% include 'submissions/_single_public_report.html' with report=report user=request.user perms=perms %}
+        {% include 'partials/submissions/report_public.html' with report=report user=request.user perms=perms %}
     {% endfor %}
 </div>
 
diff --git a/submissions/templates/submissions/new_submission.html b/submissions/templates/submissions/submission_form.html
similarity index 100%
rename from submissions/templates/submissions/new_submission.html
rename to submissions/templates/submissions/submission_form.html
diff --git a/submissions/templates/submissions/submissions.html b/submissions/templates/submissions/submission_list.html
similarity index 93%
rename from submissions/templates/submissions/submissions.html
rename to submissions/templates/submissions/submission_list.html
index 05e114e3f2e255678c6c9b80c6ce870f309e436f..e0c3d2e8b80a2e3ebf6e20d3dc638d90278c66b2 100644
--- a/submissions/templates/submissions/submissions.html
+++ b/submissions/templates/submissions/submission_list.html
@@ -23,7 +23,7 @@
               <h2 class="card-title">Search SciPost Submissions:</h2>
               <form action="{% url 'submissions:submissions' %}" class="small" method="get">
                 {{ form|bootstrap:'4,8,sm' }}
-                <input class="btn btn-sm btn-secondary" type="submit" value="Search"/>
+                <input class="btn btn-sm btn-outline-secondary" type="submit" value="Search"/>
               </form>
             </div>
         </div>
@@ -44,7 +44,7 @@
 <div class="row">
     <div class="col-12">
         {% if recent %}
-          <h2>Recent Submissions:</h2>
+          <h2>Recent Submissions{% if to_journal %} to {{ to_journal }}{% endif %}:</h2>
         {% elif browse %}
           <h2>Submissions in {{ discipline }} in the last {{ nrweeksback }} week{% if nrweeksback == '1' %}{% else %}s{% endif %}:</h2>
         {% else %}
diff --git a/submissions/templates/submissions/prefill_using_identifier.html b/submissions/templates/submissions/submission_prefill_form.html
similarity index 95%
rename from submissions/templates/submissions/prefill_using_identifier.html
rename to submissions/templates/submissions/submission_prefill_form.html
index 1a9a35f5320ecc925991b712295943c386055749..d21582d742ad850a684a8c5a921f087dd151bc23 100644
--- a/submissions/templates/submissions/prefill_using_identifier.html
+++ b/submissions/templates/submissions/submission_prefill_form.html
@@ -42,7 +42,7 @@
                 <form action="{% url 'submissions:prefill_using_identifier' %}" method="post">
                   {% csrf_token %}
                   {{ form|bootstrap }}
-                  <input type="submit" class="btn btn-secondary" value="Query arXiv"/>
+                  <input type="submit" class="btn btn-outline-secondary" value="Query arXiv"/>
                 </form>
             </div>
         </div>
diff --git a/submissions/templates/submissions/submissions_by_status.html b/submissions/templates/submissions/submissions_by_status.html
deleted file mode 100644
index f6e10422fd989f7627f263ff9e8d2659901ec62c..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/submissions_by_status.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{% extends 'submissions/_pool_base.html' %}
-
-{% load guardian_tags %}
-{% load scipost_extras %}
-{% load submissions_extras %}
-
-{% block pagetitle %}: Submissions by status{% endblock pagetitle %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'submissions:pool' %}" class="breadcrumb-item">Pool</a>
-    <span class="breadcrumb-item">Status: {{status}}</span>
-{% endblock %}
-
-{% block content %}
-
-{% with is_ECAdmin=request.user|is_in_group:'Editorial Administrators' %}
-<div class="row">
-    <div class="col-12">
-        <h1 class="highlight">SciPost Submissions with status {{status}}</h1>
-    </div>
-</div>
-
-<div class="row">
-    <div class="col-12">
-        <!-- Submissions list -->
-        {% for sub in submissions_of_status %}
-            <div class="card card-outline-secondary mt-1">
-                {% include 'submissions/_submission_card_in_pool.html' with submission=sub remark_form=remark_form is_ECAdmin=is_ECAdmin %}
-            </div>
-        {% endfor %}
-    </div>
-</div>
-{% endwith %}
-
-{% endblock content %}
diff --git a/submissions/templates/submissions/submit_report.html b/submissions/templates/submissions/submit_report.html
deleted file mode 100644
index 274ff302e0da162931869bd42e77e541529736f6..0000000000000000000000000000000000000000
--- a/submissions/templates/submissions/submit_report.html
+++ /dev/null
@@ -1,140 +0,0 @@
-{% extends 'scipost/_personal_page_base.html' %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <span class="breadcrumb-item">Submit a report</span>
-{% endblock %}
-
-{% load bootstrap %}
-
-{% block pagetitle %}: submit report{% endblock pagetitle %}
-
-{% block content %}
-
-<script>
-  $(document).ready(function(){
-
-    var strengths_input = $("#id_strengths");
-    function set_strengths(value) {
-      $("#preview-strengths").text(value)
-    }
-    set_strengths(strengths_input.val())
-    strengths_input.keyup(function(){
-      var new_text = $(this).val()
-      set_strengths(new_text)
-      MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
-    })
-
-    var weaknesses_input = $("#id_weaknesses");
-    function set_weaknesses(value) {
-      $("#preview-weaknesses").text(value)
-    }
-    set_weaknesses(weaknesses_input.val())
-    weaknesses_input.keyup(function(){
-      var new_text = $(this).val()
-      set_weaknesses(new_text)
-      MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
-    })
-
-    var report_input = $("#id_report");
-    function set_report(value) {
-      $("#preview-report").text(value)
-    }
-    set_report(report_input.val())
-    report_input.keyup(function(){
-      var new_text = $(this).val()
-      set_report(new_text)
-      MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
-    })
-
-    var requested_changes_input = $("#id_requested_changes");
-    function set_requested_changes(value) {
-      $("#preview-requested_changes").text(value)
-    }
-    set_requested_changes(requested_changes_input.val())
-    requested_changes_input.keyup(function(){
-      var new_text = $(this).val()
-      set_requested_changes(new_text)
-      MathJax.Hub.Queue(["Typeset",MathJax.Hub]);
-    })
-
-  });
-</script>
-
-
-{% if user.is_authenticated %}
-    <div class="row">
-        <div class="col-12">
-            <h1 class="highlight">Submit a Report on a SciPost Submission</h1>
-        </div>
-    </div>
-
-    <div class="row">
-        <div class="col-12">
-            <h2>Submission</h2>
-            {% include 'submissions/_submission_summary.html' with submission=submission %}
-        </div>
-    </div>
-
-    <hr>
-    <div class="row">
-        <div class="col-12">
-            <div class="card card-grey">
-                <div class="card-body">
-                    <h1>Your {% if form.instance.is_followup_report %}followup {% endif %}report:</h1>
-                    <p>A preview of text areas will appear below as you type (you can use LaTeX \$...\$ for in-text equations or \ [ ... \ ] for on-line equations).</p>
-                    <p class="mb-0">Any fields with an asterisk (*) are required.</p>
-                    {% if form.instance.is_followup_report %}
-                        <p class="mb-0">
-                            Because you have already submitted a Report for this Submission series, not all fields are required.
-                        </p>
-                    {% endif %}
-                </div>
-            </div>
-            {% if form.report_type == 'report_post_edrec' %}
-                <div class="card border-warning my-4">
-                    <div class="card-body">The Editorial Recommendation for this Submission has already been formulated. Therefore, your report will be labelled as <label class="label label-warning">Post-Editorial Recommendation Report</label>.
-                    </div>
-                </div>
-            {% endif %}
-            <form action="{% url 'submissions:submit_report' arxiv_identifier_w_vn_nr=submission.arxiv_identifier_w_vn_nr %}" method="post">
-                {% csrf_token %}
-                {{ form|bootstrap:'3,9' }}
-                <p>Any fields with an asterisk (*) are required.</p>
-                <input class="btn btn-primary" type="submit" name="save_submit" value="Submit your report"/>
-                <input class="btn btn-secondary ml-2" type="submit" name="save_draft" value="Save your report as draft"/>
-                {% if form.report_type == 'report_post_edrec' %}
-                    <div class="card border-warning mt-4">
-                        <div class="card-body">The Editorial Recommendation for this Submission has already been formulated. Therefore, your report will be labelled as <label class="label label-warning">Post-Editorial Recommendation Report</label>.
-                        </div>
-                    </div>
-                {% endif %}
-                <div class="my-4">
-                    <em>By clicking on Submit, you state that you abide by the <a href="{% url 'journals:journals_terms_and_conditions' %}#referee_code_of_conduct">referee code of conduct</a>.</em>
-                </div>
-            </form>
-        </div>
-    </div>
-
-    <hr>
-    <div class="row">
-        <div class="col-12">
-            <h3>Preview of your report (text areas only):</h3>
-
-            <h4>Strengths:</h4>
-            <p class="p-2" id="preview-strengths"></p>
-
-            <h4>Weaknesses:</h4>
-            <p class="p-2" id="preview-weaknesses"></p>
-
-            <h4>Report:</h4>
-            <p class="p-2" id="preview-report"></p>
-
-            <h4>Requested changes:</h4>
-            <p class="p-2" id="preview-requested_changes"></p>
-        </div>
-    </div>
-
-{% endif %}
-
-{% endblock %}
diff --git a/submissions/templates/submissions/treated_submissions_list.html b/submissions/templates/submissions/treated_submission_list.html
similarity index 100%
rename from submissions/templates/submissions/treated_submissions_list.html
rename to submissions/templates/submissions/treated_submission_list.html
diff --git a/submissions/templates/submissions/treated_submission_pdf_compile.html b/submissions/templates/submissions/treated_submission_pdf_compile.html
index 19e456fefbb06e35c872c25f1cc8c53e0020ea62..b6038f713782ec69f5c3a1f1bc5256ffb8078e89 100644
--- a/submissions/templates/submissions/treated_submission_pdf_compile.html
+++ b/submissions/templates/submissions/treated_submission_pdf_compile.html
@@ -15,7 +15,7 @@
     <div class="row">
         <div class="col-12">
             <h1 class="highlight">Upload Submission Refereeing PDF</h1>
-            {% include 'submissions/_submission_summary_short.html' with submission=submission %}
+            {% include 'partials/submissions/submission_summary.html' with submission=submission %}
             <p class="my-2"><a href="{{submission.get_absolute_url}}">Go to Submission page</a></p>
         </div>
     </div>
@@ -33,7 +33,7 @@
                 Number of Reports: {{submission.reports.accepted.count}}<br>
                 Number of Comments <small>(nested comments not counted)</small>: {{submission.comments.vetted.count}}
             </p>
-            <pre class="clickfocus" style="max-height: 200px;"><code>{% include 'submissions/_refereeing_pack_tex_template.html' with submission=submission %}</code></pre>
+            <pre class="clickfocus" style="max-height: 200px;"><code>{% include 'partials/submissions/refereeing_pack_tex_template.html' with submission=submission %}</code></pre>
         </div>
     </div>
 
@@ -43,7 +43,7 @@
           <form method="post" enctype="multipart/form-data">
             {% csrf_token %}
             {{ form|bootstrap }}
-            <input class="btn btn-secondary" type="submit" value="Upload"/>
+            <input class="btn btn-outline-secondary" type="submit" value="Upload"/>
           </form>
         </div>
     </div>
diff --git a/submissions/templates/submissions/vet_submitted_report.html b/submissions/templates/submissions/vet_submitted_report.html
index 3573610ada85ab771d66ff461358816098391cc2..eafd26b8ed3116b2e6f694ae274bc3bfe3739767 100644
--- a/submissions/templates/submissions/vet_submitted_report.html
+++ b/submissions/templates/submissions/vet_submitted_report.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_pool_base.html' %}
+{% extends 'submissions/pool/base.html' %}
 
 {% block pagetitle %}: vet reports{% endblock pagetitle %}
 
@@ -39,13 +39,13 @@ $(document).ready(function(){
             <h2 class="mb-2">Submission associated to Report:</h2>
             <div class="row">
                 <div class="col-12">
-                    {% include 'submissions/_submission_summary_short.html' with submission=report_to_vet.submission %}
+                    {% include 'partials/submissions/submission_summary.html' with submission=report_to_vet.submission %}
                 </div>
             </div>
 
             <h2 class="mb-2">Report to vet:</h2>
 
-            {% include 'submissions/_single_public_report_without_comments.html' with submission=report_to_vet.submission report=report_to_vet %}
+            {% include 'partials/submissions/report_public_without_comments.html' with submission=report_to_vet.submission report=report_to_vet %}
 
             <hr class="small">
             <h2>Please vet this Report:</h2>
diff --git a/submissions/templates/submissions/vet_submitted_reports_list.html b/submissions/templates/submissions/vet_submitted_reports_list.html
index 44697fdc21432a4a36b1278ec934c860a152b40f..472b2039926efc55299ce7184123f58d91bc1e04 100644
--- a/submissions/templates/submissions/vet_submitted_reports_list.html
+++ b/submissions/templates/submissions/vet_submitted_reports_list.html
@@ -1,4 +1,4 @@
-{% extends 'submissions/_pool_base.html' %}
+{% extends 'submissions/pool/base.html' %}
 
 {% block pagetitle %}: vet reports{% endblock pagetitle %}
 
diff --git a/submissions/templatetags/lookup.py b/submissions/templatetags/lookup.py
index c2f7e549124208067d554ffd7ce304d5f8758ae2..50faacc39c96bf261f033821cb099abe4021925a 100644
--- a/submissions/templatetags/lookup.py
+++ b/submissions/templatetags/lookup.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from ajax_select import register, LookupChannel
 from ..models import Submission
 
@@ -27,4 +31,4 @@ class SubmissionLookup(LookupChannel):
         Right now only used for draft registration invitations. May be extended in the
         future for other purposes as well.
         """
-        return request.user.has_perm('can_draft_registration_invitations')
+        return request.user.has_perm('can_create_registration_invitations')
diff --git a/submissions/templatetags/submissions_extras.py b/submissions/templatetags/submissions_extras.py
index f63b5843f7d9be03df5dda65ef157acd102588cd..24cac6d7af407eb9b7c0884b547d7f710da15b02 100644
--- a/submissions/templatetags/submissions_extras.py
+++ b/submissions/templatetags/submissions_extras.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import template
 
 from submissions.models import Submission
diff --git a/submissions/test_models.py b/submissions/test_models.py
index 1bc015369576f76d287e2a4af2709a801279e201..feb5d431d04cd53b69858536bd8366cbb9f76642 100644
--- a/submissions/test_models.py
+++ b/submissions/test_models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # from .factories import ResubmittedScreeningSubmissionFactory
diff --git a/submissions/test_utils.py b/submissions/test_utils.py
index d070e6c8a4cf5ef81706d3b83344987f311425b0..541986edd40d1443fcc397b2fabb37d9841b9514 100644
--- a/submissions/test_utils.py
+++ b/submissions/test_utils.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.test import TestCase, tag
diff --git a/submissions/test_views.py b/submissions/test_views.py
index cc6905f3e018523147e0df80f8c49fecae9bd4c2..22019084af7493e7a18eeb83a8e9ed6bf5d2b2cc 100644
--- a/submissions/test_views.py
+++ b/submissions/test_views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.test import TestCase, tag
 from django.test import Client
diff --git a/submissions/urls.py b/submissions/urls.py
index c840e1c0d843ce035b1e2134e1082037d70576aa..e008858ce532e308c43239d7d2c2f66f939d92c4 100644
--- a/submissions/urls.py
+++ b/submissions/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 from django.views.generic import TemplateView
 
diff --git a/submissions/utils.py b/submissions/utils.py
index 2649daa1e9642b86928dda011a82799710a92cf7..44115064ba9bfc12aced5a0b3e6d217b9f1b7404 100644
--- a/submissions/utils.py
+++ b/submissions/utils.py
@@ -1,14 +1,17 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.core.mail import EmailMessage, EmailMultiAlternatives
 from django.template import Context, Template
 from django.utils import timezone
 
-from .constants import NO_REQUIRED_ACTION_STATUSES, STATUS_VETTED, STATUS_UNCLEAR,\
-                       STATUS_INCORRECT, STATUS_NOT_USEFUL, STATUS_NOT_ACADEMIC,\
-                       STATUS_REVISION_REQUESTED, STATUS_EIC_ASSIGNED,\
-                       STATUS_RESUBMISSION_INCOMING, STATUS_AWAITING_ED_REC
-from .exceptions import CycleUpdateDeadlineError
+from .constants import (
+    NO_REQUIRED_ACTION_STATUSES, STATUS_VETTED, STATUS_UNCLEAR, STATUS_INCORRECT,
+    STATUS_NOT_USEFUL, STATUS_NOT_ACADEMIC, STATUS_REVISION_REQUESTED, STATUS_EIC_ASSIGNED,
+    STATUS_RESUBMISSION_INCOMING, STATUS_AWAITING_ED_REC)
 
 from scipost.utils import EMAIL_FOOTER
 from common.utils import BaseMailUtil
@@ -118,13 +121,11 @@ class BaseSubmissionCycle:
         Reset the reporting deadline according to current datetime and default cycle length.
         New reporting deadline may be explicitly given as datetime instance.
         """
-        if self.submission.status == STATUS_RESUBMISSION_INCOMING:
-            raise CycleUpdateDeadlineError('Submission has invalid status: %s'
-                                           % self.submission.status)
         delta_d = period or self.default_days
         deadline = timezone.now() + datetime.timedelta(days=delta_d)
-        self.submission.reporting_deadline = deadline
-        self.submission.save()
+
+        from .models import Submission
+        Submission.objects.filter(id=self.submission.id).update(reporting_deadline=deadline)
 
     def get_required_actions(self):
         '''Return list of the submission its required actions'''
@@ -158,8 +159,8 @@ class BaseRefereeSubmissionCycle(BaseSubmissionCycle):
     """
     def update_status(self):
         if self.submission.status == STATUS_RESUBMISSION_INCOMING:
-            self.submission.status = STATUS_EIC_ASSIGNED
-            self.submission.save()
+            from .models import Submission
+            Submission.objects.filter(id=self.submission.id).update(status=STATUS_EIC_ASSIGNED)
 
     def _update_actions(self):
         continue_update = super()._update_actions()
@@ -235,8 +236,8 @@ class DirectRecommendationSubmissionCycle(BaseSubmissionCycle):
 
     def update_status(self):
         if self.submission.status == STATUS_RESUBMISSION_INCOMING:
-            self.submission.status = STATUS_AWAITING_ED_REC
-            self.submission.save()
+            from .models import Submission
+            Submission.objects.filter(id=self.submission.id).update(status=STATUS_AWAITING_ED_REC)
 
     def _update_actions(self):
         continue_update = super()._update_actions()
@@ -275,11 +276,8 @@ class SubmissionUtils(BaseMailUtil):
         # Import here due to circular import error
         from .models import EditorialAssignment
 
-        assignments_to_deprecate = (EditorialAssignment.objects
-                                    .filter(submission=cls.submission, accepted=None))
-        for atd in assignments_to_deprecate:
-            atd.deprecated = True
-            atd.save()
+        EditorialAssignment.objects.filter(
+            submission=cls.submission, accepted=None).update(deprecated=True)
 
     @classmethod
     def reinvite_referees_email(cls):
@@ -1375,6 +1373,5 @@ class SubmissionUtils(BaseMailUtil):
         - `fellow`
         """
         cls._send_mail(cls, 'email_fellow_tasklist',
-#                       [cls._context['fellow'].email_address],
-                       ['jscaux@scipost.org'], # temporary, for testing
-                       'Current and upcoming tasks')
+                       [cls._context['fellow'].user.email],
+                       'current assignments, pending tasks')
diff --git a/submissions/views.py b/submissions/views.py
index 1e1cc60d55ffb75580a290a3a9f9282faee27773..bac948e24945f6506ea4fb62dea10bf0309bdfd8 100644
--- a/submissions/views.py
+++ b/submissions/views.py
@@ -1,5 +1,10 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 import feedparser
+import strings
 
 from django.contrib import messages
 from django.contrib.auth.decorators import login_required, permission_required
@@ -33,20 +38,18 @@ from .forms import SubmissionIdentifierForm, RequestSubmissionForm, SubmissionSe
                    EICRecommendationForm, ReportForm, VetReportForm, VotingEligibilityForm,\
                    SubmissionCycleChoiceForm, ReportPDFForm, SubmissionReportsForm,\
                    iThenticateReportForm, SubmissionPoolFilterForm
+from .signals import notify_manuscript_accepted
 from .utils import SubmissionUtils
 
 from colleges.permissions import fellowship_required, fellowship_or_admin_required
-from mails.views import MailEditingSubView
-from scipost.forms import ModifyPersonalMessageForm, RemarkForm
-from scipost.mixins import PaginationMixin
-from scipost.models import Contributor, Remark, RegistrationInvitation
-from scipost.utils import Utils
-
 from comments.forms import CommentForm
+from journals.models import Journal
+from mails.views import MailEditingSubView
 from production.forms import ProofsDecisionForm
 from production.models import ProductionStream
-
-import strings
+from scipost.forms import ModifyPersonalMessageForm, RemarkForm
+from scipost.mixins import PaginationMixin
+from scipost.models import Contributor, Remark
 
 
 ###############
@@ -59,7 +62,7 @@ import strings
 class RequestSubmission(CreateView):
     success_url = reverse_lazy('scipost:personal_page')
     form_class = RequestSubmissionForm
-    template_name = 'submissions/new_submission.html'
+    template_name = 'submissions/submission_form.html'
 
     def get(self, request):
         return redirect('submissions:prefill_using_identifier')
@@ -117,17 +120,16 @@ def prefill_using_arxiv_identifier(request):
         context = {
             'form': form,
         }
-        return render(request, 'submissions/new_submission.html', context)
+        return render(request, 'submissions/submission_form.html', context)
 
     context = {
         'form': query_form,
     }
-    return render(request, 'submissions/prefill_using_identifier.html', context)
+    return render(request, 'submissions/submission_prefill_form.html', context)
 
 
 class SubmissionListView(PaginationMixin, ListView):
     model = Submission
-    template_name = 'submissions/submissions.html'
     form = SubmissionSearchForm
     submission_search_list = []
     paginate_by = 10
@@ -135,10 +137,10 @@ class SubmissionListView(PaginationMixin, ListView):
     def get_queryset(self):
         queryset = Submission.objects.public_newest()
         self.form = self.form(self.request.GET)
-        if 'to_journal' in self.kwargs:
+        if 'to_journal' in self.request.GET:
             queryset = queryset.filter(
                 latest_activity__gte=timezone.now() + datetime.timedelta(days=-60),
-                submitted_to_journal=self.kwargs['to_journal']
+                submitted_to_journal=self.request.GET['to_journal']
             )
         elif 'discipline' in self.kwargs and 'nrweeksback' in self.kwargs:
             discipline = self.kwargs['discipline']
@@ -160,8 +162,12 @@ class SubmissionListView(PaginationMixin, ListView):
         context['form'] = self.form
 
         # To customize display in the template
-        if 'to_journal' in self.kwargs:
-            context['to_journal'] = self.kwargs['to_journal']
+        if 'to_journal' in self.request.GET:
+            try:
+                context['to_journal'] = Journal.objects.filter(
+                    name=self.request.GET['to_journal']).first().get_name_display()
+            except (Journal.DoesNotExist, AttributeError):
+                context['to_journal'] = self.request.GET['to_journal']
         if 'discipline' in self.kwargs:
             context['discipline'] = self.kwargs['discipline']
             context['nrweeksback'] = self.kwargs['nrweeksback']
@@ -281,7 +287,7 @@ def reports_accepted_list(request):
     context = {
         'reports': reports
     }
-    return render(request, 'submissions/reports_accepted_list.html', context)
+    return render(request, 'submissions/admin/report_list.html', context)
 
 
 @permission_required('scipost.can_manage_reports', raise_exception=True)
@@ -296,7 +302,7 @@ def report_pdf_compile(request, report_id):
         'report': report,
         'form': form
     }
-    return render(request, 'submissions/reports_pdf_compile.html', context)
+    return render(request, 'submissions/admin/report_compile_form.html', context)
 
 
 @permission_required('scipost.can_manage_reports', raise_exception=True)
@@ -309,7 +315,7 @@ def treated_submissions_list(request):
     context = {
         'submissions': submissions
     }
-    return render(request, 'submissions/treated_submissions_list.html', context)
+    return render(request, 'submissions/treated_submission_list.html', context)
 
 
 @permission_required('scipost.can_manage_reports', raise_exception=True)
@@ -429,8 +435,8 @@ def add_remark(request, arxiv_identifier_w_vn_nr):
 @login_required
 @permission_required('scipost.can_assign_submissions', raise_exception=True)
 def assign_submission(request, arxiv_identifier_w_vn_nr):
-    """
-    Assign Editor-in-charge to Submission.
+    """Assign Editor-in-charge to Submission.
+
     Action done by SciPost Administration or Editorial College Administration.
     """
     submission = get_object_or_404(Submission.objects.pool_editable(request.user),
@@ -443,20 +449,23 @@ def assign_submission(request, arxiv_identifier_w_vn_nr):
         SubmissionUtils.send_assignment_request_email()
         messages.success(request, 'Your assignment request has been sent successfully.')
         return redirect('submissions:pool')
+
+    fellows_with_expertise = submission.fellows.all()
+    coauthorships = submission.flag_coauthorships_arxiv(fellows_with_expertise)
+
     context = {
         'submission_to_assign': submission,
+        'coauthorships': coauthorships,
         'form': form
     }
-    return render(request, 'submissions/assign_submission.html', context)
+    return render(request, 'submissions/admin/editorial_assignment_form.html', context)
 
 
 @login_required
 @fellowship_required()
 @transaction.atomic
 def assignment_request(request, assignment_id):
-    """
-    Process EditorialAssignment acceptance/denial form or show if not submitted.
-    """
+    """Process EditorialAssignment acceptance/rejection form or show if not submitted."""
     assignment = get_object_or_404(EditorialAssignment.objects.open(),
                                    to=request.user.contributor, pk=assignment_id)
 
@@ -490,6 +499,9 @@ def assignment_request(request, assignment_id):
             assignment.submission.reporting_deadline = deadline
             assignment.submission.open_for_commenting = True
             assignment.submission.latest_activity = timezone.now()
+            # Save assignment and submission
+            assignment.save()
+            assignment.submission.save()
 
             SubmissionUtils.load({'assignment': assignment})
             SubmissionUtils.deprecate_other_assignments()
@@ -505,11 +517,12 @@ def assignment_request(request, assignment_id):
             assignment.accepted = False
             assignment.refusal_reason = form.cleaned_data['refusal_reason']
             assignment.submission.status = 'unassigned'
+
+            # Save assignment and submission
+            assignment.save()
+            assignment.submission.save()
             msg = 'Thank you for considering'
             url = reverse('submissions:pool')
-        # Save assignment and submission
-        assignment.save()
-        assignment.submission.save()
 
         # Form submitted, redirect user
         messages.success(request, msg)
@@ -614,7 +627,7 @@ def assignment_failed(request, arxiv_identifier_w_vn_nr):
         form = ModifyPersonalMessageForm()
     context = {'submission': submission,
                'form': form}
-    return render(request, 'submissions/assignment_failed.html', context)
+    return render(request, 'submissions/admin/editorial_assignment_failed.html', context)
 
 
 @login_required
@@ -664,7 +677,7 @@ def editorial_page(request, arxiv_identifier_w_vn_nr):
         'cycle_choice_form': SubmissionCycleChoiceForm(instance=submission),
         'full_access': full_access,
     }
-    return render(request, 'submissions/editorial_page.html', context)
+    return render(request, 'submissions/pool/editorial_page.html', context)
 
 
 @login_required
@@ -699,16 +712,18 @@ def cycle_form_submit(request, arxiv_identifier_w_vn_nr):
 @login_required
 @fellowship_or_admin_required()
 def select_referee(request, arxiv_identifier_w_vn_nr):
-    """
-    Select/Invite referees by first listing them here.
+    """Invite scientist to referee a Submission.
 
-    Accessible for: Editor-in-charge and Editorial Administration
+    Accessible for: Editor-in-charge and Editorial Administration.
+    It'll list possible already registered Contributors that match the search. If the scientist
+    is not yet registered, he will be invited using a RegistrationInvitation as well. In
+    addition the page will show possible conflicts of interests, with that information
+    coming from the ArXiv API.
     """
     submission = get_object_or_404(Submission.objects.filter_for_eic(request.user),
                                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
     context = {}
     queryresults = ''
-
     ref_search_form = RefereeSelectForm(request.POST or None)
     if ref_search_form.is_valid():
         contributors_found = Contributor.objects.filter(
@@ -724,7 +739,7 @@ def select_referee(request, arxiv_identifier_w_vn_nr):
                 sub_auth_boolean_str += '+OR+' + author['name'].split()[-1]
             sub_auth_boolean_str += ')+AND+'
             search_str = sub_auth_boolean_str + ref_search_form.cleaned_data['last_name'] + ')'
-            queryurl = ('http://export.arxiv.org/api/query?search_query=au:%s'
+            queryurl = ('https://export.arxiv.org/api/query?search_query=au:%s'
                         % search_str + '&sortBy=submittedDate&sortOrder=descending'
                         '&max_results=5')
             arxivquery = feedparser.parse(queryurl)
@@ -738,69 +753,47 @@ def select_referee(request, arxiv_identifier_w_vn_nr):
         'ref_search_form': ref_search_form,
         'queryresults': queryresults
     })
-    return render(request, 'submissions/select_referee.html', context)
+    return render(request, 'submissions/referee_form.html', context)
 
 
 @login_required
 @fellowship_or_admin_required()
 @transaction.atomic
 def recruit_referee(request, arxiv_identifier_w_vn_nr):
-    """
-    If the Editor-in-charge does not find the desired referee among Contributors
-    (otherwise, the method send_refereeing_invitation below is used instead),
-    he/she can invite somebody by providing name + contact details.
-    This function emails a registration invitation to this person.
-    The pending refereeing invitation is then recognized upon registration,
-    using the invitation token.
+    """Invite a non-registered scientist to register and referee a Submission.
 
     Accessible for: Editor-in-charge and Editorial Administration
+    If the Editor-in-charge does not find the desired referee among Contributors
+    (otherwise, the method send_refereeing_invitation is used), he/she can invite somebody
+    by providing name + contact details. This function emails a registration invitation to this
+    person. The pending refereeing invitation is then recognized upon registration, using the
+    invitation token.
     """
     submission = get_object_or_404(Submission.objects.filter_for_eic(request.user),
                                    arxiv_identifier_w_vn_nr=arxiv_identifier_w_vn_nr)
 
-    if request.method == 'POST':
-        ref_recruit_form = RefereeRecruitmentForm(request.POST)
-        if ref_recruit_form.is_valid():
-            # TODO check if email already taken
-            ref_invitation = RefereeInvitation(
-                submission=submission,
-                title=ref_recruit_form.cleaned_data['title'],
-                first_name=ref_recruit_form.cleaned_data['first_name'],
-                last_name=ref_recruit_form.cleaned_data['last_name'],
-                email_address=ref_recruit_form.cleaned_data['email_address'],
-                date_invited=timezone.now(),
-                invited_by=request.user.contributor)
-            ref_invitation.save()
-            # Create and send a registration invitation
-            ref_inv_message_head = ('On behalf of the Editor-in-charge ' +
-                                    submission.editor_in_charge.get_title_display() + ' ' +
-                                    submission.editor_in_charge.user.last_name +
-                                    ', we would like to invite you to referee a Submission to ' +
-                                    submission.get_submitted_to_journal_display() +
-                                    ', namely\n\n' + submission.title +
-                                    '\nby ' + submission.author_list +
-                                    '\n (see https://scipost.org/submission/'
-                                    + submission.arxiv_identifier_w_vn_nr + ').')
-            reg_invitation = RegistrationInvitation(
-                title=ref_recruit_form.cleaned_data['title'],
-                first_name=ref_recruit_form.cleaned_data['first_name'],
-                last_name=ref_recruit_form.cleaned_data['last_name'],
-                email=ref_recruit_form.cleaned_data['email_address'],
-                invitation_type='R',
-                invited_by=request.user.contributor,
-                message_style='F',
-                personal_message=ref_inv_message_head,
-            )
-            reg_invitation.save()
-            Utils.load({'invitation': reg_invitation})
-            Utils.send_registration_invitation_email()
+    ref_recruit_form = RefereeRecruitmentForm(
+        request.POST or None, request=request, submission=submission)
+    if ref_recruit_form.is_valid():
+        referee_invitation, registration_invitation = ref_recruit_form.save(commit=False)
+        mail_request = MailEditingSubView(request, mail_code='registration_invitation_refereeing',
+                                          instance=referee_invitation)
+        mail_request.add_form(ref_recruit_form)
+        if mail_request.is_valid():
+            referee_invitation.save()
+            registration_invitation.save()
+
+            messages.success(request, 'Referee {} invited'.format(
+                registration_invitation.last_name))
             submission.add_event_for_author('A referee has been invited.')
-            submission.add_event_for_eic('%s has been recruited and invited as a referee.'
-                                         % ref_recruit_form.cleaned_data['last_name'])
-            # Copy the key to the refereeing invitation:
-            ref_invitation.invitation_key = reg_invitation.invitation_key
-            ref_invitation.save()
+            submission.add_event_for_eic('{} has been recruited and invited as a referee.'.format(
+                referee_invitation.last_name))
 
+            mail_request.send()
+            return redirect(reverse('submissions:editorial_page',
+                                    kwargs={'arxiv_identifier_w_vn_nr': arxiv_identifier_w_vn_nr}))
+        else:
+            return mail_request.return_render()
     return redirect(reverse('submissions:editorial_page',
                             kwargs={'arxiv_identifier_w_vn_nr': arxiv_identifier_w_vn_nr}))
 
@@ -840,8 +833,6 @@ def send_refereeing_invitation(request, arxiv_identifier_w_vn_nr, contributor_id
                                       invitation=invitation)
     if mail_request.is_valid():
         invitation.save()
-        # SubmissionUtils.load({'invitation': invitation})
-        # SubmissionUtils.send_refereeing_invitation_email()
         submission.add_event_for_author('A referee has been invited.')
         submission.add_event_for_eic('Referee %s has been invited.' % contributor.user.last_name)
         messages.success(request, 'Invitation sent')
@@ -936,7 +927,7 @@ def accept_or_decline_ref_invitations(request, invitation_id=None):
         'invitation': invitation,
         'form': form
     }
-    return render(request, 'submissions/accept_or_decline_ref_invitations.html', context)
+    return render(request, 'submissions/referee_invitations_form.html', context)
 
 
 def decline_ref_invitation(request, invitation_key):
@@ -950,9 +941,10 @@ def decline_ref_invitation(request, invitation_key):
             # User filled in: Accept
             messages.warning(request, 'Please login and go to your personal page if you'
                                       ' want to accept the invitation.')
-            return render(request, 'submissions/decline_ref_invitation.html', context)
+            return render(request, 'submissions/referee_invitations_decline.html', context)
 
         invitation.accepted = False
+        invitation.date_responded = timezone.now()
         invitation.refusal_reason = form.cleaned_data['refusal_reason']
         invitation.save()
         SubmissionUtils.load({'invitation': invitation}, request)
@@ -966,7 +958,7 @@ def decline_ref_invitation(request, invitation_key):
 
         messages.success(request, 'Thank you for informing us that you will not provide a Report.')
         return redirect(reverse('scipost:index'))
-    return render(request, 'submissions/decline_ref_invitation.html', context)
+    return render(request, 'submissions/referee_invitations_decline.html', context)
 
 
 @login_required
@@ -1313,7 +1305,7 @@ def submit_report(request, arxiv_identifier_w_vn_nr):
                                        'You may carry on working on it,'
                                        ' or leave the page and finish it later.'))
             context = {'submission': submission, 'form': form}
-            return render(request, 'submissions/submit_report.html', context)
+            return render(request, 'submissions/report_form.html', context)
 
         # Send mails if report is submitted
         SubmissionUtils.load({'report': newreport}, request)
@@ -1328,7 +1320,7 @@ def submit_report(request, arxiv_identifier_w_vn_nr):
         return redirect(submission.get_absolute_url())
 
     context = {'submission': submission, 'form': form}
-    return render(request, 'submissions/submit_report.html', context)
+    return render(request, 'submissions/report_form.html', context)
 
 
 @login_required
@@ -1400,11 +1392,6 @@ def prepare_for_voting(request, rec_id):
     recommendation = get_object_or_404(
         EICRecommendation.objects.active().filter(submission__in=submissions), id=rec_id)
 
-    fellows_with_expertise = recommendation.submission.fellows.filter(
-        contributor__expertises__contains=[recommendation.submission.subject_area])
-
-    coauthorships = {}
-
     eligibility_form = VotingEligibilityForm(request.POST or None, instance=recommendation)
     if eligibility_form.is_valid():
         eligibility_form.save()
@@ -1417,23 +1404,9 @@ def prepare_for_voting(request, rec_id):
         return redirect(reverse('submissions:editorial_page',
                                 args=[recommendation.submission.arxiv_identifier_w_vn_nr]))
     else:
-        # Identify possible co-authorships in last 3 years, disqualifying Fellow from voting:
-        if recommendation.submission.metadata is not None:
-            for fellow in fellows_with_expertise:
-                sub_auth_boolean_str = '((' + (recommendation.submission
-                                               .metadata['entries'][0]['authors'][0]['name']
-                                               .split()[-1])
-                for author in recommendation.submission.metadata['entries'][0]['authors'][1:]:
-                    sub_auth_boolean_str += '+OR+' + author['name'].split()[-1]
-                    sub_auth_boolean_str += ')+AND+'
-                    search_str = sub_auth_boolean_str + fellow.contributor.user.last_name + ')'
-                    queryurl = ('http://export.arxiv.org/api/query?search_query=au:%s'
-                                % search_str + '&sortBy=submittedDate&sortOrder=descending'
-                                '&max_results=5')
-                    arxivquery = feedparser.parse(queryurl)
-                    queryresults = arxivquery
-                    if queryresults.entries:
-                        coauthorships[fellow.contributor.user.last_name] = queryresults
+        fellows_with_expertise = recommendation.submission.fellows.filter(
+            contributor__expertises__contains=[recommendation.submission.subject_area])
+        coauthorships = recommendation.submission.flag_coauthorships_arxiv(fellows_with_expertise)
 
     context = {
         'recommendation': recommendation,
@@ -1562,12 +1535,13 @@ def fix_College_decision(request, rec_id):
         # Add SubmissionEvent for authors
         # Do not write a new event for minor/major modification: already done at moment of
         # creation.
+        notify_manuscript_accepted(request.user, submission, False)
         submission.add_event_for_author('An Editorial Recommendation has been formulated: %s.'
                                         % recommendation.get_recommendation_display())
     elif recommendation.recommendation == -3:
         # Reject + update-reject other versions of submission
         submission.status = 'rejected'
-        for sub in submission.other_versions_pool:
+        for sub in submission.other_versions:
             sub.status = 'resubmitted_rejected'
             sub.save()
 
diff --git a/templates/email/email_assigned_invitation_officer.html b/templates/email/email_assigned_invitation_officer.html
new file mode 100644
index 0000000000000000000000000000000000000000..18c4ceed38ec39faea4cbdeb41adcae9ea1a1d73
--- /dev/null
+++ b/templates/email/email_assigned_invitation_officer.html
@@ -0,0 +1,20 @@
+<p>
+    Dear {{ stream.invitations_officer.user.last_name }},
+</p>
+<p>
+    You are now assigned as Invitations Officer to the stream
+</p>
+
+<p>
+    {{ stream }}
+    <br>
+    Production Supervisor: {{ stream.supervisor }}
+</p>
+<p>
+    The stream will now be open for you on the <a href="https://scipost.org/{% url 'production:production' %}">Production page</a>.
+</p>
+
+
+<p><em>
+    This mail is automatically generated and therefore not signed.
+</em></p>
diff --git a/templates/email/email_assigned_invitation_officer.txt b/templates/email/email_assigned_invitation_officer.txt
new file mode 100644
index 0000000000000000000000000000000000000000..23103d8d37c01657006538e0fbe586f843bb87da
--- /dev/null
+++ b/templates/email/email_assigned_invitation_officer.txt
@@ -0,0 +1,15 @@
+Dear {{ stream.invitations_officer.user.last_name }},
+\n
+\n
+You are now assigned as Invitations Officer to the stream
+\n
+\n
+{{ stream }}
+\n
+Production Supervisor: {{ stream.supervisor }}
+\n
+\n
+The stream will now be open for you on the Production page (https://scipost.org/{% url 'production:production' %}).
+
+\n\n
+This mail is automatically generated and therefore not signed.
diff --git a/templates/email/email_assigned_production_officer.html b/templates/email/email_assigned_production_officer.html
new file mode 100644
index 0000000000000000000000000000000000000000..b6a474c49b15f6a73e33510e6dddf4481abfc841
--- /dev/null
+++ b/templates/email/email_assigned_production_officer.html
@@ -0,0 +1,20 @@
+<p>
+    Dear {{ stream.invitations_officer.user.last_name }},
+</p>
+<p>
+    You are now assigned as Production Officer to the stream
+</p>
+
+<p>
+    {{ stream }}
+    <br>
+    Production Supervisor: {{ stream.supervisor }}
+</p>
+<p>
+    The stream will now be open for you on the <a href="https://scipost.org/{% url 'production:production' %}">Production page</a>.
+</p>
+
+
+<p><em>
+    This mail is automatically generated and therefore not signed.
+</em></p>
diff --git a/templates/email/email_assigned_production_officer.txt b/templates/email/email_assigned_production_officer.txt
new file mode 100644
index 0000000000000000000000000000000000000000..60c80841b0abbf7cf207abab747e57e7d982ca80
--- /dev/null
+++ b/templates/email/email_assigned_production_officer.txt
@@ -0,0 +1,15 @@
+Dear {{ stream.invitations_officer.user.last_name }},
+\n
+\n
+You are now assigned as Production Officer to the stream
+\n
+\n
+{{ stream }}
+\n
+Production Supervisor: {{ stream.supervisor }}
+\n
+\n
+The stream will now be open for you on the Production page (https://scipost.org/{% url 'production:production' %}).
+
+\n\n
+This mail is automatically generated and therefore not signed.
diff --git a/templates/email/email_assigned_supervisor.html b/templates/email/email_assigned_supervisor.html
new file mode 100644
index 0000000000000000000000000000000000000000..c2df2ad3212a9004f4bdcceb7043bcf9e9663181
--- /dev/null
+++ b/templates/email/email_assigned_supervisor.html
@@ -0,0 +1,18 @@
+<p>
+    Dear {{ stream.invitations_officer.user.last_name }},
+</p>
+<p>
+    You are now assigned as Production Supervisor to the stream
+</p>
+
+<p>
+    {{ stream }}
+</p>
+<p>
+    The stream will now be open for you on the <a href="https://scipost.org/{% url 'production:production' %}">Production page</a>.
+</p>
+
+
+<p><em>
+    This mail is automatically generated and therefore not signed.
+</em></p>
diff --git a/templates/email/email_assigned_supervisor.txt b/templates/email/email_assigned_supervisor.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9a4c201acb1be95a6fb7050f117ec804de4b202f
--- /dev/null
+++ b/templates/email/email_assigned_supervisor.txt
@@ -0,0 +1,13 @@
+Dear {{ stream.invitations_officer.user.last_name }},
+\n
+\n
+You are now assigned as Production Supervisor to the stream
+\n
+\n
+{{ stream }}
+\n
+\n
+The stream will now be open for you on the Production page (https://scipost.org/{% url 'production:production' %}).
+
+\n\n
+This mail is automatically generated and therefore not signed.
diff --git a/templates/email/email_fellow_tasklist.html b/templates/email/email_fellow_tasklist.html
index 1168cd5d0bf51e6f26e327a843520a002722d27b..946b6d92f136c8f5c8bbe6d5c91b26f81869652f 100644
--- a/templates/email/email_fellow_tasklist.html
+++ b/templates/email/email_fellow_tasklist.html
@@ -1,8 +1,9 @@
 {% load bootstrap %}
 {% load submissions_extras %}
 <p>Dear {{ fellow.get_title_display }} {{ fellow.user.last_name }},</p>
-<p>Please find below a digest of your current assignments, with (if applicable) pending and upcoming required actions. Many thanks in advance for your timely intervention on any point in need of attention.</p>
+<p>Please find below a summary of your current assignments, with (if applicable) pending and upcoming required actions. Many thanks in advance for your timely intervention on any point in need of attention. Your good work as an Editorial Fellow is greatly appreciated!</p>
 {% if assignments_to_consider %}
+<br/>
 <h3>Assignments for you to consider:</h3>
 <ul>
 {% for assignment in assignments_to_consider %}
@@ -13,6 +14,7 @@
 </ul>
 {% endif %}
 {% if assignments_ongoing %}
+<br/>
 <h3>Current assignments (Submissions for which you are Editor-in-charge):</h3>
 <ul>
   {% for assignment in assignments_ongoing %}
@@ -22,12 +24,12 @@
       <em>by {{ assignment.submission.author_list }}</em>
     </p>
     {% if assignment.submission.cycle.has_required_actions %}
-    <h3>Required actions (go to the <a href="https://scipost.org{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial page</a>):</h3>
+    <h3>Required actions (go to the <a href="https://scipost.org{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial page</a> to carry them out):</h3>
     <ul>
       {% for action in assignment.submission.cycle.get_required_actions %}
       <li>{{action.1}}</li>
       {% empty %}
-      <li>No actions required</li>
+      <li>No action required. Great job!</li>
       {% endfor %}
     </ul>
     {% endif %}
@@ -36,6 +38,7 @@
 </ul>
 {% endif %}
 {% if assignments_upcoming_deadline %}
+<br/>
 <h3>Upcoming refereeing deadlines:</h3>
 <ul>
   {% for assignment in assignments_upcoming_deadline %}
@@ -45,17 +48,18 @@
       <em>by {{ assignment.submission.author_list }}</em>
     </p>
     <p>Refereeing deadline: {{ assignment.submission.reporting_deadline|date:"Y-m-d" }}.</p>
-    <p><em>You can manage this Submission from its </em><a href="https://scipost.org{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial page</a></p>
+    <p><em>You can manage this Submission from its </em><a href="https://scipost.org{% url 'submissions:editorial_page' assignment.submission.arxiv_identifier_w_vn_nr %}">Editorial page</a>.</p>
   </li>
   {% endfor %}
 </ul>
 {% endif %}
+<br/>
 <h3>Need help or assistance?</h3>
 <p>
   Don't hesitate to <a href="mailto:edadmin@scipost.org">email the editorial administration</a> if you need any assistance.
 </p>
 <p>
-    Many thanks,<br>
-    The SciPost Team.
+    Many thanks for your valuable work,<br>
+    SciPost Editorial Administration
 </p>
 {% include 'email/_footer.html' %}
diff --git a/templates/email/email_fellow_tasklist.txt b/templates/email/email_fellow_tasklist.txt
index 6444d5a2c99caca945f96ffe94e099772517812f..5a1424cd1a55cd578243402fce16a23587b90f5f 100644
--- a/templates/email/email_fellow_tasklist.txt
+++ b/templates/email/email_fellow_tasklist.txt
@@ -1,6 +1,6 @@
 {% load submissions_extras %}
 Dear {{ fellow.get_title_display }} {{ fellow.user.last_name }},\n\n
-Please find below a digest of your current assignments, with (if applicable) pending and upcoming required actions. Many thanks in advance for your timely intervention on any point in need of attention.\n\n
+Please find below a digest of your current assignments, with (if applicable) pending and upcoming required actions. Many thanks in advance for your timely intervention on any point in need of attention. Your good work as an Editorial Fellow is greatly appreciated!\n\n
 {% if assignments_to_consider %}
 Assignments for you to consider:\n\n
 {% for assignment in assignments_to_consider %}
@@ -18,7 +18,7 @@ Required actions:\n
 {% for action in assignment.submission.cycle.get_required_actions %}
 {{action.1}}\n
 {% empty %}
-No actions required\n
+No action required. Great job!\n
 {% endfor %}
 {% endif %}
 {% endfor %}
@@ -34,5 +34,5 @@ Refereeing deadline: {{ assignment.submission.reporting_deadline|date:"Y-m-d" }}
 {% endif %}
 \n
 You can take action on all of these starting from your personal page at https://scipost.org/personal_page. Don't hesitate to email the editorial administration at edadmin@scipost.org if you need any assistance.\n\n
-Many thanks,\n
-The SciPost Team.
+Many thanks for your valuable work,\n
+SciPost Editorial Administration
diff --git a/templates/search/indexes/comments/comment_text.txt b/templates/search/indexes/comments/comment_text.txt
index e187fa7fe26f1fc628c3190ea008c6eeec87dc31..896dec580c8f2d3fb36fbbbf840076ce88922a09 100644
--- a/templates/search/indexes/comments/comment_text.txt
+++ b/templates/search/indexes/comments/comment_text.txt
@@ -1,3 +1,3 @@
 {{object.comment_text}}
 {{object.date_submitted}}
-{{object.author}}
+{% if not object.anonymous %}{{ object.author }}{% endif %}
diff --git a/templates/search/indexes/journals/publication_text.txt b/templates/search/indexes/journals/publication_text.txt
index 9301802cec499403a346eca064adb3c2b88650a7..6db507fe4816b76de5751b31bbeff46c9264ebe2 100644
--- a/templates/search/indexes/journals/publication_text.txt
+++ b/templates/search/indexes/journals/publication_text.txt
@@ -4,3 +4,6 @@
 {{object.abstract}}
 {{object.doi_string}}
 {{object.citation}}
+{% for institution in object.institutions.all %}
+{{ institution.name }}
+{% endfor %}
diff --git a/theses/admin.py b/theses/admin.py
index 762043c8deb4a77bade074668e87e1417f9c3db0..94177b185ecf4c00bfe385a83071b0596ac5a578 100644
--- a/theses/admin.py
+++ b/theses/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from django import forms
diff --git a/theses/apps.py b/theses/apps.py
index 2dccc1fb8900b49fc0c2a66d99e433e686131be9..0e16e0186e7f9435bc38b221c59e1573e000523b 100644
--- a/theses/apps.py
+++ b/theses/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/theses/constants.py b/theses/constants.py
index 36157994481348e9a350223babaab919c9788979..2bd041a1c342b0b5416fff4bfb8f5228cadb3b32 100644
--- a/theses/constants.py
+++ b/theses/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 MASTER_THESIS = 'MA'
 PHD_THESIS = 'PhD'
 HABILITATION_THESIS = 'Hab'
diff --git a/theses/factories.py b/theses/factories.py
index c5461a1a6160fe74397f854ed00309966ed6c06c..54865fd5107fef5644938afcf3d7df024ab303ed 100644
--- a/theses/factories.py
+++ b/theses/factories.py
@@ -1,6 +1,8 @@
-import factory
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
 
-from django.utils import timezone
+import factory
 
 from common.helpers.factories import FormFactory
 from journals.constants import SCIPOST_JOURNALS_DOMAINS
@@ -11,32 +13,45 @@ from .models import ThesisLink
 from .forms import VetThesisLinkForm
 from .constants import THESIS_TYPES
 
-from faker import Faker
 
-timezone.now()
-
-
-class ThesisLinkFactory(factory.django.DjangoModelFactory):
+class BaseThesisLinkFactory(factory.django.DjangoModelFactory):
     class Meta:
         model = ThesisLink
+        abstract = True
 
     requested_by = factory.Iterator(Contributor.objects.all())
+    vetted_by = factory.Iterator(Contributor.objects.all())
+    vetted = True
+
     type = factory.Iterator(THESIS_TYPES, getter=lambda c: c[0])
     domain = factory.Iterator(SCIPOST_JOURNALS_DOMAINS, getter=lambda c: c[0])
     discipline = factory.Iterator(SCIPOST_DISCIPLINES, getter=lambda c: c[0])
     subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0])
-    title = factory.Faker('text')
+    title = factory.Faker('sentence')
     pub_link = factory.Faker('uri')
     author = factory.Faker('name')
     supervisor = factory.Faker('name')
     institution = factory.Faker('company')
-    defense_date = factory.Faker('date')
-    abstract = factory.lazy_attribute(lambda x: Faker().paragraph())
-
-
-class VettedThesisLinkFactory(ThesisLinkFactory):
-    vetted_by = factory.Iterator(Contributor.objects.all())
-    vetted = True
+    defense_date = factory.Faker('date_this_decade')
+    abstract = factory.Faker('paragraph')
+
+    @factory.post_generation
+    def author_as_cont(self, create, extracted, **kwargs):
+        if not create:
+            # Simple build, do nothing.
+            return
+
+        if extracted:
+            # A list of groups were passed in, use them
+            for contributor in extracted:
+                self.author_as_cont.add(contributor)
+        elif factory.Faker('boolean'):
+            contributor = Contributor.objects.order_by('?').first()
+            self.author_as_cont.add(contributor)
+
+
+class ThesisLinkFactory(BaseThesisLinkFactory):
+    pass
 
 
 class VetThesisLinkFormFactory(FormFactory):
diff --git a/theses/forms.py b/theses/forms.py
index e41bead8cc6d63181214e30fc03477e1916f6069..d2c32be4ea1a7c44b5223410f4d6cd1cd31de0a3 100644
--- a/theses/forms.py
+++ b/theses/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 from django.core.mail import EmailMessage
 from django.template.loader import render_to_string
diff --git a/theses/helpers.py b/theses/helpers.py
index 7b2961e45306298fd6544c8e515f7a8d22675579..a3a6b6e35ac8f1e7b50c3c3f0cf329dfcd81ca6b 100644
--- a/theses/helpers.py
+++ b/theses/helpers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 
diff --git a/theses/management/__init__.py b/theses/management/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/theses/management/commands/__init__.py b/theses/management/commands/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/theses/management/commands/create_theses.py b/theses/management/commands/create_theses.py
new file mode 100644
index 0000000000000000000000000000000000000000..05da93dd5ba989a9f32fecb25405943ad3532bd7
--- /dev/null
+++ b/theses/management/commands/create_theses.py
@@ -0,0 +1,23 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
+from django.core.management.base import BaseCommand
+
+from theses import factories
+
+
+class Command(BaseCommand):
+    help = 'Create random Thesis objects using the factories.'
+
+    def add_arguments(self, parser):
+        parser.add_argument(
+            'number', action='store', default=0, type=int,
+            help='Number of Theses to add')
+
+    def handle(self, *args, **kwargs):
+        self.create_theses(kwargs['number'])
+
+    def create_theses(self, n):
+        factories.ThesisLinkFactory.create_batch(n)
+        self.stdout.write(self.style.SUCCESS('Successfully created {n} Theses.'.format(n=n)))
diff --git a/theses/managers.py b/theses/managers.py
index 532868fe98d8a5da4ae06189320b3da18db7736e..9da2cd077fe10d3ae2e8b030f9a009ac45d86e00 100644
--- a/theses/managers.py
+++ b/theses/managers.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 
 
diff --git a/theses/models.py b/theses/models.py
index a6c05936e7ac238d5cc3976e9aa2c3e10092ab69..89593889c39b61b1d28675a9ac2b3fc706ad1b18 100644
--- a/theses/models.py
+++ b/theses/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.db import models
 from django.contrib.contenttypes.fields import GenericRelation
 from django.urls import reverse
diff --git a/theses/search_indexes.py b/theses/search_indexes.py
index 804c2d206f4a1bb6416f8b2e2fb05fe362322898..1f8a8ec14c4dad93bbb3dfbe7e4863d7c28f6d27 100644
--- a/theses/search_indexes.py
+++ b/theses/search_indexes.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 # import datetime
 
 from haystack import indexes
diff --git a/theses/templates/theses/_thesislink_card_content.html b/theses/templates/theses/_thesislink_card_content.html
index fdca0c00f25b0315d7d9d70cc449942a1b2e73c0..f78ff5c16ed8551c0793f7e70fb66127a0aff1a7 100644
--- a/theses/templates/theses/_thesislink_card_content.html
+++ b/theses/templates/theses/_thesislink_card_content.html
@@ -1,13 +1,15 @@
-<div class="card-body">
-    <h5 class="pb-0">{{ thesislink.get_discipline_display }} &middot; {{ thesislink.get_domain_display }} &middot; {{ thesislink.get_subject_area_display }}</h5>
-    <h3>
-        <a href="{% url 'theses:thesis' thesislink_id=thesislink.id %}">{{ thesislink.title }}</a>
-    </h3>
-    <p class="mt-0 mb-3">
-        {{ thesislink.get_type_display }} thesis by {{ thesislink.author }}
-        (supervisor(s): {{ thesislink.supervisor }})
-    </p>
-    <p class="card-text text-muted">
-        Defense date: {{ thesislink.defense_date }} &middot; Latest activity: {{ thesislink.latest_activity|date:"DATE_FORMAT" }}
-    </p>
+<div class="card-body px-0">
+    <div class="li thesis">
+        <h5 class="subject">{{ thesislink.get_discipline_display }} &middot; {{ thesislink.get_domain_display }} &middot; {{ thesislink.get_subject_area_display }}</h5>
+        <h3 class="title">
+            <a href="{% url 'theses:thesis' thesislink_id=thesislink.id %}">{{ thesislink.title }}</a>
+        </h3>
+        <p class="authors">
+            {{ thesislink.get_type_display }} thesis by {{ thesislink.author }}
+            (supervisor(s): {{ thesislink.supervisor }})
+        </p>
+        <p class="meta mb-2">
+            Defense date: {{ thesislink.defense_date }} &middot; Latest activity: {{ thesislink.latest_activity|date:"DATE_FORMAT" }}
+        </p>
+    </div>
 </div>
diff --git a/theses/templates/theses/thesislink_list.html b/theses/templates/theses/thesislink_list.html
index 366df71def6d21942c125873c06967d3493d055d..468529133cb9c6cc35c79a1fa7f6e121a19cfc8f 100644
--- a/theses/templates/theses/thesislink_list.html
+++ b/theses/templates/theses/thesislink_list.html
@@ -26,7 +26,7 @@
               <h2 class="card-title">Search SciPost Theses:</h2>
               <form class="small" action="{% url 'theses:theses' %}" method="get">
                   {{ form|bootstrap:'4,8,sm' }}
-                <input class="btn btn-sm btn-secondary" type="submit" value="Search" />
+                <input class="btn btn-outline-secondary" type="submit" value="Search" />
               </form>
           </div>
         </div>
diff --git a/theses/test_forms.py b/theses/test_forms.py
index e43421af0883d236ceaf90809572d91d06a1e792..585d229aabe00db067cb0095992d869bb5627ab2 100644
--- a/theses/test_forms.py
+++ b/theses/test_forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import factory
 
 from django.test import TestCase, RequestFactory
diff --git a/theses/test_models.py b/theses/test_models.py
index c878df0efa98a652ee2799dc19b40a82511e354e..abfea743cb02ebfa8e2afad9ebd43b64e5071acc 100644
--- a/theses/test_models.py
+++ b/theses/test_models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from django.test import TestCase
diff --git a/theses/test_views.py b/theses/test_views.py
index 91e37fc3c6b157d72e479765f8dc7d3c5ba6344e..ec15bd9658410f3a432983c93f38c9c0d1544e8c 100644
--- a/theses/test_views.py
+++ b/theses/test_views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import re
 
 from django.core import mail
@@ -13,7 +17,7 @@ from comments.factories import CommentFactory
 from comments.forms import CommentForm
 from comments.models import Comment
 from .views import RequestThesisLink, VetThesisLink, thesis_detail
-from .factories import ThesisLinkFactory, VettedThesisLinkFactory, VetThesisLinkFormFactory
+from .factories import ThesisLinkFactory, ThesisLinkFactory, VetThesisLinkFormFactory
 from .models import ThesisLink
 from .forms import VetThesisLinkForm
 from common.helpers import model_form_data
@@ -163,14 +167,14 @@ class TestTheses(TestCase):
         self.target = reverse('theses:theses')
 
     def test_empty_search_query(self):
-        thesislink = VettedThesisLinkFactory()
+        thesislink = ThesisLinkFactory()
         response = self.client.get(self.target)
         search_results = response.context["object_list"]
         self.assertTrue(thesislink in search_results)
 
     def test_search_query_on_author(self):
-        thesislink = VettedThesisLinkFactory()
-        other_thesislink = VettedThesisLinkFactory()
+        thesislink = ThesisLinkFactory()
+        other_thesislink = ThesisLinkFactory()
         form_data = {'author': thesislink.author}
         response = self.client.get(self.target, form_data)
         search_results = response.context['object_list']
diff --git a/theses/urls.py b/theses/urls.py
index 392a03a506201c587c66fcd1443cacf865db753c..55b13f363e04547fd5d56060fa43ea9465ae8875 100644
--- a/theses/urls.py
+++ b/theses/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import include, url
 from django.views.generic import TemplateView
 
diff --git a/theses/views.py b/theses/views.py
index 1bf37ce05b79a2fe4cdbbf6269fe051eb4b40c8c..bc5a8ebfdf353a32ad86e212948cb0d37932a6dd 100644
--- a/theses/views.py
+++ b/theses/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.utils import timezone
diff --git a/virtualmeetings/admin.py b/virtualmeetings/admin.py
index 6baf0995ccc27f01638926563db60ed849deebda..290c16932804f47e834f2faf76051cd01fff6131 100644
--- a/virtualmeetings/admin.py
+++ b/virtualmeetings/admin.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.contrib import admin
 
 from django import forms
diff --git a/virtualmeetings/apps.py b/virtualmeetings/apps.py
index 9bbfd4ea04576759b428cbd1b1127a2767b82216..199239cc1b68cf14a202dc974cb1add2ec8360f4 100644
--- a/virtualmeetings/apps.py
+++ b/virtualmeetings/apps.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.apps import AppConfig
 
 
diff --git a/virtualmeetings/constants.py b/virtualmeetings/constants.py
index f75281f3af9bd47307eb81ce6542ae3b89b8ffc8..1c280f461f07d888a2735e7c4978d6f41e0290d6 100644
--- a/virtualmeetings/constants.py
+++ b/virtualmeetings/constants.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 MOTION_AMENDMENTS = 'ByLawAmend'
 MOTION_WORKFLOW = 'Workflow'
 MOTION_GENERAL = 'General'
diff --git a/virtualmeetings/forms.py b/virtualmeetings/forms.py
index 5e550cee26bcbd8c9c529d64b472d63eff94dd7e..0ad28e598a8bf32039227efeaf7b1b6d17b54562 100644
--- a/virtualmeetings/forms.py
+++ b/virtualmeetings/forms.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django import forms
 
 from .models import Feedback, Nomination, Motion
diff --git a/virtualmeetings/models.py b/virtualmeetings/models.py
index 5d50f9d1c0eaa5dfb9a93e87af20b2f20424ab51..6365bc4b5557f533e0cadf1a8f9de473ac090373 100644
--- a/virtualmeetings/models.py
+++ b/virtualmeetings/models.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.core.urlresolvers import reverse
 from django.db import models
 from django.shortcuts import get_object_or_404
diff --git a/virtualmeetings/templates/virtualmeetings/VGM_detail.html b/virtualmeetings/templates/virtualmeetings/VGM_detail.html
index 230b9b4e8207bd86b227390e961b0bec461fcd4b..c3e7b279978cf42805616d53fb7d193f2bba3079 100644
--- a/virtualmeetings/templates/virtualmeetings/VGM_detail.html
+++ b/virtualmeetings/templates/virtualmeetings/VGM_detail.html
@@ -53,13 +53,13 @@
       <div class="card card-grey my-2">
           <div class="card-header">
               <h2>Feedback on SciPost</h2>
-              <a href="javascript:;" class="btn btn-secondary" data-toggle="toggle" data-target="#submitFeedback">Provide feedback</a>
+              <a href="javascript:;" class="btn btn-outline-secondary" data-toggle="toggle" data-target="#submitFeedback">Provide feedback</a>
           </div>
           <div class="card-body" style="display: none;" id="submitFeedback">
               <form action="{% url 'virtualmeetings:feedback' VGM_id=VGM.id %}" method="post">
             	{% csrf_token %}
             	{{ feedback_form|bootstrap }}
-            	<input class="btn btn-secondary" type="submit" value="Submit"/>
+            	<input class="btn btn-outline-secondary" type="submit" value="Submit"/>
               </form>
           </div>
       </div>
@@ -74,12 +74,12 @@
           	<li id="feedback{{feedback.id}}">
                 {% include 'virtualmeetings/feedback_content.html' with feedback=feedback %}
             </li>
-              	<a href="javascript:;" class="btn btn-secondary" data-toggle="toggle" data-target="#remarkfeedbackForm{{ feedback.id }}">Add a remark on this Feedback</a>
+              	<a href="javascript:;" class="btn btn-outline-secondary" data-toggle="toggle" data-target="#remarkfeedbackForm{{ feedback.id }}">Add a remark on this Feedback</a>
               	<div class="py-2" id="remarkfeedbackForm{{ feedback.id }}">
               	  <form action="{% url 'virtualmeetings:add_remark_on_feedback' VGM_id=VGM.id feedback_id=feedback.id %}" method="post">
               	    {% csrf_token %}
               	    {{ remark_form|bootstrap:'0,12' }}
-              	    <input class="btn btn-secondary" type="submit" value="Submit" />
+              	    <input class="btn btn-outline-secondary" type="submit" value="Submit" />
               	  </form>
               	</div>
               	{% if feedback.remarks.all %}
@@ -103,13 +103,13 @@
           <div class="card card-grey my-2">
               <div class="card-header">
                   <h2>Nominations to the Editorial College</h2>
-                  <a href="javascript:;" class="btn btn-secondary" data-toggle="toggle" data-target="#submitNominationForm">Nominate an Editorial Fellow candidate</a>
+                  <a href="javascript:;" class="btn btn-outline-secondary" data-toggle="toggle" data-target="#submitNominationForm">Nominate an Editorial Fellow candidate</a>
               </div>
               <div class="card-body" style="display: none;" id="submitNominationForm">
                   <form action="{% url 'virtualmeetings:nominate_Fellow' VGM_id=VGM.id %}" method="post">
                 	{% csrf_token %}
                 	{{ nomination_form|bootstrap }}
-                	<input class="btn btn-secondary" type="submit" value="Submit"/>
+                	<input class="btn btn-outline-secondary" type="submit" value="Submit"/>
                   </form>
               </div>
           </div>
@@ -203,12 +203,12 @@
                                                 </div>
                                             </div>
                                             <div class="card-body bg-white">
-                                                <a href="javascript:;" class="card-link btn btn-secondary" data-toggle="toggle" data-target="#remarkForm{{ nomination.id }}">Add a remark on this Nomination</a>
+                                                <a href="javascript:;" class="card-link btn btn-outline-secondary" data-toggle="toggle" data-target="#remarkForm{{ nomination.id }}">Add a remark on this Nomination</a>
                                                 <div class="submitRemarkForm my-3" id="remarkForm{{ nomination.id }}" style="display: none;">
                                                     <form action="{% url 'virtualmeetings:add_remark_on_nomination' VGM_id=VGM.id nomination_id=nomination.id %}" method="post">
                                                     {% csrf_token %}
                                                     {{ remark_form|bootstrap:'0,12' }}
-                                                    <input type="submit" class="btn btn-secondary" value="Submit" />
+                                                    <input type="submit" class="btn btn-outline-secondary" value="Submit" />
                                                     </form>
                                                 </div>
                                             </div>
@@ -241,13 +241,13 @@
         <div class="card card-grey my-2">
             <div class="card-header">
                 <h2>Submit a new Motion</h2>
-                <a href="javascript:;" class="btn btn-secondary" data-toggle="toggle" data-target="#submitMotionForm">Put a new Motion forward</a>
+                <a href="javascript:;" class="btn btn-outline-secondary" data-toggle="toggle" data-target="#submitMotionForm">Put a new Motion forward</a>
             </div>
             <div class="card-body" style="display: none;" id="submitMotionForm">
                 <form action="{% url 'virtualmeetings:put_motion_forward' VGM_id=VGM.id %}" method="post">
                   {% csrf_token %}
                   {{ motion_form|bootstrap }}
-                  <input class="btn btn-secondary" type="submit" value="Submit"/>
+                  <input class="btn btn-outline-secondary" type="submit" value="Submit"/>
                 </form>
             </div>
         </div>
@@ -291,12 +291,12 @@
                                     <strong>(you have voted: Disagree)</strong>
                                 {% endif %}
                             </div>
-                            <a class="btn btn-secondary" href="javascript:;" data-toggle="toggle" data-target="#remarkForm{{ motion.id }}">Add a remark on this Motion</a>
+                            <a class="btn btn-outline-secondary" href="javascript:;" data-toggle="toggle" data-target="#remarkForm{{ motion.id }}">Add a remark on this Motion</a>
                             <div class="submitRemarkForm mt-3" id="remarkForm{{ motion.id }}" style="display: none;">
                                 <form action="{% url 'virtualmeetings:add_remark_on_motion' motion_id=motion.id %}" method="post">
                                     {% csrf_token %}
                                     {{ remark_form|bootstrap:"0,12" }}
-                                    <input type="submit" class="btn btn-secondary" value="Submit" />
+                                    <input type="submit" class="btn btn-outline-secondary" value="Submit" />
                                 </form>
                             </div>
                             {% if motion.remarks.all %}
diff --git a/virtualmeetings/tests.py b/virtualmeetings/tests.py
index 7ce503c2dd97ba78597f6ff6e4393132753573f6..9135c42ab26e15b71fd25dc25d9f92bcec7e676b 100644
--- a/virtualmeetings/tests.py
+++ b/virtualmeetings/tests.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.test import TestCase
 
 # Create your tests here.
diff --git a/virtualmeetings/urls.py b/virtualmeetings/urls.py
index 3a83c873c8df2e5747441ea9a6a7c2d00390e4b8..0ada961a44ae9ff41e8aed5e5b67ac19684f77b5 100644
--- a/virtualmeetings/urls.py
+++ b/virtualmeetings/urls.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 from django.conf.urls import url
 
 from . import views
diff --git a/virtualmeetings/views.py b/virtualmeetings/views.py
index d12759c0f27c7cddf47ccfc94a64271d3ca5ba9e..f3fbbc8c81af1c3b33064474cee2eddca10a4a9b 100644
--- a/virtualmeetings/views.py
+++ b/virtualmeetings/views.py
@@ -1,3 +1,7 @@
+__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)"
+__license__ = "AGPL v3"
+
+
 import datetime
 
 from django.contrib import messages
@@ -13,7 +17,8 @@ from .models import VGM, Feedback, Nomination, Motion
 
 from scipost.constants import SCIPOST_SUBJECT_AREAS
 from scipost.forms import RemarkForm
-from scipost.models import RegistrationInvitation, Contributor, Remark
+from scipost.models import Contributor, Remark
+from invitations.models import RegistrationInvitation
 
 
 @login_required
@@ -34,8 +39,8 @@ def VGM_detail(request, VGM_id):
     current_Fellows = Contributor.objects.filter(
         user__groups__name='Editorial College').order_by('user__last_name')
 
-    pending_inv_Fellows = RegistrationInvitation.objects.pending_invited_fellows()
-    declined_inv_Fellows = RegistrationInvitation.objects.declined_invited_fellows()
+    pending_inv_Fellows = RegistrationInvitation.objects.for_fellows().no_response()
+    declined_inv_Fellows = RegistrationInvitation.objects.for_fellows().declined()
     spec_list = SCIPOST_SUBJECT_AREAS  # subject_areas_dict
     nomination_form = NominationForm()
     nominations = Nomination.objects.filter(VGM=VGM_instance, accepted=None).order_by('last_name')
diff --git a/webpack.config.js b/webpack.config.js
index 6a9275d4de51bfd576ea29122e1eb64da64ec829..e9557b5bc69f0cb14559e5e8441f359e1f026abb 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -54,15 +54,6 @@ module.exports = {
             jQuery: 'jquery',
             Tether: 'tether',
             'window.Tether': 'tether',
-            // Alert: 'exports-loader?Alert!bootstrap/js/dist/alert',
-            // Button: 'exports-loader?Button!bootstrap/js/dist/button',
-            // Carousel: 'exports-loader?Carousel!bootstrap/js/dist/carousel',
-            // Collapse: 'exports-loader?Collapse!bootstrap/js/dist/collapse',
-            // Dropdown: 'exports-loader?Dropdown!bootstrap/js/dist/dropdown',
-            // Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
-            // Popover: 'exports-loader?Popover!bootstrap/js/dist/popover',
-            // Scrollspy: 'exports-loader?Scrollspy!bootstrap/js/dist/scrollspy',
-            // Tab: 'exports-loader?Tab!bootstrap/js/dist/tab',
             Tooltip: "exports-loader?Tooltip!bootstrap/js/dist/tooltip",
             Util: 'exports-loader?Util!bootstrap/js/dist/util',
             Popper: ['popper.js', 'default'],