The SOFTWARE PRODUCT (SUBLIME TEXT) is protected by copyright laws and 
international copyright treaties, as well as other intellectual property laws and 
treaties. The SOFTWARE PRODUCT is licensed, not sold.

1. LICENSES
   SUBLIME TEXT is licensed as follows:
     a. Installation and Usage.
        Licenses are per user and valid for use on all supported operating 
        systems. License keys may be used on multiple computers and operating 
        systems, provided the license key holder is the primary user. Businesses 
        must purchase at least as many licenses as the number of people using 
        SUBLIME TEXT.
     b. Backup Copies.
        You may make copies of the license key and or SUBLIME TEXT for 
        backup and archival purposes.
2. DESCRIPTION OF OTHER RIGHTS AND LIMITATIONS
   a. Maintenance of Copyright Notices.
      You must not remove or alter any copyright notices on any copy of 
      SUBLIME TEXT.
   b. Distribution.
      You may not distribute or sell license keys or SUBLIME TEXT to third 
      parties. Licenses will be revoked if distributed or sold to third parties.
   c. Rental.
      You may not rent, lease, or lend the license key or SUBLIME TEXT.
3. COPYRIGHT
   All title, including but not limited to copyrights, in and to SUBLIME TEXT and 
   any copies thereof are owned by SUBLIME HQ PTY LTD.
4. NO WARRANTIES
   SUBLIME HQ PTY LTD expressly disclaims any warranty for SUBLIME TEXT, 
   which is provided 'as is' without any express or implied warranty of any kind, 
   including but not limited to any warranties of merchantability, non-
   infringement, or fitness of a particular purpose.
5. LIMITATION OF LIABILITY
   In no event shall SUBLIME HQ PTY LTD be liable for any damages due to use 
   of SUBLIME TEXT, to the maximum extent permitted by law. This includes 
   without limitation, lost profits, business interruption, or lost information. In no 
   event will SUBLIME HQ PTY LTD be liable for loss of data or for indirect, 
   special, incidental, consequential (including lost profit), or other damages. 
   SUBLIME HQ PTY LTD shall have no liability with respect to the content of 
   SUBLIME TEXT or any part thereof, including but not limited to errors or 
   omissions contained therein, libel, trademark rights, business interruption, 
   loss of privacy or the disclosure of confidential information.
