ThreadSanitizer for Windows depends on two packages from third parties.
1. PIN, available from http://www.pintool.org/downloads.html.
2. dbghelp.dll version 6.11.1.404, available from
   http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi

For more details see http://code.google.com/p/data-race-test/wiki/ThreadSanitizerForWindows

Below are the licenses for PIN and dbghelp.dll:

----------------------- PIN ------------------------------------------
IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.  By
downloading, copying, installing or using the software you agree to
this license.  If you do not agree to this license, do not download,
install, copy or use the software.
 
Intel Open Source License
  
Copyright (c) 2003 Intel Corporation
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
   
Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.  Redistributions
in binary form must reproduce the above copyright notice, this list of
conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.  Neither the name of
the Intel Corporation nor the names of its contributors may be used to
endorse or promote products derived from this software without
specific prior written permission.
     
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
'AS IS' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE INTEL OR
ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


----------------------- dbghelp.dll -----------------------------------
MICROSOFT SOFTWARE LICENSE TERMS
MICROSOFT DEBUGGING TOOLS FOR WINDOWS 
These license terms are an agreement between Microsoft Corporation (or based on where you live, one of its affiliates) and you.  Please read them.  They apply to the software named above, which includes the media on which you received it, if any.  The terms also apply to any Microsoft
·	updates,
·	supplements,
·	Internet-based services 
·	support services, and
·	Debugging symbol files that you may access over the internet 
for this software, unless other terms accompany those items.  If so, those terms apply.
By using the software, you accept these terms.  If you do not accept them, do not use the software.
If you comply with these license terms, you have the rights below.
1.	INSTALLATION AND USE RIGHTS.  One user may install and use any number of copies of the software on your devices to design, develop, debug and test your programs.
2.	ADDITIONAL LICENSING REQUIREMENTS AND/OR USE RIGHTS.
a.	Distributable Code.  The software contains code that you are permitted to distribute in programs you develop if you comply with the terms below.
i.	Right to Use and Distribute.  The code and text files listed below are “Distributable Code.”
·	REDIST.TXT Files.  You may copy and distribute the object code form of code listed in REDIST.TXT files.
·	Sample Code.  You may modify, copy, and distribute the source and object code form of code marked as “sample.”
·	Third Party Distribution.  You may permit distributors of your programs to copy and distribute the Distributable Code as part of those programs.
ii.	Distribution Requirements.  For any Distributable Code you distribute, you must
·	add significant primary functionality to it in your programs;
·	require distributors and external end users to agree to terms that protect it at least as much as this agreement; 
·	display your valid copyright notice on your programs; and
·	indemnify, defend, and hold harmless Microsoft from any claims, including attorneys’ fees, related to the distribution or use of your programs.
iii.	Distribution Restrictions.  You may not
·	alter any copyright, trademark or patent notice in the Distributable Code; 
·	distribute any symbol files which you may access or use under these license terms for the software;
·	use Microsoft’s trademarks in your programs’ names or in a way that suggests your programs come from or are endorsed by Microsoft; 
·	distribute Distributable Code to run on a platform other than the Windows platform;
·	include Distributable Code in malicious, deceptive or unlawful programs; or
·	modify or distribute the source code of any Distributable Code so that any part of it becomes subject to an Excluded License.  An Excluded License is one that requires, as a condition of use, modification or distribution, that
·	the code be disclosed or distributed in source code form; or 
·	others have the right to modify it.
3.	Scope of License.  The software is licensed, not sold. This agreement only gives you some rights to use the software.  Microsoft reserves all other rights.  Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement.  In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways.    You may not
·	work around any technical limitations in the software;
·	reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;
·	make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;
·	publish the software for others to copy;
·	rent, lease or lend the software;
·	transfer the software or this agreement to any third party; or
·	use the software for commercial software hosting services.   
4.	INTERNET-BASED SERVICES.  Microsoft provides Internet-based services with the software.  It may change or cancel them at any time.
a.	Consent for Internet-Based Services.  The software contains features which may connect to Microsoft or service provider computer systems over the Internet.  In some cases, you will not receive a separate notice when they connect.  You may switch these features on or you may choose not to use them.  For more information about these features, see http://www.microsoft.com/info/privacy/default.mspx.  By using these features, you consent to the transmission of this information.  Microsoft does not use the information to identify or contact you.
b.	Misuse of Internet-based Services.  You may not use these services in any way that could harm them or impair anyone else’s use of them.  You may not use the services to try to gain unauthorized access to any service, data, account or network by any means.     
  
5.	BACKUP COPY.  You may make one backup copy of the software.  You may use it only to reinstall the software.
6.	DOCUMENTATION.  Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.
7.	Export Restrictions.  The software is subject to United States export laws and regulations.  You must comply with all domestic and international export laws and regulations that apply to the software.  These laws include restrictions on destinations, end users and end use.  For additional information, see www.microsoft.com/exporting <http://www.microsoft.com/exporting>.
8.	SUPPORT SERVICES. Because this software is “as is,” we may not provide support services for it.
9.	Entire Agreement.  This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.
10.	Applicable Law.
a.	United States.  If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles.  The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.
b.	Outside the United States.  If you acquired the software in any other country, the laws of that country apply.
11.	Legal Effect.  This agreement describes certain legal rights.  You may have other rights under the laws of your country.  You may also have rights with respect to the party from whom you acquired the software.  This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.
12.	Disclaimer of Warranty.   The software is licensed “as-is.”  You bear the risk of using it.  Microsoft gives no express warranties, guarantees or conditions.  You may have additional consumer rights under your local laws which this agreement cannot change.  To the extent permitted under your local laws, Microsoft excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
13.	Limitation on and Exclusion of Remedies and Damages.   You can recover from Microsoft and its suppliers only direct damages up to U.S. $5.00.  You cannot recover any other damages, including consequential, lost profits, special, indirect or incidental damages.
This limitation applies to
·	anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and
·	claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.
It also applies even if Microsoft knew or should have known about the possibility of the damages.  The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.
Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French.
Remarque : Ce logiciel étant distribué au Québec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en français.
EXONÉRATION DE GARANTIE. Le logiciel visé par une licence est offert « tel quel ». Toute utilisation de ce logiciel est à votre seule risque et péril. Microsoft n’accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection des consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d’adéquation à un usage particulier et d’absence de contrefaçon sont exclues.
LIMITATION DES DOMMAGES-INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES.  Vous pouvez obtenir de Microsoft et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5,00 $ US. Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices.
Cette limitation concerne :
·	tout  ce qui est relié au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et
·	les réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d’une autre faute dans la limite autorisée par la loi en vigueur.
Elle s’applique également, même si Microsoft connaissait ou devrait connaître l’éventualité d’un tel dommage.  Si votre pays n’autorise pas l’exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l’exclusion ci-dessus ne s’appliquera pas à votre égard.
EFFET JURIDIQUE.  Le présent contrat décrit certains droits juridiques. Vous pourriez avoir d’autres droits prévus par les lois de votre pays.  Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.
